Skip to content

Property Data

albert.resources.property_data

Attributes:

Name Type Description
ReturnScope

ReturnScope

ReturnScope = Literal['task', 'block', 'none']

PropertyDataStatus

Bases: str, Enum

Outcome status of a property data write operation.

Reported by the API on create/update responses (for example on InventoryPropertyDataCreate) to indicate whether the values were persisted.

Attributes:

Name Type Description
SUCCESS str

The property data was written successfully.

FAILURE str

The property data write failed. Serialized as "Failed".

SUCCESS

SUCCESS = 'Success'

FAILURE

FAILURE = 'Failed'

DataEntity

Bases: str, Enum

The kind of entity that a piece of property data is attached to.

Selects how the values are keyed and where they live in the platform.

Attributes:

Name Type Description
TASK str

Data measured on a task, organized per block, interval combination, and trial. Task results roll up to the associated inventory item.

WORKFLOW str

Data keyed to a workflow (a specific set of parameter setpoints).

INVENTORY str

Custom property data stored directly on an inventory item, independent of any task. Distinct from Inventory Specs / Attributes (reference properties).

TASK

TASK = 'task'

WORKFLOW

WORKFLOW = 'workflow'

INVENTORY

INVENTORY = 'inventory'

PropertyDataStorageKey

Bases: BaseAlbertModel

Storage references (preview, thumbnail, original) for an uploaded media file.

Show JSON schema:
{
  "description": "Storage references (preview, thumbnail, original) for an uploaded media file.",
  "properties": {
    "preview": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Preview"
    },
    "thumb": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Thumb"
    },
    "original": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Original"
    }
  },
  "title": "PropertyDataStorageKey",
  "type": "object"
}

Fields:

preview

preview: str | None = None

thumb

thumb: str | None = None

original

original: str | None = None

PropertyData

Bases: BaseAlbertModel

A single stored result value together with any rich-media backing data.

Returned by the API as part of a PropertyValue. For simple numeric or text results only value is populated; for image and curve data columns the additional fields carry the uploaded file references and processing metadata.

Show JSON schema:
{
  "$defs": {
    "PropertyDataStorageKey": {
      "description": "Storage references (preview, thumbnail, original) for an uploaded media file.",
      "properties": {
        "preview": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Preview"
        },
        "thumb": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Thumb"
        },
        "original": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Original"
        }
      },
      "title": "PropertyDataStorageKey",
      "type": "object"
    },
    "StorageKeyReference": {
      "description": "S3 storage key references for a data column file result.",
      "properties": {
        "rawfile": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The raw file storage key.",
          "title": "Rawfile"
        },
        "s3Input": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the input file.",
          "title": "S3Input"
        },
        "s3Output": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the processed output file.",
          "title": "S3Output"
        },
        "preview": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a preview image.",
          "title": "Preview"
        },
        "thumb": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a thumbnail image.",
          "title": "Thumb"
        },
        "original": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the original file.",
          "title": "Original"
        }
      },
      "title": "StorageKeyReference",
      "type": "object"
    }
  },
  "description": "A single stored result value together with any rich-media backing data.\n\nReturned by the API as part of a [`PropertyValue`][albert.resources.property_data.PropertyValue]. For simple numeric or\ntext results only ``value`` is populated; for image and curve data columns the\nadditional fields carry the uploaded file references and processing metadata.",
  "properties": {
    "id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The Albert ID of this property data record (format ``PTD...``).",
      "title": "Id"
    },
    "value": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The stored result value. All values are stored as strings in Albert.",
      "title": "Value"
    },
    "valueNumeric": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The numeric form of the value, when the column is numeric. Serialized as ``valueNumeric``.",
      "title": "Valuenumeric"
    },
    "valueString": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The string form of the value, when the column is string-typed. Serialized as ``valueString``.",
      "title": "Valuestring"
    },
    "valueType": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The type of the value (e.g. numeric, string, image, curve). Serialized as ``valueType``.",
      "title": "Valuetype"
    },
    "s3Key": {
      "anyOf": [
        {
          "$ref": "#/$defs/PropertyDataStorageKey"
        },
        {
          "$ref": "#/$defs/StorageKeyReference"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Storage references for uploaded media (image previews/thumbnails or curve files). Serialized as ``s3Key``.",
      "title": "S3Key"
    },
    "job": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Processing job metadata, used for curve/image ingestion.",
      "title": "Job"
    },
    "csvMapping": {
      "anyOf": [
        {
          "additionalProperties": {
            "type": "string"
          },
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Mapping from CSV headers to curve result identifiers, for curve data. Serialized as ``csvMapping``.",
      "title": "Csvmapping"
    },
    "curveRemarks": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Remarks associated with curve data. Serialized as ``curveRemarks``.",
      "title": "Curveremarks"
    },
    "athena": {
      "anyOf": [
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Backing analytical store metadata for curve data. See Also --------",
      "title": "Athena"
    }
  },
  "title": "PropertyData",
  "type": "object"
}

Fields:

id

id: PropertyDataId | None = None

The Albert ID of this property data record (format PTD...).

value

value: str | None = None

The stored result value. All values are stored as strings in Albert.

value_numeric

value_numeric: float | None = None

The numeric form of the value, when the column is numeric. Serialized as valueNumeric.

value_string

value_string: str | None = None

The string form of the value, when the column is string-typed. Serialized as valueString.

value_type

value_type: str | None = None

The type of the value (e.g. numeric, string, image, curve). Serialized as valueType.

storage_key

storage_key: (
    PropertyDataStorageKey | StorageKeyReference | None
) = None

Storage references for uploaded media (image previews/thumbnails or curve files). Serialized as s3Key.

job

job: dict[str, Any] | None = None

Processing job metadata, used for curve/image ingestion.

csv_mapping

csv_mapping: dict[str, str] | None = None

Mapping from CSV headers to curve result identifiers, for curve data. Serialized as csvMapping.

curve_remarks

curve_remarks: dict[str, Any] | None = None

Remarks associated with curve data. Serialized as curveRemarks.

athena

athena: dict[str, Any] | None = None

Backing analytical store metadata for curve data. See Also --------

PropertyValue

Bases: BaseAlbertModel

A measured result for one data column, with its value, unit, and metadata.

Appears inside a Trial (as one of its data_columns) and represents the value captured for a single data column of a data template. Both a numeric and a string form of the value may be present depending on the column type.

Show JSON schema:
{
  "$defs": {
    "AuditFields": {
      "description": "The audit fields for a resource",
      "properties": {
        "by": {
          "default": null,
          "title": "By",
          "type": "string"
        },
        "byName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Byname"
        },
        "at": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "At"
        }
      },
      "title": "AuditFields",
      "type": "object"
    },
    "EntityLink": {
      "properties": {
        "id": {
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "required": [
        "id"
      ],
      "title": "EntityLink",
      "type": "object"
    },
    "PropertyData": {
      "description": "A single stored result value together with any rich-media backing data.\n\nReturned by the API as part of a [`PropertyValue`][albert.resources.property_data.PropertyValue]. For simple numeric or\ntext results only ``value`` is populated; for image and curve data columns the\nadditional fields carry the uploaded file references and processing metadata.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of this property data record (format ``PTD...``).",
          "title": "Id"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The stored result value. All values are stored as strings in Albert.",
          "title": "Value"
        },
        "valueNumeric": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The numeric form of the value, when the column is numeric. Serialized as ``valueNumeric``.",
          "title": "Valuenumeric"
        },
        "valueString": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The string form of the value, when the column is string-typed. Serialized as ``valueString``.",
          "title": "Valuestring"
        },
        "valueType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The type of the value (e.g. numeric, string, image, curve). Serialized as ``valueType``.",
          "title": "Valuetype"
        },
        "s3Key": {
          "anyOf": [
            {
              "$ref": "#/$defs/PropertyDataStorageKey"
            },
            {
              "$ref": "#/$defs/StorageKeyReference"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Storage references for uploaded media (image previews/thumbnails or curve files). Serialized as ``s3Key``.",
          "title": "S3Key"
        },
        "job": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Processing job metadata, used for curve/image ingestion.",
          "title": "Job"
        },
        "csvMapping": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Mapping from CSV headers to curve result identifiers, for curve data. Serialized as ``csvMapping``.",
          "title": "Csvmapping"
        },
        "curveRemarks": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Remarks associated with curve data. Serialized as ``curveRemarks``.",
          "title": "Curveremarks"
        },
        "athena": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Backing analytical store metadata for curve data. See Also --------",
          "title": "Athena"
        }
      },
      "title": "PropertyData",
      "type": "object"
    },
    "PropertyDataStorageKey": {
      "description": "Storage references (preview, thumbnail, original) for an uploaded media file.",
      "properties": {
        "preview": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Preview"
        },
        "thumb": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Thumb"
        },
        "original": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Original"
        }
      },
      "title": "PropertyDataStorageKey",
      "type": "object"
    },
    "Status": {
      "description": "The status of a resource.\n\nAttributes\n----------\nACTIVE : str\n    The resource is fully operational and visible in normal operations.\nINACTIVE : str\n    The resource is hidden from normal operations and disabled from use.",
      "enum": [
        "active",
        "inactive"
      ],
      "title": "Status",
      "type": "string"
    },
    "StorageKeyReference": {
      "description": "S3 storage key references for a data column file result.",
      "properties": {
        "rawfile": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The raw file storage key.",
          "title": "Rawfile"
        },
        "s3Input": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the input file.",
          "title": "S3Input"
        },
        "s3Output": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the processed output file.",
          "title": "S3Output"
        },
        "preview": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a preview image.",
          "title": "Preview"
        },
        "thumb": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a thumbnail image.",
          "title": "Thumb"
        },
        "original": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the original file.",
          "title": "Original"
        }
      },
      "title": "StorageKeyReference",
      "type": "object"
    },
    "Unit": {
      "description": "A unit of measure (e.g. ``g``, ``mL``, ``\u00b0C``).\n\nUnits qualify quantities throughout the platform: inventory amounts,\nparameter values, and property results. Managed through\n[`UnitCollection`][albert.collections.units.UnitCollection] (``client.units``).\n\n!!! example\n    ```python\n    from albert.resources.units import Unit, UnitCategory\n    unit = Unit(name=\"milliliter\", symbol=\"mL\", category=UnitCategory.LIQUID_VOLUME)\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the unit (format ``UNI...``). Set when the unit is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "name": {
          "description": "Currently this is the only field that is displayed in Albert, so use this for display purposes. Therefore, users often use the symbol for the unit here as that's the preferred display.",
          "title": "Name",
          "type": "string"
        },
        "symbol": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display symbol for the unit (e.g. ``\"g\"``).",
          "title": "Symbol"
        },
        "Synonyms": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Alternate names or spellings that also refer to this unit.",
          "title": "Synonyms"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/UnitCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The physical quantity the unit measures (e.g. ``Mass``, ``Volume``)."
        },
        "verified": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": false,
          "description": "Whether the unit has been verified in Albert. Read-only.",
          "title": "Verified"
        }
      },
      "required": [
        "name"
      ],
      "title": "Unit",
      "type": "object"
    },
    "UnitCategory": {
      "description": "The physical quantity a unit measures.\n\nAttributes\n----------\nLENGTH : str\n    Length units (e.g. m, cm).\nVOLUME : str\n    Volume units (e.g. m\u00b3).\nLIQUID_VOLUME : str\n    Liquid volume units (e.g. L, mL).\nANGLES : str\n    Angle units (e.g. degrees, radians).\nTIME : str\n    Time units (e.g. s, h).\nFREQUENCY : str\n    Frequency units (e.g. Hz).\nMASS : str\n    Mass units (e.g. g, kg).\nCURRENT : str\n    Electric current units (e.g. A).\nTEMPERATURE : str\n    Temperature units (e.g. \u00b0C, K).\nAMOUNT : str\n    Amount of substance units (e.g. mol).\nLUMINOSITY : str\n    Luminous intensity units (e.g. cd).\nFORCE : str\n    Force units (e.g. N).\nENERGY : str\n    Energy units (e.g. J).\nPOWER : str\n    Power units (e.g. W).\nPRESSURE : str\n    Pressure units (e.g. Pa, bar).\nELECTRICITY_AND_MAGNETISM : str\n    Electricity and magnetism units.\nOTHER : str\n    Units that do not fit another category.\nWEIGHT : str\n    Weight units.\nAREA : str\n    Area units (e.g. m\u00b2).\nSURFACE_AREA : str\n    Surface area units.\nBINARY : str\n    Binary/digital-information units (e.g. bytes).\nCAPACITANCE : str\n    Capacitance units (e.g. F).\nSPEED : str\n    Speed units (e.g. m/s).\nELECTRICAL_CONDUCTIVITY : str\n    Electrical conductivity units.\nELECTRICAL_PERMITTIVITY : str\n    Electrical permittivity units.\nDENSITY : str\n    Density units (e.g. g/mL).\nRESISTANCE : str\n    Electrical resistance units (e.g. \u03a9).",
      "enum": [
        "Length",
        "Volume",
        "Liquid volume",
        "Angles",
        "Time",
        "Frequency",
        "Mass",
        "Electric current",
        "Temperature",
        "Amount of substance",
        "Luminous intensity",
        "Force",
        "Energy",
        "Power",
        "Pressure",
        "Electricity and magnetism",
        "Other",
        "Weight",
        "Area",
        "Surface Area",
        "Binary",
        "Capacitance",
        "Speed",
        "Electrical conductivity",
        "Electrical permitivitty",
        "Density",
        "Resistance"
      ],
      "title": "UnitCategory",
      "type": "string"
    }
  },
  "description": "A measured result for one data column, with its value, unit, and metadata.\n\nAppears inside a [`Trial`][albert.resources.property_data.Trial] (as one of its ``data_columns``) and represents\nthe value captured for a single data column of a data template. Both a numeric\nand a string form of the value may be present depending on the column type.",
  "properties": {
    "id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Identifier of the result within the trial.",
      "title": "Id"
    },
    "name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The data column / result name.",
      "title": "Name"
    },
    "sequence": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Pointer to the specific data (result) column; more unique than a data column ID because a data column can be repeated within a Data Template (analogous to a parameter repeated in a Parameter Group).",
      "title": "Sequence"
    },
    "calculation": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional calculation expression used in place of a fixed value; may reference other result columns (e.g. ``=((COL3-COL1)/COL2)*100``). The result is computed and shown in the UI.",
      "title": "Calculation"
    },
    "valueNumeric": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The numeric form of the value. Serialized as ``valueNumeric``.",
      "title": "Valuenumeric"
    },
    "valueString": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The string form of the value. Serialized as ``valueString``.",
      "title": "Valuestring"
    },
    "value": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The stored value.",
      "title": "Value"
    },
    "Unit": {
      "anyOf": [
        {
          "$ref": "#/$defs/Unit"
        },
        {
          "$ref": "#/$defs/EntityLink"
        },
        {
          "additionalProperties": true,
          "type": "object"
        }
      ],
      "description": "The unit of measure for the value, as an entity link. Serialized as ``Unit``.",
      "title": "Unit"
    },
    "PropertyData": {
      "anyOf": [
        {
          "$ref": "#/$defs/PropertyData"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The backing stored value / media record. Serialized as ``PropertyData``."
    },
    "dataColumnUniqueId": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The unique ID of the data column this result captures. Serialized as ``dataColumnUniqueId``.",
      "title": "Datacolumnuniqueid"
    },
    "hidden": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": false,
      "description": "Whether the result is hidden. See Also --------",
      "title": "Hidden"
    }
  },
  "title": "PropertyValue",
  "type": "object"
}

Fields:

id

id: str | None = None

Identifier of the result within the trial.

name

name: str | None = None

The data column / result name.

sequence

sequence: str | None = None

Pointer to the specific data (result) column; more unique than a data column ID because a data column can be repeated within a Data Template (analogous to a parameter repeated in a Parameter Group).

calculation

calculation: str | None = None

Optional calculation expression used in place of a fixed value; may reference other result columns (e.g. =((COL3-COL1)/COL2)*100). The result is computed and shown in the UI.

numeric_value

numeric_value: float | None = None

The numeric form of the value. Serialized as valueNumeric.

string_value

string_value: str | None = None

The string form of the value. Serialized as valueString.

value

value: str | None = None

The stored value.

unit

unit: SerializeAsEntityLink[Unit] | dict

The unit of measure for the value, as an entity link. Serialized as Unit.

property_data

property_data: PropertyData | None = None

The backing stored value / media record. Serialized as PropertyData.

data_column_unique_id

data_column_unique_id: str | None = None

The unique ID of the data column this result captures. Serialized as dataColumnUniqueId.

hidden

hidden: bool | None = False

Whether the result is hidden. See Also --------

Trial

Bases: BaseAlbertModel

One replicate measurement of a given interval combination.

A trial holds the set of PropertyValue results recorded for one row of data under a DataInterval. Multiple trials under the same interval are repeat measurements of the same parameter setpoints.

Show JSON schema:
{
  "$defs": {
    "AuditFields": {
      "description": "The audit fields for a resource",
      "properties": {
        "by": {
          "default": null,
          "title": "By",
          "type": "string"
        },
        "byName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Byname"
        },
        "at": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "At"
        }
      },
      "title": "AuditFields",
      "type": "object"
    },
    "EntityLink": {
      "properties": {
        "id": {
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "required": [
        "id"
      ],
      "title": "EntityLink",
      "type": "object"
    },
    "PropertyData": {
      "description": "A single stored result value together with any rich-media backing data.\n\nReturned by the API as part of a [`PropertyValue`][albert.resources.property_data.PropertyValue]. For simple numeric or\ntext results only ``value`` is populated; for image and curve data columns the\nadditional fields carry the uploaded file references and processing metadata.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of this property data record (format ``PTD...``).",
          "title": "Id"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The stored result value. All values are stored as strings in Albert.",
          "title": "Value"
        },
        "valueNumeric": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The numeric form of the value, when the column is numeric. Serialized as ``valueNumeric``.",
          "title": "Valuenumeric"
        },
        "valueString": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The string form of the value, when the column is string-typed. Serialized as ``valueString``.",
          "title": "Valuestring"
        },
        "valueType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The type of the value (e.g. numeric, string, image, curve). Serialized as ``valueType``.",
          "title": "Valuetype"
        },
        "s3Key": {
          "anyOf": [
            {
              "$ref": "#/$defs/PropertyDataStorageKey"
            },
            {
              "$ref": "#/$defs/StorageKeyReference"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Storage references for uploaded media (image previews/thumbnails or curve files). Serialized as ``s3Key``.",
          "title": "S3Key"
        },
        "job": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Processing job metadata, used for curve/image ingestion.",
          "title": "Job"
        },
        "csvMapping": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Mapping from CSV headers to curve result identifiers, for curve data. Serialized as ``csvMapping``.",
          "title": "Csvmapping"
        },
        "curveRemarks": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Remarks associated with curve data. Serialized as ``curveRemarks``.",
          "title": "Curveremarks"
        },
        "athena": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Backing analytical store metadata for curve data. See Also --------",
          "title": "Athena"
        }
      },
      "title": "PropertyData",
      "type": "object"
    },
    "PropertyDataStorageKey": {
      "description": "Storage references (preview, thumbnail, original) for an uploaded media file.",
      "properties": {
        "preview": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Preview"
        },
        "thumb": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Thumb"
        },
        "original": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Original"
        }
      },
      "title": "PropertyDataStorageKey",
      "type": "object"
    },
    "PropertyValue": {
      "description": "A measured result for one data column, with its value, unit, and metadata.\n\nAppears inside a [`Trial`][albert.resources.property_data.Trial] (as one of its ``data_columns``) and represents\nthe value captured for a single data column of a data template. Both a numeric\nand a string form of the value may be present depending on the column type.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Identifier of the result within the trial.",
          "title": "Id"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The data column / result name.",
          "title": "Name"
        },
        "sequence": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Pointer to the specific data (result) column; more unique than a data column ID because a data column can be repeated within a Data Template (analogous to a parameter repeated in a Parameter Group).",
          "title": "Sequence"
        },
        "calculation": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional calculation expression used in place of a fixed value; may reference other result columns (e.g. ``=((COL3-COL1)/COL2)*100``). The result is computed and shown in the UI.",
          "title": "Calculation"
        },
        "valueNumeric": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The numeric form of the value. Serialized as ``valueNumeric``.",
          "title": "Valuenumeric"
        },
        "valueString": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The string form of the value. Serialized as ``valueString``.",
          "title": "Valuestring"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The stored value.",
          "title": "Value"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "additionalProperties": true,
              "type": "object"
            }
          ],
          "description": "The unit of measure for the value, as an entity link. Serialized as ``Unit``.",
          "title": "Unit"
        },
        "PropertyData": {
          "anyOf": [
            {
              "$ref": "#/$defs/PropertyData"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The backing stored value / media record. Serialized as ``PropertyData``."
        },
        "dataColumnUniqueId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unique ID of the data column this result captures. Serialized as ``dataColumnUniqueId``.",
          "title": "Datacolumnuniqueid"
        },
        "hidden": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": false,
          "description": "Whether the result is hidden. See Also --------",
          "title": "Hidden"
        }
      },
      "title": "PropertyValue",
      "type": "object"
    },
    "Status": {
      "description": "The status of a resource.\n\nAttributes\n----------\nACTIVE : str\n    The resource is fully operational and visible in normal operations.\nINACTIVE : str\n    The resource is hidden from normal operations and disabled from use.",
      "enum": [
        "active",
        "inactive"
      ],
      "title": "Status",
      "type": "string"
    },
    "StorageKeyReference": {
      "description": "S3 storage key references for a data column file result.",
      "properties": {
        "rawfile": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The raw file storage key.",
          "title": "Rawfile"
        },
        "s3Input": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the input file.",
          "title": "S3Input"
        },
        "s3Output": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the processed output file.",
          "title": "S3Output"
        },
        "preview": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a preview image.",
          "title": "Preview"
        },
        "thumb": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a thumbnail image.",
          "title": "Thumb"
        },
        "original": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the original file.",
          "title": "Original"
        }
      },
      "title": "StorageKeyReference",
      "type": "object"
    },
    "Unit": {
      "description": "A unit of measure (e.g. ``g``, ``mL``, ``\u00b0C``).\n\nUnits qualify quantities throughout the platform: inventory amounts,\nparameter values, and property results. Managed through\n[`UnitCollection`][albert.collections.units.UnitCollection] (``client.units``).\n\n!!! example\n    ```python\n    from albert.resources.units import Unit, UnitCategory\n    unit = Unit(name=\"milliliter\", symbol=\"mL\", category=UnitCategory.LIQUID_VOLUME)\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the unit (format ``UNI...``). Set when the unit is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "name": {
          "description": "Currently this is the only field that is displayed in Albert, so use this for display purposes. Therefore, users often use the symbol for the unit here as that's the preferred display.",
          "title": "Name",
          "type": "string"
        },
        "symbol": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display symbol for the unit (e.g. ``\"g\"``).",
          "title": "Symbol"
        },
        "Synonyms": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Alternate names or spellings that also refer to this unit.",
          "title": "Synonyms"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/UnitCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The physical quantity the unit measures (e.g. ``Mass``, ``Volume``)."
        },
        "verified": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": false,
          "description": "Whether the unit has been verified in Albert. Read-only.",
          "title": "Verified"
        }
      },
      "required": [
        "name"
      ],
      "title": "Unit",
      "type": "object"
    },
    "UnitCategory": {
      "description": "The physical quantity a unit measures.\n\nAttributes\n----------\nLENGTH : str\n    Length units (e.g. m, cm).\nVOLUME : str\n    Volume units (e.g. m\u00b3).\nLIQUID_VOLUME : str\n    Liquid volume units (e.g. L, mL).\nANGLES : str\n    Angle units (e.g. degrees, radians).\nTIME : str\n    Time units (e.g. s, h).\nFREQUENCY : str\n    Frequency units (e.g. Hz).\nMASS : str\n    Mass units (e.g. g, kg).\nCURRENT : str\n    Electric current units (e.g. A).\nTEMPERATURE : str\n    Temperature units (e.g. \u00b0C, K).\nAMOUNT : str\n    Amount of substance units (e.g. mol).\nLUMINOSITY : str\n    Luminous intensity units (e.g. cd).\nFORCE : str\n    Force units (e.g. N).\nENERGY : str\n    Energy units (e.g. J).\nPOWER : str\n    Power units (e.g. W).\nPRESSURE : str\n    Pressure units (e.g. Pa, bar).\nELECTRICITY_AND_MAGNETISM : str\n    Electricity and magnetism units.\nOTHER : str\n    Units that do not fit another category.\nWEIGHT : str\n    Weight units.\nAREA : str\n    Area units (e.g. m\u00b2).\nSURFACE_AREA : str\n    Surface area units.\nBINARY : str\n    Binary/digital-information units (e.g. bytes).\nCAPACITANCE : str\n    Capacitance units (e.g. F).\nSPEED : str\n    Speed units (e.g. m/s).\nELECTRICAL_CONDUCTIVITY : str\n    Electrical conductivity units.\nELECTRICAL_PERMITTIVITY : str\n    Electrical permittivity units.\nDENSITY : str\n    Density units (e.g. g/mL).\nRESISTANCE : str\n    Electrical resistance units (e.g. \u03a9).",
      "enum": [
        "Length",
        "Volume",
        "Liquid volume",
        "Angles",
        "Time",
        "Frequency",
        "Mass",
        "Electric current",
        "Temperature",
        "Amount of substance",
        "Luminous intensity",
        "Force",
        "Energy",
        "Power",
        "Pressure",
        "Electricity and magnetism",
        "Other",
        "Weight",
        "Area",
        "Surface Area",
        "Binary",
        "Capacitance",
        "Speed",
        "Electrical conductivity",
        "Electrical permitivitty",
        "Density",
        "Resistance"
      ],
      "title": "UnitCategory",
      "type": "string"
    }
  },
  "description": "One replicate measurement of a given interval combination.\n\nA trial holds the set of [`PropertyValue`][albert.resources.property_data.PropertyValue] results recorded for one row of\ndata under a [`DataInterval`][albert.resources.property_data.DataInterval]. Multiple trials under the same interval are\nrepeat measurements of the same parameter setpoints.",
  "properties": {
    "trialNo": {
      "description": "The trial (row) number. Serialized as ``trialNo``.",
      "title": "Trialno",
      "type": "integer"
    },
    "visibleTrialNo": {
      "default": 1,
      "description": "The relative row number shown to users. Serialized as ``visibleTrialNo``.",
      "title": "Visibletrialno",
      "type": "integer"
    },
    "void": {
      "default": false,
      "description": "Whether this trial has been voided.",
      "title": "Void",
      "type": "boolean"
    },
    "backEndTrialNo": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Internal trial identifier. Serialized as ``backEndTrialNo``.",
      "title": "Backendtrialno"
    },
    "DataColumns": {
      "description": "The results measured in this trial, one per data column. Serialized as ``DataColumns``. See Also --------",
      "items": {
        "$ref": "#/$defs/PropertyValue"
      },
      "title": "Datacolumns",
      "type": "array"
    }
  },
  "required": [
    "trialNo"
  ],
  "title": "Trial",
  "type": "object"
}

Fields:

trial_number

trial_number: int

The trial (row) number. Serialized as trialNo.

visible_trial_number

visible_trial_number: int = 1

The relative row number shown to users. Serialized as visibleTrialNo.

void

void: bool = False

Whether this trial has been voided.

back_end_trial_number

back_end_trial_number: str | None = None

Internal trial identifier. Serialized as backEndTrialNo.

data_columns

data_columns: list[PropertyValue]

The results measured in this trial, one per data column. Serialized as DataColumns. See Also --------

DataInterval

Bases: BaseAlbertModel

All trials recorded for one interval combination within a block.

An interval combination is one specific set of parameter setpoints, identified by an interval ID such as ROW1, ROW1XROW2, or the literal "default" when the block has no intervalized parameters. Build the ID with get_interval_id.

Show JSON schema:
{
  "$defs": {
    "AuditFields": {
      "description": "The audit fields for a resource",
      "properties": {
        "by": {
          "default": null,
          "title": "By",
          "type": "string"
        },
        "byName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Byname"
        },
        "at": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "At"
        }
      },
      "title": "AuditFields",
      "type": "object"
    },
    "EntityLink": {
      "properties": {
        "id": {
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "required": [
        "id"
      ],
      "title": "EntityLink",
      "type": "object"
    },
    "PropertyData": {
      "description": "A single stored result value together with any rich-media backing data.\n\nReturned by the API as part of a [`PropertyValue`][albert.resources.property_data.PropertyValue]. For simple numeric or\ntext results only ``value`` is populated; for image and curve data columns the\nadditional fields carry the uploaded file references and processing metadata.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of this property data record (format ``PTD...``).",
          "title": "Id"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The stored result value. All values are stored as strings in Albert.",
          "title": "Value"
        },
        "valueNumeric": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The numeric form of the value, when the column is numeric. Serialized as ``valueNumeric``.",
          "title": "Valuenumeric"
        },
        "valueString": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The string form of the value, when the column is string-typed. Serialized as ``valueString``.",
          "title": "Valuestring"
        },
        "valueType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The type of the value (e.g. numeric, string, image, curve). Serialized as ``valueType``.",
          "title": "Valuetype"
        },
        "s3Key": {
          "anyOf": [
            {
              "$ref": "#/$defs/PropertyDataStorageKey"
            },
            {
              "$ref": "#/$defs/StorageKeyReference"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Storage references for uploaded media (image previews/thumbnails or curve files). Serialized as ``s3Key``.",
          "title": "S3Key"
        },
        "job": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Processing job metadata, used for curve/image ingestion.",
          "title": "Job"
        },
        "csvMapping": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Mapping from CSV headers to curve result identifiers, for curve data. Serialized as ``csvMapping``.",
          "title": "Csvmapping"
        },
        "curveRemarks": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Remarks associated with curve data. Serialized as ``curveRemarks``.",
          "title": "Curveremarks"
        },
        "athena": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Backing analytical store metadata for curve data. See Also --------",
          "title": "Athena"
        }
      },
      "title": "PropertyData",
      "type": "object"
    },
    "PropertyDataStorageKey": {
      "description": "Storage references (preview, thumbnail, original) for an uploaded media file.",
      "properties": {
        "preview": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Preview"
        },
        "thumb": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Thumb"
        },
        "original": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Original"
        }
      },
      "title": "PropertyDataStorageKey",
      "type": "object"
    },
    "PropertyValue": {
      "description": "A measured result for one data column, with its value, unit, and metadata.\n\nAppears inside a [`Trial`][albert.resources.property_data.Trial] (as one of its ``data_columns``) and represents\nthe value captured for a single data column of a data template. Both a numeric\nand a string form of the value may be present depending on the column type.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Identifier of the result within the trial.",
          "title": "Id"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The data column / result name.",
          "title": "Name"
        },
        "sequence": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Pointer to the specific data (result) column; more unique than a data column ID because a data column can be repeated within a Data Template (analogous to a parameter repeated in a Parameter Group).",
          "title": "Sequence"
        },
        "calculation": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional calculation expression used in place of a fixed value; may reference other result columns (e.g. ``=((COL3-COL1)/COL2)*100``). The result is computed and shown in the UI.",
          "title": "Calculation"
        },
        "valueNumeric": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The numeric form of the value. Serialized as ``valueNumeric``.",
          "title": "Valuenumeric"
        },
        "valueString": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The string form of the value. Serialized as ``valueString``.",
          "title": "Valuestring"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The stored value.",
          "title": "Value"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "additionalProperties": true,
              "type": "object"
            }
          ],
          "description": "The unit of measure for the value, as an entity link. Serialized as ``Unit``.",
          "title": "Unit"
        },
        "PropertyData": {
          "anyOf": [
            {
              "$ref": "#/$defs/PropertyData"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The backing stored value / media record. Serialized as ``PropertyData``."
        },
        "dataColumnUniqueId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unique ID of the data column this result captures. Serialized as ``dataColumnUniqueId``.",
          "title": "Datacolumnuniqueid"
        },
        "hidden": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": false,
          "description": "Whether the result is hidden. See Also --------",
          "title": "Hidden"
        }
      },
      "title": "PropertyValue",
      "type": "object"
    },
    "Status": {
      "description": "The status of a resource.\n\nAttributes\n----------\nACTIVE : str\n    The resource is fully operational and visible in normal operations.\nINACTIVE : str\n    The resource is hidden from normal operations and disabled from use.",
      "enum": [
        "active",
        "inactive"
      ],
      "title": "Status",
      "type": "string"
    },
    "StorageKeyReference": {
      "description": "S3 storage key references for a data column file result.",
      "properties": {
        "rawfile": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The raw file storage key.",
          "title": "Rawfile"
        },
        "s3Input": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the input file.",
          "title": "S3Input"
        },
        "s3Output": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the processed output file.",
          "title": "S3Output"
        },
        "preview": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a preview image.",
          "title": "Preview"
        },
        "thumb": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a thumbnail image.",
          "title": "Thumb"
        },
        "original": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the original file.",
          "title": "Original"
        }
      },
      "title": "StorageKeyReference",
      "type": "object"
    },
    "Trial": {
      "description": "One replicate measurement of a given interval combination.\n\nA trial holds the set of [`PropertyValue`][albert.resources.property_data.PropertyValue] results recorded for one row of\ndata under a [`DataInterval`][albert.resources.property_data.DataInterval]. Multiple trials under the same interval are\nrepeat measurements of the same parameter setpoints.",
      "properties": {
        "trialNo": {
          "description": "The trial (row) number. Serialized as ``trialNo``.",
          "title": "Trialno",
          "type": "integer"
        },
        "visibleTrialNo": {
          "default": 1,
          "description": "The relative row number shown to users. Serialized as ``visibleTrialNo``.",
          "title": "Visibletrialno",
          "type": "integer"
        },
        "void": {
          "default": false,
          "description": "Whether this trial has been voided.",
          "title": "Void",
          "type": "boolean"
        },
        "backEndTrialNo": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Internal trial identifier. Serialized as ``backEndTrialNo``.",
          "title": "Backendtrialno"
        },
        "DataColumns": {
          "description": "The results measured in this trial, one per data column. Serialized as ``DataColumns``. See Also --------",
          "items": {
            "$ref": "#/$defs/PropertyValue"
          },
          "title": "Datacolumns",
          "type": "array"
        }
      },
      "required": [
        "trialNo"
      ],
      "title": "Trial",
      "type": "object"
    },
    "Unit": {
      "description": "A unit of measure (e.g. ``g``, ``mL``, ``\u00b0C``).\n\nUnits qualify quantities throughout the platform: inventory amounts,\nparameter values, and property results. Managed through\n[`UnitCollection`][albert.collections.units.UnitCollection] (``client.units``).\n\n!!! example\n    ```python\n    from albert.resources.units import Unit, UnitCategory\n    unit = Unit(name=\"milliliter\", symbol=\"mL\", category=UnitCategory.LIQUID_VOLUME)\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the unit (format ``UNI...``). Set when the unit is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "name": {
          "description": "Currently this is the only field that is displayed in Albert, so use this for display purposes. Therefore, users often use the symbol for the unit here as that's the preferred display.",
          "title": "Name",
          "type": "string"
        },
        "symbol": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display symbol for the unit (e.g. ``\"g\"``).",
          "title": "Symbol"
        },
        "Synonyms": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Alternate names or spellings that also refer to this unit.",
          "title": "Synonyms"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/UnitCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The physical quantity the unit measures (e.g. ``Mass``, ``Volume``)."
        },
        "verified": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": false,
          "description": "Whether the unit has been verified in Albert. Read-only.",
          "title": "Verified"
        }
      },
      "required": [
        "name"
      ],
      "title": "Unit",
      "type": "object"
    },
    "UnitCategory": {
      "description": "The physical quantity a unit measures.\n\nAttributes\n----------\nLENGTH : str\n    Length units (e.g. m, cm).\nVOLUME : str\n    Volume units (e.g. m\u00b3).\nLIQUID_VOLUME : str\n    Liquid volume units (e.g. L, mL).\nANGLES : str\n    Angle units (e.g. degrees, radians).\nTIME : str\n    Time units (e.g. s, h).\nFREQUENCY : str\n    Frequency units (e.g. Hz).\nMASS : str\n    Mass units (e.g. g, kg).\nCURRENT : str\n    Electric current units (e.g. A).\nTEMPERATURE : str\n    Temperature units (e.g. \u00b0C, K).\nAMOUNT : str\n    Amount of substance units (e.g. mol).\nLUMINOSITY : str\n    Luminous intensity units (e.g. cd).\nFORCE : str\n    Force units (e.g. N).\nENERGY : str\n    Energy units (e.g. J).\nPOWER : str\n    Power units (e.g. W).\nPRESSURE : str\n    Pressure units (e.g. Pa, bar).\nELECTRICITY_AND_MAGNETISM : str\n    Electricity and magnetism units.\nOTHER : str\n    Units that do not fit another category.\nWEIGHT : str\n    Weight units.\nAREA : str\n    Area units (e.g. m\u00b2).\nSURFACE_AREA : str\n    Surface area units.\nBINARY : str\n    Binary/digital-information units (e.g. bytes).\nCAPACITANCE : str\n    Capacitance units (e.g. F).\nSPEED : str\n    Speed units (e.g. m/s).\nELECTRICAL_CONDUCTIVITY : str\n    Electrical conductivity units.\nELECTRICAL_PERMITTIVITY : str\n    Electrical permittivity units.\nDENSITY : str\n    Density units (e.g. g/mL).\nRESISTANCE : str\n    Electrical resistance units (e.g. \u03a9).",
      "enum": [
        "Length",
        "Volume",
        "Liquid volume",
        "Angles",
        "Time",
        "Frequency",
        "Mass",
        "Electric current",
        "Temperature",
        "Amount of substance",
        "Luminous intensity",
        "Force",
        "Energy",
        "Power",
        "Pressure",
        "Electricity and magnetism",
        "Other",
        "Weight",
        "Area",
        "Surface Area",
        "Binary",
        "Capacitance",
        "Speed",
        "Electrical conductivity",
        "Electrical permitivitty",
        "Density",
        "Resistance"
      ],
      "title": "UnitCategory",
      "type": "string"
    }
  },
  "description": "All trials recorded for one interval combination within a block.\n\nAn interval combination is one specific set of parameter setpoints, identified\nby an interval ID such as ``ROW1``, ``ROW1XROW2``, or the literal ``\"default\"``\nwhen the block has no intervalized parameters. Build the ID with\n[`get_interval_id`][albert.resources.workflows.Workflow.get_interval_id].",
  "properties": {
    "intervalCombination": {
      "description": "The interval ID this data belongs to (e.g. ``\"default\"``, ``\"ROW1\"``, ``\"ROW1XROW2\"``). Serialized as ``intervalCombination``.",
      "title": "Intervalcombination",
      "type": "string"
    },
    "void": {
      "default": false,
      "description": "Whether this interval's data has been voided.",
      "title": "Void",
      "type": "boolean"
    },
    "Trials": {
      "description": "The replicate measurements recorded for this interval. Serialized as ``Trials``.",
      "items": {
        "$ref": "#/$defs/Trial"
      },
      "title": "Trials",
      "type": "array"
    },
    "name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "An optional display name for the interval. See Also --------",
      "title": "Name"
    }
  },
  "required": [
    "intervalCombination"
  ],
  "title": "DataInterval",
  "type": "object"
}

Fields:

interval_combination

interval_combination: str

The interval ID this data belongs to (e.g. "default", "ROW1", "ROW1XROW2"). Serialized as intervalCombination.

void

void: bool = False

Whether this interval's data has been voided.

trials

trials: list[Trial]

The replicate measurements recorded for this interval. Serialized as Trials.

name

name: str | None = None

An optional display name for the interval. See Also --------

TaskData

Bases: BaseAlbertModel

The measured results captured on a task under a single data template.

Groups the interval data recorded for one block of a task. Returned as part of InventoryPropertyData (under task_property_data), where task-measured results roll up to the associated inventory item.

Show JSON schema:
{
  "$defs": {
    "ACL": {
      "description": "A single access rule for a user.",
      "properties": {
        "id": {
          "description": "The id of the user for which this ACL applies",
          "title": "Id",
          "type": "string"
        },
        "fgc": {
          "anyOf": [
            {
              "$ref": "#/$defs/AccessControlLevel"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Fine-Grain Control Level"
        }
      },
      "required": [
        "id"
      ],
      "title": "ACL",
      "type": "object"
    },
    "AccessControlLevel": {
      "description": "Access control levels you can grant users.",
      "enum": [
        "ProjectOwner",
        "ProjectEditor",
        "ProjectViewer",
        "ProjectAllTask",
        "ProjectStrictViewer",
        "ProjectPropertyTask",
        "InventoryOwner",
        "InventoryViewer",
        "CustomTemplateOwner",
        "CustomTemplateViewer",
        "CASFullAccess"
      ],
      "title": "AccessControlLevel",
      "type": "string"
    },
    "AuditFields": {
      "description": "The audit fields for a resource",
      "properties": {
        "by": {
          "default": null,
          "title": "By",
          "type": "string"
        },
        "byName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Byname"
        },
        "at": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "At"
        }
      },
      "title": "AuditFields",
      "type": "object"
    },
    "Axis": {
      "enum": [
        "X",
        "Y"
      ],
      "title": "Axis",
      "type": "string"
    },
    "CSVMapping": {
      "description": "A mapping between CSV column headers and data column IDs.",
      "properties": {
        "mapId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A compact mapping string (e.g. ``\"Header1:DAC2900#Header2:DAC4707\"``).",
          "examples": "Header1:DAC2900#Header2:DAC4707",
          "title": "Mapid"
        },
        "mapData": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A dictionary mapping CSV header names to data column IDs.",
          "examples": {
            "Header1": "DAC2900",
            "Header2": "DAC4707"
          },
          "title": "Mapdata"
        }
      },
      "title": "CSVMapping",
      "type": "object"
    },
    "Cas": {
      "description": "A CAS entry: a chemical substance identified by its CAS Registry Number.\n\nA ``Cas`` is Albert's dictionary record for a substance. Raw-material Inventory\nItems reference these entries to declare what they are made of, pairing each\n``Cas`` with an amount (see [`CasAmount`][albert.resources.inventory.CasAmount]).\nManage entries through\n[`CasCollection`][albert.collections.cas.CasCollection] (``client.cas``): most fields\nare populated by Albert, so you typically only build a ``Cas`` from a registry\n``number`` when creating a new entry.\n\n!!! example\n    ```python\n    from albert.resources.cas import Cas\n    # Build a CAS entry to register a new substance\n    cas = Cas(number=\"7727-37-9\")\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "number": {
          "description": "The CAS number.",
          "title": "Number",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Name of the CAS.",
          "title": "Name"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The description or name of the CAS.",
          "title": "Description"
        },
        "notes": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Notes related to the CAS.",
          "title": "Notes"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/CasCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The category of the CAS."
        },
        "casSmiles": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "CAS SMILES notation.",
          "title": "Cassmiles"
        },
        "inchiKey": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "InChIKey of the CAS.",
          "title": "Inchikey"
        },
        "iUpacName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "IUPAC name of the CAS.",
          "title": "Iupacname"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The AlbertID of the CAS.",
          "title": "Albertid"
        },
        "hazards": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/Hazard"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazards associated with the CAS.",
          "title": "Hazards"
        },
        "wgk": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "German Water Hazard Class (WGK) number.",
          "title": "Wgk"
        },
        "ecListNo": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "European Community (EC) number.",
          "title": "Eclistno"
        },
        "type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Internal classification_type reference.",
          "title": "Type"
        },
        "classificationType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Classification type of the CAS.",
          "title": "Classificationtype"
        },
        "order": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "CAS order.",
          "title": "Order"
        },
        "Metadata": {
          "additionalProperties": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "integer"
              },
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/EntityLinkWithName"
              },
              {
                "$ref": "#/$defs/EntityLink"
              },
              {
                "items": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/EntityLinkWithName"
                    },
                    {
                      "$ref": "#/$defs/EntityLink"
                    }
                  ]
                },
                "type": "array"
              }
            ]
          },
          "description": "Custom metadata keyed by field. Updatable.",
          "title": "Metadata",
          "type": "object"
        }
      },
      "required": [
        "number"
      ],
      "title": "Cas",
      "type": "object"
    },
    "CasAmount": {
      "description": "A single CAS constituent and its concentration within an [`InventoryItem`][albert.resources.inventory.InventoryItem].\n\nA ``CasAmount`` links one CAS number (a chemical substance identifier) to the\namount of that substance present in an inventory item, expressed as a range\n(``min`` to ``max``) with an optional ``target``. A list of these on an\n[`InventoryItem`][albert.resources.inventory.InventoryItem] gives the item's compositional breakdown.\n\nIdentify the CAS in one of two ways: pass a full [`Cas`][albert.resources.cas.Cas]\nobject as ``cas`` (its ``id``, ``number``, and ``cas_smiles`` are then copied onto\nthis amount), or pass just the CAS resource ``id`` string. Do not pass both.\n\n!!! example\n    ```python\n    from albert.resources.inventory import CasAmount\n\n    # Reference an existing CAS resource by its Albert ID, 10-30% concentration\n    amount = CasAmount(min=10.0, max=30.0, id=\"CAS1\")\n    ```",
      "properties": {
        "min": {
          "description": "The minimum amount (concentration) of the CAS in the item.",
          "title": "Min",
          "type": "number"
        },
        "max": {
          "description": "The maximum amount (concentration) of the CAS in the item.",
          "title": "Max",
          "type": "number"
        },
        "inventoryValue": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The target amount of the CAS in the item. Serialized as ``inventoryValue``.",
          "title": "Inventoryvalue"
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the CAS resource this amount represents. Provide either a ``cas`` object or an ``id``; when ``cas`` is given, this is set from it.",
          "title": "Id"
        },
        "casCategory": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the CAS is a trade secret.",
          "title": "Cascategory"
        },
        "inventoryFunction": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/ListItem"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Business-controlled functions associated with the CAS in this inventory context (e.g. what role the substance plays). Values come from a managed list.",
          "title": "Inventoryfunction"
        },
        "type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The CAS type. Can be retrieved from the CAS collection before construction.",
          "title": "Type"
        },
        "classificationType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The EU classification source for the CAS: harmonized, notified, or REACH.",
          "title": "Classificationtype"
        },
        "substanceId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The substance ID linked to this CAS entry.",
          "title": "Substanceid"
        },
        "cas": {
          "anyOf": [
            {
              "$ref": "#/$defs/Cas"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The full CAS object associated with this amount. Read-only after init; excluded from serialization. Provide either a ``cas`` or an ``id``."
        },
        "casSmiles": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The SMILES string of the CAS resource. Read-only; set from the ``cas`` object.",
          "title": "Cassmiles"
        },
        "number": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The CAS number (e.g. ``\"7440-32-6\"``). Read-only; set from the ``cas`` object.",
          "title": "Number"
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit metadata for creation. Read-only."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/CasAuditFieldsWithEmail"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit metadata for the last update. Read-only. See Also --------"
        }
      },
      "required": [
        "min",
        "max"
      ],
      "title": "CasAmount",
      "type": "object"
    },
    "CasAuditFieldsWithEmail": {
      "description": "The audit fields for a CAS resource with email",
      "properties": {
        "by": {
          "default": null,
          "title": "By",
          "type": "string"
        },
        "byName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Byname"
        },
        "at": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "At"
        },
        "email": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Email"
        }
      },
      "title": "CasAuditFieldsWithEmail",
      "type": "object"
    },
    "CasCategory": {
      "enum": [
        "User",
        "Verisk",
        "TSCA - Public",
        "TSCA - Private",
        "not TSCA",
        "CAS linked to External Database",
        "Unknown (Trade Secret)",
        "CL_Inventory Upload"
      ],
      "title": "CasCategory",
      "type": "string"
    },
    "Company": {
      "description": "A manufacturing company or supplier tracked in Albert.\n\nA Company is the organization that makes or supplies a material. It is the\n``company`` linked on raw-material inventory items: each raw material points\nback to the Company that manufactures it (see\n[`InventoryItem`][albert.resources.inventory.InventoryItem]). Companies are managed\nthrough [`CompanyCollection`][albert.collections.companies.CompanyCollection], accessed as\n``client.companies``.\n\nCompanies are identified by a Company ID (format ``COM...``). A Company is\ntypically minimal: a name plus its assigned ID. You construct one directly\n(``Company(name=\"Acme Chemicals\")``) to create it or to attach it to an\ninventory item.\n\n!!! example\n    ```python\n    from albert.resources.companies import Company\n\n    # Build a company to create or attach to an inventory item\n    company = Company(name=\"Acme Chemicals\")\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The company's name. This is the primary identifier used when searching for or creating a company.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert Company ID (format ``COM...``). ``None`` until the company is created in or retrieved from Albert.",
          "title": "Albertid"
        },
        "distance": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Search-relevance score returned when the company comes back as a search result. Read-only; not set on companies you build yourself.",
          "title": "Distance"
        }
      },
      "required": [
        "name"
      ],
      "title": "Company",
      "type": "object"
    },
    "CurveDBMetadata": {
      "description": "Database metadata for a curve data column result.",
      "properties": {
        "tableName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Athena/database table name storing the curve data.",
          "title": "Tablename"
        },
        "partitionKey": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The partition key for the curve data table.",
          "title": "Partitionkey"
        }
      },
      "title": "CurveDBMetadata",
      "type": "object"
    },
    "CurveDataEntityLink": {
      "description": "A link to a data column that provides one axis of a curve dataset.",
      "properties": {
        "id": {
          "description": "The data column ID.",
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        },
        "axis": {
          "anyOf": [
            {
              "$ref": "#/$defs/Axis"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Which axis this column represents (X or Y)."
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit of measure for this axis.",
          "title": "Unit"
        }
      },
      "required": [
        "id"
      ],
      "title": "CurveDataEntityLink",
      "type": "object"
    },
    "DataColumn": {
      "description": "The definition of a single measured result variable in Albert.\n\nA Data Column (DAC) defines one direct output variable that a task can\nmeasure, such as ``Viscosity`` or ``APHA Color``. Data columns are the\nreusable building blocks of a Data Template's results: a\n[`DataTemplate`][albert.resources.data_templates.DataTemplate] references data columns\nthrough its ``data_column_values``, and the values recorded against a data\ncolumn during experiments are stored as Property Data.\n\nData columns are identified by a Data Column ID (format ``DAC...``, e.g.\n``\"DAC9999999\"``) and are managed through\n[`DataColumnCollection`][albert.collections.data_columns.DataColumnCollection], accessed as\n``client.data_columns``.\n\n!!! example\n    ```python\n    from albert import Albert\n    from albert.resources.data_columns import DataColumn\n    client = Albert()\n    column = DataColumn(name=\"Viscosity\")\n    created = client.data_columns.create(data_column=column)\n    created.id\n    # 'DAC9999999'\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The name of the data column (e.g. ``\"Viscosity\"``).",
          "title": "Name",
          "type": "string"
        },
        "default": {
          "type": "boolean",
          "default": false,
          "description": "Whether this is a default (platform-provided) data column.",
          "title": "Default"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom metadata keyed by field name. Values may be strings, numbers, or entity links.",
          "title": "Metadata"
        },
        "albertId": {
          "default": null,
          "description": "The Data Column ID assigned by Albert (format ``DAC...``). Populated by the server on creation; leave unset when building a column to create.",
          "title": "Albertid",
          "type": "string"
        }
      },
      "required": [
        "name"
      ],
      "title": "DataColumn",
      "type": "object"
    },
    "DataColumnValue": {
      "description": "A result data column on a Data Template.\n\nA ``DataColumnValue`` binds a [`DataColumn`][albert.resources.data_columns.DataColumn] to\na Data Template as one of the results the test captures (a \"direct variable\"). Data\ncolumns can be typed numeric, text, dropdown/enum, image, curve, date, or timestamp.\nOn a Data Template the ``value`` typically holds an example value shown on the\ndetails page rather than measured data; actual measurements are stored as Property\nData. When constructing one, provide either ``data_column`` or ``data_column_id``.\n\n!!! example\n    ```python\n    from albert.resources.data_templates import DataColumnValue\n\n    column = DataColumnValue(data_column_id=\"DAC9999999\", value=\"42\")\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "data_column": {
          "anyOf": [
            {
              "$ref": "#/$defs/DataColumn"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The full DataColumn resource this value binds to. Provide this or ``data_column_id``. Not serialized."
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the bound DataColumn (format ``DAC...``). Serialized as ``id``. Provide this or ``data_column``.",
          "title": "Id"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display name of the column.",
          "title": "Name"
        },
        "originalName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The original column name as stored in Albert. Read-only.",
          "title": "Originalname"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The column's example/default value shown on the Data Template details page.",
          "title": "Value"
        },
        "hidden": {
          "default": false,
          "description": "Whether the column is hidden. Defaults to False.",
          "title": "Hidden",
          "type": "boolean"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit of measure for the column.",
          "title": "Unit"
        },
        "calculation": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A calculation expression for a computed column.",
          "title": "Calculation"
        },
        "sequence": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The column's position within the template. Assigned by Albert.",
          "title": "Sequence"
        },
        "script": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Script"
        },
        "athena": {
          "anyOf": [
            {
              "$ref": "#/$defs/CurveDBMetadata"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "s3Key": {
          "anyOf": [
            {
              "$ref": "#/$defs/StorageKeyReference"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "job": {
          "anyOf": [
            {
              "$ref": "#/$defs/JobSummary"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "csvMapping": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "$ref": "#/$defs/CSVMapping"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Csvmapping"
        },
        "validation": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/ValueValidation"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Validation rules applied to the column value (e.g. enum options, numeric range).",
          "title": "Validation"
        },
        "CurveData": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/CurveDataEntityLink"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "For curve columns, the linked X/Y curve result columns.",
          "title": "Curvedata"
        }
      },
      "title": "DataColumnValue",
      "type": "object"
    },
    "DataInterval": {
      "description": "All trials recorded for one interval combination within a block.\n\nAn interval combination is one specific set of parameter setpoints, identified\nby an interval ID such as ``ROW1``, ``ROW1XROW2``, or the literal ``\"default\"``\nwhen the block has no intervalized parameters. Build the ID with\n[`get_interval_id`][albert.resources.workflows.Workflow.get_interval_id].",
      "properties": {
        "intervalCombination": {
          "description": "The interval ID this data belongs to (e.g. ``\"default\"``, ``\"ROW1\"``, ``\"ROW1XROW2\"``). Serialized as ``intervalCombination``.",
          "title": "Intervalcombination",
          "type": "string"
        },
        "void": {
          "default": false,
          "description": "Whether this interval's data has been voided.",
          "title": "Void",
          "type": "boolean"
        },
        "Trials": {
          "description": "The replicate measurements recorded for this interval. Serialized as ``Trials``.",
          "items": {
            "$ref": "#/$defs/Trial"
          },
          "title": "Trials",
          "type": "array"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "An optional display name for the interval. See Also --------",
          "title": "Name"
        }
      },
      "required": [
        "intervalCombination"
      ],
      "title": "DataInterval",
      "type": "object"
    },
    "DataTemplate": {
      "description": "A definition of what a test captures (a DAT).\n\nA ``DataTemplate`` (Data Template, ID format ``DAT...``) describes a test in two\nparts: its ``data_column_values`` are the measured RESULTS (the data columns, or\n\"direct variables\"), and its ``parameter_values`` are the CONDITIONS under which\nthe test is run (the \"indirect variables\"). A Data Template does not itself store\nmeasured values; those are recorded as Property Data. When the template is paired\nwith a Workflow inside a Block, only its parameters (not its result columns) flow\ninto the Workflow's setpoints.\n\nTemplates are managed through\n[`DataTemplateCollection`][albert.collections.data_templates.DataTemplateCollection]\n(``client.data_templates``).\n\n!!! example\n    ```python\n    from albert.resources.data_templates import DataTemplate, DataColumnValue\n\n    template = DataTemplate(\n        name=\"Tensile Strength Test\",\n        data_column_values=[DataColumnValue(data_column_id=\"DAC9999999\")],\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "Tags": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/Tag"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A list of Tag objects or strings representing tags.",
          "title": "Tags"
        },
        "name": {
          "description": "The name of the data template. Required.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert Data Template ID (format ``DAT...``). Set when the template is retrieved from or created in Albert. Serialized as ``albertId``.",
          "title": "Albertid"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A free-text description of the template.",
          "title": "Description"
        },
        "class": {
          "anyOf": [
            {
              "$ref": "#/$defs/SecurityClass"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The access/security class of the template. Serialized as ``class``."
        },
        "verified": {
          "default": false,
          "description": "The approval/governance state of the template. Defaults to False.",
          "title": "Verified",
          "type": "boolean"
        },
        "ACL": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/User"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The access-control list of users who can access the template. Serialized as ``ACL``.",
          "title": "Acl"
        },
        "DataColumns": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/DataColumnValue"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The measured results the test captures (its data columns / direct variables). See [`DataColumnValue`][albert.resources.data_templates.DataColumnValue].",
          "title": "Datacolumns"
        },
        "Parameters": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/ParameterValue"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The conditions under which the test is run (its indirect variables). See [`ParameterValue`][albert.resources.parameter_groups.ParameterValue].",
          "title": "Parameters"
        },
        "DeletedParameters": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/ParameterValue"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Deletedparameters"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom metadata fields. Allowed keys are defined by the workspace's CustomFields configuration.",
          "title": "Metadata"
        },
        "Documents": {
          "description": "Documents registered on the template. Read-only. Only populated by\n[`get_by_id`][albert.collections.data_templates.DataTemplateCollection.get_by_id]; empty\non templates from `get_by_ids`, `get_all`, and `search`. Scripts are not documents: they\nare attachments with category `Script`, found with\n[`get_by_parent_ids`][albert.collections.attachments.AttachmentCollection.get_by_parent_ids]\nusing the template ID as the parent.",
          "items": {
            "$ref": "#/$defs/EntityLink"
          },
          "title": "Documents",
          "type": "array"
        },
        "originalName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The original template name as stored in Albert. Read-only.",
          "title": "Originalname"
        },
        "fullName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The fully qualified template name. Read-only. See Also --------",
          "title": "Fullname"
        }
      },
      "required": [
        "name"
      ],
      "title": "DataTemplate",
      "type": "object"
    },
    "DataType": {
      "description": "The data type of a parameter value, driving how it is validated.\n\nUsed by [`ValueValidation`][albert.resources.parameter_groups.ValueValidation] to declare what kind of value a parameter\naccepts.\n\nAttributes\n----------\nNUMBER : str\n    A numeric value.\nSTRING : str\n    A free-text string value.\nENUM : str\n    A value restricted to a fixed set of options (see\n    [`EnumValidationValue`][albert.resources.parameter_groups.EnumValidationValue]).\nIMAGE : str\n    An image value.\nCURVE : str\n    A curve (series) value.\nDATE : str\n    A calendar date value stored as ``YYYY-MM-DD``.\nTIMESTAMP : str\n    A date-and-time value in ISO 8601 format with a UTC offset\n    (e.g. ``2026-05-21T14:32:00+02:00``).",
      "enum": [
        "number",
        "string",
        "enum",
        "image",
        "curve",
        "date",
        "timestamp"
      ],
      "title": "DataType",
      "type": "string"
    },
    "EntityLink": {
      "properties": {
        "id": {
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "required": [
        "id"
      ],
      "title": "EntityLink",
      "type": "object"
    },
    "EntityLinkWithName": {
      "description": "EntityLink that includes the name field in serialization.",
      "properties": {
        "id": {
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "required": [
        "id"
      ],
      "title": "EntityLinkWithName",
      "type": "object"
    },
    "EnumValidationValue": {
      "description": "Represents a value for an enum type validation.",
      "properties": {
        "text": {
          "description": "The text of the enum value.",
          "title": "Text",
          "type": "string"
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the enum value. If not provided, the ID will be generated upon creation.",
          "title": "Id"
        },
        "originalText": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Originaltext"
        }
      },
      "required": [
        "text"
      ],
      "title": "EnumValidationValue",
      "type": "object"
    },
    "Hazard": {
      "description": "A single GHS hazard classification associated with a CAS substance.\n\nHazards are read from the CAS record; a [`Cas`][albert.resources.cas.Cas] may carry a list of them.",
      "properties": {
        "subCategory": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard subcategory",
          "title": "Subcategory"
        },
        "hCode": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard code",
          "title": "Hcode"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard category",
          "title": "Category"
        },
        "class": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard classification",
          "title": "Class"
        },
        "hCodeText": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard code text",
          "title": "Hcodetext"
        }
      },
      "title": "Hazard",
      "type": "object"
    },
    "Interval": {
      "description": "One value that an intervalized parameter is varied across.\n\nWhen a parameter is \"intervalized\" (tested at several values rather than a single\nsetpoint), each of those values is represented by an [`Interval`][albert.resources.workflows.Interval]. A list of\nthem is placed on the parameter's [`ParameterSetpoint`][albert.resources.workflows.ParameterSetpoint] via its ``intervals``\nfield. The workflow then carries the resulting [`IntervalCombination`][albert.resources.workflows.IntervalCombination] entries,\none per interval (or per cartesian product of intervalized parameters).\n\n!!! example\n    ```python\n    from albert.resources.workflows import Interval\n\n    # A Normal parameter varied across two temperatures.\n    low = Interval(value=\"25\", unit={\"id\": \"UNI9999999\"})\n    high = Interval(value=\"60\", unit={\"id\": \"UNI9999999\"})\n    ```",
      "properties": {
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The value of this interval. For Normal parameters this is a scalar string (e.g. ``\"23\"``). For Special parameters (Equipment, Consumables, Templates) this may be an object with an ``id`` (and optional ``name``), matching [`ParameterSetpoint.value`][albert.resources.workflows.ParameterSetpoint.value]. Empty or hyphen intervals (represented as ``\"\"`` or ``None``) are permitted on the platform for optional parameters and exclusion matching. The sibling ``name`` field is independent and is not copied from an object value.",
          "title": "Value"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display name of the interval value. Populated for Special parameters (e.g. ``\"Pipette 0.01 -0.1 ml (10 - 100 \u03bcl)\"``). ``None`` for Normal parameters. Not auto-filled from an object ``value``.",
          "title": "Name"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit of ``value``, where applicable. If given, the unit must have an ``id``. See Also --------",
          "title": "Unit"
        },
        "rowId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Rowid"
        }
      },
      "title": "Interval",
      "type": "object"
    },
    "IntervalCombination": {
      "description": "One realized condition (interval combination) carried by a workflow.\n\nReturned by the workflow endpoint when at least one parameter in the workflow has\nbeen intervalized. A combination is a single intervalized parameter (interval ID\n``ROW#``) or the cartesian product of any number of intervalized parameters\n(``ROW#XROW#X...``). On tenants with increased intervals the id may also be a child\nworkflow id (``WFL...``) or a case-sensitive barcode. Its ``interval_id`` is what you\npass to the property_data endpoints to read or write results for that specific\ncondition.",
      "properties": {
        "interval": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The interval ID this combination is associated with. A ``ROW#`` chain of any length, a child workflow id (``WFL...``), a 9-character barcode, or ``\"default\"``. This is the same value [`get_interval_id`][albert.resources.workflows.Workflow.get_interval_id] returns for ROW-chain combinations.",
          "title": "Interval"
        },
        "intervalParams": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The parameters participating in the interval.",
          "title": "Intervalparams"
        },
        "intervalString": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A human-readable representation of the combination, of the form ``\"[Parameter Name]: [Parameter Value] [Parameter Unit]\"`` for each parameter.",
          "title": "Intervalstring"
        },
        "intervalDetails": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/IntervalDetail"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Per-parameter breakdown of the combination. Each entry has ``name`` (parameter name) and ``value`` (display string, e.g. ``\"C191778 || Pipette ...\"``). See Also --------",
          "title": "Intervaldetails"
        }
      },
      "title": "IntervalCombination",
      "type": "object"
    },
    "IntervalCombinationItem": {
      "description": "One child-workflow interval combination on a task block (\ud83e\uddea Beta).\n\nReturned by\n[`get_block_combinations`][albert.collections.tasks.TaskCollection.get_block_combinations].\nUse that method rather than any combinations array embedded on a task or block:\nthe embedded array is empty once the block has 500 or more combinations.\n\n!!! warning \"Beta Feature!\"\n    Increased intervals combination support is currently in beta and behind a platform\n    feature flag. Please do not use in production or without explicit guidance from\n    Albert. You might otherwise have a bad experience. This feature currently falls\n    outside of the Albert support contract, but we'd love your feedback!\n\n!!! example\n    ```python\n    from albert import Albert\n\n    client = Albert()\n    combo = next(\n        client.tasks.get_block_combinations(task_id=\"TASFOR1\", block_id=\"BLK1\", max_items=1)\n    )\n    combo.id\n    # 'WFL999'\n    combo.interval_barcode\n    # 'OhI8ap0HY'\n    ```",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The child workflow id for this combination (format ``WFL...``).",
          "title": "Id"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Display name of the combination (parameter names and values).",
          "title": "Name"
        },
        "intervalBarcode": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Case-sensitive barcode for the combination. Serialized as ``intervalBarcode``.",
          "title": "Intervalbarcode"
        },
        "intervalRowKey": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Legacy ROW-chain key (e.g. ``ROW3XROW7``). Serialized as ``intervalRowKey``.",
          "title": "Intervalrowkey"
        }
      },
      "title": "IntervalCombinationItem",
      "type": "object"
    },
    "IntervalDetail": {
      "description": "A single parameter's contribution to an interval combination.\n\nThis appears inside [`IntervalCombination`][albert.resources.workflows.IntervalCombination] (as its ``interval_details``) to\nbreak a combination down into the individual parameters that make it up. It is\nread from the workflow endpoint; you do not construct it directly.",
      "properties": {
        "name": {
          "description": "The parameter name (e.g. ``\"Equipment\"``).",
          "title": "Name",
          "type": "string"
        },
        "value": {
          "description": "The display value for this interval (e.g. ``\"C191778 || Pipette 0.01 -0.1 ml\"``). See Also --------",
          "title": "Value",
          "type": "string"
        }
      },
      "required": [
        "name",
        "value"
      ],
      "title": "IntervalDetail",
      "type": "object"
    },
    "InventoryCategory": {
      "description": "The kind of material an [`InventoryItem`][albert.resources.inventory.InventoryItem] represents.\n\nEvery inventory item belongs to exactly one category, which determines how it\nis used across the platform and which fields are relevant to it.\n\nAttributes\n----------\nRAW_MATERIALS : str\n    A purchased substance used as an ingredient (e.g. a solvent or pigment).\n    Typically linked to a manufacturing ``company`` and one or more CAS numbers.\nCONSUMABLES : str\n    Lab supplies consumed during work (e.g. gloves, vials, filters).\nEQUIPMENT : str\n    Instruments and apparatus (e.g. a balance or spectrometer).\nFORMULAS : str\n    A mixture designed in Albert under a Project. Creating a Formula item\n    requires ``project_id`` set to the parent Project's ID.",
      "enum": [
        "RawMaterials",
        "Consumables",
        "Equipment",
        "Formulas"
      ],
      "title": "InventoryCategory",
      "type": "string"
    },
    "InventoryDensity": {
      "description": "The density of an inventory item or lot measured by volume.\n\nDensity is expressed in grams per milliliter (g/mL) and locked at creation.\nWhen creating a volume-based item or lot, supply either a bare numeric value\n(float, int, or string) or an [`InventoryDensity`][albert.resources.inventory.InventoryDensity]\ninstance. Metadata fields (attribute ID, unit ID, unit name, locked flag)\nare populated by the server and are read-only.\n\n!!! example\n    ```python\n    from albert.resources.inventory import InventoryDensity\n\n    density = InventoryDensity(value=1.05)\n    ```",
      "properties": {
        "value": {
          "description": "The density value in g/mL.",
          "title": "Value",
          "type": "number"
        },
        "atrId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the density attribute definition. Read-only.",
          "title": "Atrid"
        },
        "unitId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the density measurement unit. Read-only.",
          "title": "Unitid"
        },
        "unitName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display name of the density measurement unit (e.g. ``g/mL``). Read-only.",
          "title": "Unitname"
        },
        "lockedAtCreation": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the density was locked when the parent entity was created. Read-only.",
          "title": "Lockedatcreation"
        }
      },
      "required": [
        "value"
      ],
      "title": "InventoryDensity",
      "type": "object"
    },
    "InventoryItem": {
      "description": "A catalog entry for a material tracked in Albert.\n\nAn ``InventoryItem`` is the canonical record for a raw material, consumable,\npiece of equipment, or formula. Its [`InventoryCategory`][albert.resources.inventory.InventoryCategory] determines how it\nis used across the platform, and once saved it is referenced everywhere by its\nInventory ID (format ``INV...``, e.g. ``\"INVA9999999\"``). Raw materials are typically\nlinked to a manufacturing ``company`` and a compositional breakdown of CAS\namounts. A Formula item represents a mixture designed in a Project; creating\none requires ``project_id`` set to the parent Project's ID.\n\nItems are managed through\n[`InventoryCollection`][albert.collections.inventory.InventoryCollection] (``client.inventory``).\n\n!!! example\n    ```python\n    from albert.resources.inventory import (\n        InventoryCategory,\n        InventoryDensity,\n        InventoryItem,\n        InventoryUnitCategory,\n    )\n\n    # Mass-based inventory item\n    item = InventoryItem(\n        name=\"Titanium Dioxide\",\n        category=InventoryCategory.RAW_MATERIALS,\n        company=\"Acme Chemicals\",\n    )\n\n    # Volume-based inventory item\n    volume_item = InventoryItem(\n        name=\"Isopropyl Alcohol\",\n        category=InventoryCategory.RAW_MATERIALS,\n        unit_category=InventoryUnitCategory.VOLUME,\n        density=InventoryDensity(value=0.785),\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "Tags": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/Tag"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A list of Tag objects or strings representing tags.",
          "title": "Tags"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The name of the item.",
          "title": "Name"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert Inventory ID (format ``INV...``). Set when the item is retrieved from or created in Albert. Serialized as ``albertId``.",
          "title": "Albertid"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A free-text description of the item.",
          "title": "Description"
        },
        "category": {
          "$ref": "#/$defs/InventoryCategory",
          "description": "The kind of material this item represents. Required. One of ``RawMaterials``, ``Consumables``, ``Equipment``, or ``Formulas``."
        },
        "unitCategory": {
          "anyOf": [
            {
              "$ref": "#/$defs/InventoryUnitCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The dimension the item is measured in (mass, volume, length, pressure, or units). If not supplied, it defaults from ``category``: mass for raw materials and formulas, units for equipment and consumables."
        },
        "density": {
          "anyOf": [
            {
              "$ref": "#/$defs/InventoryDensity"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The density in g/mL for volume-based inventory items. Required at creation when ``unit_category`` is volume. Locked at creation and cannot be changed."
        },
        "class": {
          "anyOf": [
            {
              "$ref": "#/$defs/SecurityClass"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The access/security class of the item (e.g. confidential, shared, restricted)."
        },
        "Company": {
          "anyOf": [
            {
              "$ref": "#/$defs/Company"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The manufacturing Company associated with the item (links to the Company collection). Accepts a [`Company`][albert.resources.companies.Company] or a name string; a string is turned into a Company that is first-or-created on save.",
          "title": "Company"
        },
        "minimum": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/InventoryMinimum"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Per-Location reorder thresholds for the item. See [`InventoryMinimum`][albert.resources.inventory.InventoryMinimum].",
          "title": "Minimum"
        },
        "alias": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "An alternate name for the item.",
          "title": "Alias"
        },
        "Cas": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/CasAmount"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The item's compositional breakdown as CAS amounts. See [`CasAmount`][albert.resources.inventory.CasAmount].",
          "title": "Cas"
        },
        "isFormulaOverride": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the substance/CAS-level breakdown for this formula has been overridden from the auto-calculated value; commonly set to indicate the formula is not a non-reactive homogeneous mixture.",
          "title": "Isformulaoverride"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom metadata fields. Allowed keys are defined by the workspace's CustomFields configuration.",
          "title": "Metadata"
        },
        "parentId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The parent Project ID. Required for Formulas. Serialized as ``parentId``.",
          "title": "Parentid"
        },
        "ACL": {
          "description": "Access-control entries governing who can act on the item.",
          "items": {
            "$ref": "#/$defs/ACL"
          },
          "title": "Acl",
          "type": "array"
        },
        "onHand": {
          "default": 0.0,
          "description": "Total amount currently on hand across all lots. Read-only.",
          "title": "Onhand",
          "type": "number"
        },
        "onHandL": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Total amount currently on hand across all lots in litres for volume-based items. Read-only.",
          "title": "Onhandl"
        },
        "TaskConfig": {
          "anyOf": [
            {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Task configuration associated with the item. Read-only.",
          "title": "Taskconfig"
        },
        "formulaId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The formula ID for a formula item. Read-only.",
          "title": "Formulaid"
        },
        "Symbols": {
          "anyOf": [
            {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard/pictogram symbols associated with the item. Read-only.",
          "title": "Symbols"
        },
        "unNumber": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The UN hazardous-material number, when applicable. Read-only.",
          "title": "Unnumber"
        },
        "recentAttachmentId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the most recent attachment on the item. Read-only. See Also --------",
          "title": "Recentattachmentid"
        }
      },
      "required": [
        "category"
      ],
      "title": "InventoryItem",
      "type": "object"
    },
    "InventoryMinimum": {
      "description": "A reorder threshold: the minimum stock of an [`InventoryItem`][albert.resources.inventory.InventoryItem] to keep at a Location.\n\nEach entry pairs one Location with the minimum quantity of an item that must be\nkept on hand there. An [`InventoryItem`][albert.resources.inventory.InventoryItem] may carry several of these, one per\nLocation. Identify the Location either by passing a full\n[`Location`][albert.resources.locations.Location] object as ``location`` (its ``id`` is\nthen copied onto ``id``), or by passing the location ``id`` string directly. Provide\none or the other, not both.\n\n!!! example\n    ```python\n    from albert.resources.inventory import InventoryMinimum\n\n    minimum = InventoryMinimum(id=\"LOC9999999\", minimum=500)\n    ```",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the Location this minimum applies to. Provide either a ``location`` or an ``id``; when ``location`` is given, this is set from it.",
          "title": "Id"
        },
        "location": {
          "anyOf": [
            {
              "$ref": "#/$defs/Location"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Location object this minimum applies to. Excluded from serialization. Provide either a ``location`` or an ``id``."
        },
        "minimum": {
          "description": "The minimum amount of the item that must be kept in stock at the Location. Must be between 0 and 1e15. See Also --------",
          "maximum": 1000000000000000,
          "minimum": 0,
          "title": "Minimum",
          "type": "number"
        }
      },
      "required": [
        "minimum"
      ],
      "title": "InventoryMinimum",
      "type": "object"
    },
    "InventoryUnitCategory": {
      "description": "The dimension of the unit an [`InventoryItem`][albert.resources.inventory.InventoryItem] is measured and stocked in.\n\nDetermines how quantities on hand and in formulas are interpreted. When not\nsupplied, the category defaults based on [`InventoryCategory`][albert.resources.inventory.InventoryCategory]: ``MASS``\nfor raw materials and formulas, ``UNITS`` for equipment and consumables.\n\nAttributes\n----------\nMASS : str\n    Measured by mass (e.g. grams, kilograms).\nVOLUME : str\n    Measured by volume (e.g. milliliters, liters). Supported for RawMaterials\n    and Consumables; requires ``density`` at creation.\nLENGTH : str\n    Measured by length (e.g. meters).\nPRESSURE : str\n    Measured by pressure.\nUNITS : str\n    Counted as discrete units (e.g. each item).",
      "enum": [
        "mass",
        "volume",
        "length",
        "pressure",
        "units"
      ],
      "title": "InventoryUnitCategory",
      "type": "string"
    },
    "JobSummary": {
      "description": "A brief summary of a background processing job.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The job identifier.",
          "title": "Id"
        },
        "state": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The current state of the job.",
          "title": "State"
        }
      },
      "title": "JobSummary",
      "type": "object"
    },
    "ListItem": {
      "description": "A single allowed value in a configurable list of options.\n\nList items back the choices offered by ``list``-type custom fields (e.g.\ndropdown options) and other fixed option sets in Albert. A\n[`CustomField`][albert.resources.custom_fields.CustomField] with\n[`LIST`][albert.resources.custom_fields.FieldType.LIST] defines a list (keyed\nby ``list_type``, typically the field's name); its selectable options are\n``ListItem`` records with a matching ``list_type``. Managed through\n[`ListsCollection`][albert.collections.lists.ListsCollection] (``client.lists``).\n\n!!! example\n    ```python\n    from albert.resources.lists import ListItem, ListItemCategory\n    item = ListItem(name=\"In Progress\", category=ListItemCategory.USER_DEFINED)\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The display name of the list item (the option value).",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the list item. Set when the item is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/ListItemCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The category of the list item. Allowed values are ``businessDefined``, ``userDefined``, ``projects``, ``extensions``, and ``inventory``."
        },
        "listType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The list this item belongs to. For a list-type custom field this is typically the field's name (see [`CustomField`][albert.resources.custom_fields.CustomField]). For built-in categories the allowed values are ``projectState`` for ``projects``, ``extensions`` for ``extensions``, and ``casCategory`` or ``inventoryFunction`` for ``inventory``.",
          "title": "Listtype"
        }
      },
      "required": [
        "name"
      ],
      "title": "ListItem",
      "type": "object"
    },
    "ListItemCategory": {
      "description": "The category a list item belongs to, which governs its allowed list types.\n\nAttributes\n----------\nBUSINESS_DEFINED : str\n    Predefined values managed at the business/organization level.\nUSER_DEFINED : str\n    Custom values defined by users.\nPROJECTS : str\n    Values used by projects (e.g. project states).\nEXTENSIONS : str\n    Values used by extensions.\nINVENTORY : str\n    Values used by inventory (e.g. CAS categories or inventory functions).",
      "enum": [
        "businessDefined",
        "userDefined",
        "projects",
        "extensions",
        "inventory"
      ],
      "title": "ListItemCategory",
      "type": "string"
    },
    "Location": {
      "description": "A physical lab or site location in Albert.\n\nLocations are referenced by Tasks and Inventory Items to record where an\nactivity is performed or where a material lives, and each Location can hold\none or more Storage Locations\n([`StorageLocation`][albert.resources.storage_locations.StorageLocation]). Managed\nthrough [`LocationCollection`][albert.collections.locations.LocationCollection].\n\n!!! example\n    ```python\n    from albert.resources.locations import Location\n    location = Location(\n        name=\"Boston Lab\",\n        latitude=42.3601,\n        longitude=-71.0589,\n        address=\"1 Main St\",\n        country=\"US\",\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The human-readable name of the location.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the location. Assigned by Albert and populated once the location has been created or retrieved.",
          "title": "Albertid"
        },
        "latitude": {
          "description": "The latitude of the location, in decimal degrees.",
          "title": "Latitude",
          "type": "number"
        },
        "longitude": {
          "description": "The longitude of the location, in decimal degrees.",
          "title": "Longitude",
          "type": "number"
        },
        "address": {
          "description": "The street address of the location.",
          "title": "Address",
          "type": "string"
        },
        "country": {
          "anyOf": [
            {
              "maxLength": 2,
              "minLength": 2,
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The two-letter country code of the location (for example, ``\"US\"``).",
          "title": "Country"
        }
      },
      "required": [
        "name",
        "latitude",
        "longitude",
        "address"
      ],
      "title": "Location",
      "type": "object"
    },
    "Operator": {
      "description": "A comparison operator constraining a numeric parameter value.\n\nUsed by [`ValueValidation`][albert.resources.parameter_groups.ValueValidation] to bound acceptable values. ``between``\ntakes ``min`` and ``max``; every single-bound operator takes ``value`` (e.g. ``gte``\nwith ``value=\"0\"`` requires the value to be at least 0).\n\nAttributes\n----------\nBETWEEN : str\n    Value must fall between ``min`` and ``max`` (inclusive).\nLESS_THAN : str\n    Value must be less than ``value``.\nLESS_THAN_OR_EQUAL : str\n    Value must be less than or equal to ``value``.\nGREATER_THAN_OR_EQUAL : str\n    Value must be greater than or equal to ``value``.\nGREATER_THAN : str\n    Value must be greater than ``value``.\nEQUALS : str\n    Value must equal ``value``.\nNOT_EQUALS : str\n    Not accepted by the API for parameter validations.",
      "enum": [
        "between",
        "lt",
        "lte",
        "gte",
        "gt",
        "eq",
        "neq"
      ],
      "title": "Operator",
      "type": "string"
    },
    "PGType": {
      "description": "The kind of task a [`ParameterGroup`][albert.resources.parameter_groups.ParameterGroup] relates to.\n\nA Parameter Group is about making a sample and/or prepping it for measurement,\nand its type records which sort of task it is used in.\n\nAttributes\n----------\nGENERAL : str\n    A group used in a general lab task (anything that is not a batch or\n    property task).\nBATCH : str\n    A group used in a Batch Task ([`BatchTask`][albert.resources.tasks.BatchTask]),\n    e.g. a mixing step when manufacturing a batch.\nPROPERTY : str\n    A group used in a property (measurement) task to prep a sample for testing.",
      "enum": [
        "general",
        "batch",
        "property"
      ],
      "title": "PGType",
      "type": "string"
    },
    "Parameter": {
      "description": "The definition of a single experimental condition or input variable.\n\nA Parameter (ID format ``PRM...``) names an \"indirect variable\" such as\nTemperature, Spin Speed, or Instrument. The Parameter itself only defines the\nvariable; its actual value and unit are fixed to a setpoint later, inside a\n[`Workflow`][albert.resources.workflows.Workflow]. Parameters are the building\nblocks of Parameter Groups\n([`ParameterGroup`][albert.resources.parameter_groups.ParameterGroup]) and form the\nparameter side of Data Templates\n([`DataTemplate`][albert.resources.data_templates.DataTemplate]).\n\nManage parameters through\n[`ParameterCollection`][albert.collections.parameters.ParameterCollection]\n(``client.parameters``).\n\n!!! example\n    ```python\n    from albert import Albert\n    from albert.resources.parameters import Parameter\n    client = Albert()\n    param = client.parameters.create(parameter=Parameter(name=\"Temperature\"))\n    param.id\n    # 'PRM9999999'\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The name of the parameter. Names must be unique.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the parameter (format ``PRM...``). Set when the parameter is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional user-defined metadata keyed by field name.",
          "title": "Metadata"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/ParameterCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the parameter is ``Normal`` (scalar value) or ``Special`` (entity reference). Set by the platform and read-only."
        },
        "rank": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The rank of the returned parameter. Read-only.",
          "title": "Rank"
        },
        "required": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether this parameter must be filled in within a Parameter Group.",
          "title": "Required"
        }
      },
      "required": [
        "name"
      ],
      "title": "Parameter",
      "type": "object"
    },
    "ParameterCategory": {
      "description": "Whether a [`Parameter`][albert.resources.parameters.Parameter]'s value is a plain scalar or an entity reference.\n\nSet by the platform and read-only. It determines how a parameter's value is\ninterpreted when a setpoint is assigned to it inside a\n[`Workflow`][albert.resources.workflows.Workflow].\n\nAttributes\n----------\nNORMAL : str\n    A \"normal\" parameter whose value is a plain scalar (e.g. a number or text),\n    such as Temperature or Spin Speed.\nSPECIAL : str\n    A \"special\" parameter whose value references another entity (e.g. Equipment,\n    a Consumable, or a Template). The setpoint value is that entity's ID rather\n    than a plain scalar.",
      "enum": [
        "Normal",
        "Special"
      ],
      "title": "ParameterCategory",
      "type": "string"
    },
    "ParameterGroup": {
      "description": "A reusable set of parameters (PRG) for making or prepping a sample.\n\nA Parameter Group bundles [`Parameter`][albert.resources.parameters.Parameter]\nentities, along with their values, units, and validation rules, into a reusable\nunit. Whereas a Data Template's parameters relate to a given measurement, a\nParameter Group is about *making* the sample and/or *prepping* it for\nmeasurement (e.g. a mixing step or a cure schedule). Some groups drive Batch\nTasks ([`BatchTask`][albert.resources.tasks.BatchTask]); others are stacked within a\ntask. A group's parameters, together with a Data Template's parameters, are\nfixed to setpoints inside a [`Workflow`][albert.resources.workflows.Workflow].\n\nOnce saved, a group is referenced by its Parameter Group ID (format ``PRG...``,\ne.g. ``\"PRG9999999\"``). Store test standards (e.g. ASTM or ISO) under the\n``\"Standards\"`` key of ``metadata``.\n\nGroups are managed through\n[`ParameterGroupCollection`][albert.collections.parameter_groups.ParameterGroupCollection]\n(``client.parameter_groups``).\n\n!!! example\n    ```python\n    from albert.resources.parameter_groups import (\n        ParameterGroup,\n        ParameterValue,\n        PGType,\n    )\n\n    pg = ParameterGroup(\n        name=\"Mixing Step\",\n        type=PGType.BATCH,\n        parameters=[ParameterValue(id=\"PRM9999999\", value=\"500\")],\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "Tags": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/Tag"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A list of Tag objects or strings representing tags.",
          "title": "Tags"
        },
        "name": {
          "description": "The name of the parameter group. Required.",
          "title": "Name",
          "type": "string"
        },
        "type": {
          "anyOf": [
            {
              "$ref": "#/$defs/PGType"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The kind of task the group relates to (``general``, ``batch``, or ``property``)."
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert Parameter Group ID (format ``PRG...``). Set when the group is retrieved from or created in Albert. Serialized as ``albertId``.",
          "title": "Albertid"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A free-text description of the group.",
          "title": "Description"
        },
        "class": {
          "$ref": "#/$defs/SecurityClass",
          "default": "restricted",
          "description": "The access/security class of the group. Defaults to ``RESTRICTED``. Serialized as ``class``."
        },
        "ACL": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/User"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Access-control entries governing who can act on the group. Serialized as ``ACL``.",
          "title": "Acl"
        },
        "Metadata": {
          "additionalProperties": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "integer"
              },
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/EntityLinkWithName"
              },
              {
                "$ref": "#/$defs/EntityLink"
              },
              {
                "items": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/EntityLinkWithName"
                    },
                    {
                      "$ref": "#/$defs/EntityLink"
                    }
                  ]
                },
                "type": "array"
              }
            ]
          },
          "description": "Custom metadata fields. Test standards are stored under the ``\"Standards\"`` key. Serialized as ``Metadata``.",
          "title": "Metadata",
          "type": "object"
        },
        "Parameters": {
          "description": "The parameters in the group, each with its value, unit, and validation. See [`ParameterValue`][albert.resources.parameter_groups.ParameterValue]. Serialized as ``Parameters``.",
          "items": {
            "$ref": "#/$defs/ParameterValue"
          },
          "title": "Parameters",
          "type": "array"
        },
        "verified": {
          "default": false,
          "description": "Whether the group has been verified (an approval/governance state). Read-only.",
          "title": "Verified",
          "type": "boolean"
        },
        "Documents": {
          "description": "Documents (e.g. SOPs) associated with the group. Read-only. Deserialized from ``Documents``.",
          "items": {
            "$ref": "#/$defs/EntityLink"
          },
          "title": "Documents",
          "type": "array"
        }
      },
      "required": [
        "name"
      ],
      "title": "ParameterGroup",
      "type": "object"
    },
    "ParameterGroupSetpoints": {
      "description": "All parameter setpoints belonging to one Data Template or Parameter Group.\n\nA workflow is organized by group: each [`ParameterGroupSetpoints`][albert.resources.workflows.ParameterGroupSetpoints] names one\nData Template or Parameter Group (by ``id`` or by a full ``parameter_group`` object)\nand carries the [`ParameterSetpoint`][albert.resources.workflows.ParameterSetpoint] list for the parameters in it. A\n[`Workflow`][albert.resources.workflows.Workflow] holds one of these per group. Both the order of setpoints within a\ngroup and the order of groups within the workflow are part of what makes a workflow\nunique, so preserve the order you intend. Group ``sequence`` is read-only; list order\nalone defines group ordering when creating workflows. Setpoint ``sequence`` is also\nread-only (see [`ParameterSetpoint`][albert.resources.workflows.ParameterSetpoint]).\n\n!!! example\n    ```python\n    from albert.resources.workflows import (\n        ParameterGroupSetpoints,\n        ParameterSetpoint,\n    )\n\n    group = ParameterGroupSetpoints(\n        id=\"PRG9999999\",\n        parameter_setpoints=[\n            ParameterSetpoint(parameter_id=\"PRM9999999\", value=\"25\"),\n        ],\n    )\n    ```",
      "properties": {
        "parameter_group": {
          "anyOf": [
            {
              "$ref": "#/$defs/ParameterGroup"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The parameter group to set setpoints on. Provide either ``parameter_group`` or ``id``. If both are given they must refer to the same group."
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the parameter group (``PRG...``) or Data Template (``DAT...``). Provide either ``id`` or ``parameter_group``. Auto-filled from ``parameter_group`` when one is provided.",
          "title": "Id"
        },
        "name": {
          "default": "Pre-linked Parameters",
          "description": "Read-only display name of the group (defaults to ``\"Pre-linked Parameters\"``).",
          "title": "Name",
          "type": "string"
        },
        "Parameters": {
          "description": "The setpoints to apply to this group's parameters.",
          "items": {
            "$ref": "#/$defs/ParameterSetpoint"
          },
          "title": "Parameters",
          "type": "array"
        },
        "rowId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Read-only. The group's interval row ID.",
          "title": "Rowid"
        },
        "prgSequence": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Read-only. Order of this group within the workflow. Assigned from list order when creating workflows; do not set.",
          "title": "Prgsequence"
        }
      },
      "title": "ParameterGroupSetpoints",
      "type": "object"
    },
    "ParameterSetpoint": {
      "description": "The fixed value (or set of interval values) for one parameter within a workflow.\n\nA setpoint pins a single parameter to a condition. Provide either a single ``value``\n(plus ``unit`` where applicable) for a fixed setpoint, or a list of ``intervals`` to\nintervalize the parameter across several values. You must identify the parameter by\npassing either a full ``parameter`` object or its ``parameter_id``. Setpoints are\ngrouped under a [`ParameterGroupSetpoints`][albert.resources.workflows.ParameterGroupSetpoints], which is in turn placed on a\n[`Workflow`][albert.resources.workflows.Workflow].\n\nNormal parameters take exactly one of ``value`` or ``intervals``. Special parameters\n(Equipment, Consumables, Templates) take an entity ID as their value.\n\n``sequence`` is read-only: do not set it when building a workflow for\n[`create`][albert.collections.workflows.WorkflowCollection.create]. Provide the parent\ngroup's ``id`` (``PRG...`` or ``DAT...``) on\n[`ParameterGroupSetpoints`][albert.resources.workflows.ParameterGroupSetpoints]; the SDK\nresolves each setpoint's row id from that group before create.\n\n!!! example\n    ```python\n    from albert.resources.parameters import ParameterCategory\n    from albert.resources.workflows import ParameterSetpoint, Interval\n\n    # A single fixed setpoint identified by parameter ID.\n    temp = ParameterSetpoint(parameter_id=\"PRM9999999\", value=\"25\")\n\n    # The same parameter intervalized across two values.\n    temp_varied = ParameterSetpoint(\n        parameter_id=\"PRM9999999\",\n        intervals=[\n            Interval(value=\"25\", unit={\"id\": \"UNI9999999\"}),\n            Interval(value=\"60\", unit={\"id\": \"UNI9999999\"}),\n        ],\n    )\n\n    # A Special parameter (an inventory item) takes the item's id as its value;\n    # short_name is only sent for Special parameters.\n    equipment = ParameterSetpoint(\n        parameter_id=\"PRM3\",\n        category=ParameterCategory.SPECIAL,\n        value={\"id\": \"INV9999999\"},\n        short_name=\"Oven\",\n    )\n    ```",
      "properties": {
        "parameter": {
          "anyOf": [
            {
              "$ref": "#/$defs/Parameter"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The parameter to set. Provide either ``parameter`` or ``parameter_id``. If both are given they must refer to the same parameter."
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The value of the setpoint. For a Special parameter (an inventory item), provide the item's [`EntityLink`][albert.core.shared.models.base.EntityLink] (or a mapping with an ``id``). Mutually exclusive with ``intervals`` for Normal parameters.",
          "title": "Value"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit of ``value``, where applicable.",
          "title": "Unit"
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the parameter (e.g. ``\"PRM9999999\"``). Provide either ``parameter`` or ``parameter_id``.",
          "title": "Id"
        },
        "Intervals": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/Interval"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The interval values when the parameter is intervalized. Provide either ``intervals`` or ``value`` (plus ``unit``), not both.",
          "title": "Intervals"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/ParameterCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The category of the parameter: ``SPECIAL`` for an inventory item (Equipment, Consumable, Template), ``NORMAL`` for everything else."
        },
        "shortName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The short / display name of the parameter. Only sent on create for ``SPECIAL``-category parameters; the platform rejects ``shortName`` on Normal parameters, so the SDK drops it there.",
          "title": "Shortname"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The parameter name. Auto-filled from ``parameter`` when one is provided.",
          "title": "Name"
        },
        "rowId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Read-only. The row ID of this parameter with respect to its interval row.",
          "title": "Rowid"
        },
        "prgPrmRowId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Read-only. Maps this setpoint to its row in the parent Data Template or Parameter Group. Populated by the SDK during [`create`][albert.collections.workflows.WorkflowCollection.create]; do not set when building workflows.",
          "title": "Prgprmrowid"
        }
      },
      "title": "ParameterSetpoint",
      "type": "object"
    },
    "ParameterValue": {
      "description": "A single [`Parameter`][albert.resources.parameters.Parameter] and its value within a [`ParameterGroup`][albert.resources.parameter_groups.ParameterGroup].\n\nA ``ParameterValue`` binds one Parameter to the value, unit, and validation\nrules it takes inside a group. Each entry must reference an existing Parameter,\nso provide exactly one of ``id`` (the Parameter's Albert ID) or ``parameter``\n(the [`Parameter`][albert.resources.parameters.Parameter] object itself); when a\n``parameter`` is given, the ``id``, ``category``, and ``name`` are populated\nfrom it. Values are later fixed to setpoints inside a\n[`Workflow`][albert.resources.workflows.Workflow].\n\n!!! example\n    ```python\n    from albert.resources.parameter_groups import ParameterValue\n\n    # Reference the parameter by its Albert ID\n    value = ParameterValue(id=\"PRM9999999\", value=\"500\")\n    ```",
      "properties": {
        "parameter": {
          "anyOf": [
            {
              "$ref": "#/$defs/Parameter"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Parameter this value is associated with. Provide either ``id`` or ``parameter``. Excluded from serialization."
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the associated Parameter. Provide either ``id`` or ``parameter``.",
          "title": "Id"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/ParameterCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The category of the parameter (``Normal`` or ``Special``). Populated from ``parameter`` when one is provided. When only ``id`` is given, the parameter-group create API rejects the payload (``400 \"Category mismatch ... Category undefined expected\"``), so set ``category`` explicitly (``ParameterCategory.NORMAL`` for ordinary parameters) or pass the full ``parameter`` object."
        },
        "specialType": {
          "anyOf": [
            {
              "$ref": "#/$defs/SpecialParameterType"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The specific entity type for a ``Special`` parameter. ``None`` for ``Normal`` parameters. The platform does not validate this field on create the way it validates ``category``, so omitting it does not cause a 400."
        },
        "shortName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A short name for the parameter value. Serialized as ``shortName``.",
          "title": "Shortname"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/InventoryItem"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "$ref": "#/$defs/User"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The value of the parameter. Can be a plain string, an [`InventoryItem`][albert.resources.inventory.InventoryItem] (e.g. when the parameter represents an instrument choice), or a [`User`][albert.resources.users.User] (e.g. a user reference such as \"Performed By\").",
          "title": "Value"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit of measure for the value. Serialized as ``Unit``.",
          "title": "Unit"
        },
        "Added": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "required": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether this parameter is required. Defaults to False.",
          "title": "Required"
        },
        "validation": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/ValueValidation"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Validation rules applied to the value. See [`ValueValidation`][albert.resources.parameter_groups.ValueValidation].",
          "title": "Validation"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The name of the parameter. Read-only.",
          "title": "Name"
        },
        "sequence": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The sequence of the parameter within the group. Read-only.",
          "title": "Sequence"
        },
        "originalShortName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Originalshortname"
        },
        "originalName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Originalname"
        }
      },
      "title": "ParameterValue",
      "type": "object"
    },
    "PropertyData": {
      "description": "A single stored result value together with any rich-media backing data.\n\nReturned by the API as part of a [`PropertyValue`][albert.resources.property_data.PropertyValue]. For simple numeric or\ntext results only ``value`` is populated; for image and curve data columns the\nadditional fields carry the uploaded file references and processing metadata.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of this property data record (format ``PTD...``).",
          "title": "Id"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The stored result value. All values are stored as strings in Albert.",
          "title": "Value"
        },
        "valueNumeric": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The numeric form of the value, when the column is numeric. Serialized as ``valueNumeric``.",
          "title": "Valuenumeric"
        },
        "valueString": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The string form of the value, when the column is string-typed. Serialized as ``valueString``.",
          "title": "Valuestring"
        },
        "valueType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The type of the value (e.g. numeric, string, image, curve). Serialized as ``valueType``.",
          "title": "Valuetype"
        },
        "s3Key": {
          "anyOf": [
            {
              "$ref": "#/$defs/PropertyDataStorageKey"
            },
            {
              "$ref": "#/$defs/StorageKeyReference"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Storage references for uploaded media (image previews/thumbnails or curve files). Serialized as ``s3Key``.",
          "title": "S3Key"
        },
        "job": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Processing job metadata, used for curve/image ingestion.",
          "title": "Job"
        },
        "csvMapping": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Mapping from CSV headers to curve result identifiers, for curve data. Serialized as ``csvMapping``.",
          "title": "Csvmapping"
        },
        "curveRemarks": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Remarks associated with curve data. Serialized as ``curveRemarks``.",
          "title": "Curveremarks"
        },
        "athena": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Backing analytical store metadata for curve data. See Also --------",
          "title": "Athena"
        }
      },
      "title": "PropertyData",
      "type": "object"
    },
    "PropertyDataStorageKey": {
      "description": "Storage references (preview, thumbnail, original) for an uploaded media file.",
      "properties": {
        "preview": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Preview"
        },
        "thumb": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Thumb"
        },
        "original": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Original"
        }
      },
      "title": "PropertyDataStorageKey",
      "type": "object"
    },
    "PropertyValue": {
      "description": "A measured result for one data column, with its value, unit, and metadata.\n\nAppears inside a [`Trial`][albert.resources.property_data.Trial] (as one of its ``data_columns``) and represents\nthe value captured for a single data column of a data template. Both a numeric\nand a string form of the value may be present depending on the column type.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Identifier of the result within the trial.",
          "title": "Id"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The data column / result name.",
          "title": "Name"
        },
        "sequence": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Pointer to the specific data (result) column; more unique than a data column ID because a data column can be repeated within a Data Template (analogous to a parameter repeated in a Parameter Group).",
          "title": "Sequence"
        },
        "calculation": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional calculation expression used in place of a fixed value; may reference other result columns (e.g. ``=((COL3-COL1)/COL2)*100``). The result is computed and shown in the UI.",
          "title": "Calculation"
        },
        "valueNumeric": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The numeric form of the value. Serialized as ``valueNumeric``.",
          "title": "Valuenumeric"
        },
        "valueString": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The string form of the value. Serialized as ``valueString``.",
          "title": "Valuestring"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The stored value.",
          "title": "Value"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "additionalProperties": true,
              "type": "object"
            }
          ],
          "description": "The unit of measure for the value, as an entity link. Serialized as ``Unit``.",
          "title": "Unit"
        },
        "PropertyData": {
          "anyOf": [
            {
              "$ref": "#/$defs/PropertyData"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The backing stored value / media record. Serialized as ``PropertyData``."
        },
        "dataColumnUniqueId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unique ID of the data column this result captures. Serialized as ``dataColumnUniqueId``.",
          "title": "Datacolumnuniqueid"
        },
        "hidden": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": false,
          "description": "Whether the result is hidden. See Also --------",
          "title": "Hidden"
        }
      },
      "title": "PropertyValue",
      "type": "object"
    },
    "Role": {
      "description": "A named set of access permissions within a tenant.\n\nA role bundles policies that determine what a holder is allowed to do. Roles\nare assigned to users ([`User`][albert.resources.users.User]) and referenced\nby entity ACLs. Roles are typically read from Albert rather than built by\nhand.",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the role. Role IDs may contain ``#`` characters. Set once the role is retrieved from Albert.",
          "title": "Albertid"
        },
        "name": {
          "description": "The display name of the role.",
          "title": "Name",
          "type": "string"
        },
        "Policies": {
          "anyOf": [
            {
              "items": {},
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The policies (permission rules) associated with the role.",
          "title": "Policies"
        },
        "tenant": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the tenant the role belongs to. Omitted on role-only (id-filtered) responses.",
          "title": "Tenant"
        },
        "visibility": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the role is visible in the platform's role listings.",
          "title": "Visibility"
        }
      },
      "required": [
        "name"
      ],
      "title": "Role",
      "type": "object"
    },
    "SecurityClass": {
      "description": "The security (access control) class of a resource.\n\nAttributes\n----------\nSHARED : str\n    Accessible to all members of the tenant.\nRESTRICTED : str\n    Access is restricted to specific teams or users.\nCONFIDENTIAL : str\n    Access is limited to designated users only.\nPRIVATE : str\n    Visible only to the owner. Used by Projects.\nPUBLIC : str\n    Accessible publicly. Returned by Parameter Groups.",
      "enum": [
        "shared",
        "restricted",
        "confidential",
        "private",
        "public"
      ],
      "title": "SecurityClass",
      "type": "string"
    },
    "SpecialParameterType": {
      "description": "The specific entity type referenced by a Special\n[`Parameter`][albert.resources.parameters.Parameter].\n\nNot returned by the platform parameter API (use Zeus reports RET48/RET52 to\nread the subtype from experiment data). Writable on\n[`ParameterValue`][albert.resources.parameter_groups.ParameterValue] and\n[`TargetParameter`][albert.resources.targets.TargetParameter].\n\nEach member implies an id-namespace for the value column in experiment reports\n(RET48/RET52): ``RAW_MATERIALS`` values carry ``INVA...`` ids, ``CONSUMABLES``\ncarry ``INVB...`` ids, ``EQUIPMENT`` carry ``INVC...`` ids, and ``FORMULAS``\ncarry ``INVMO...`` ids.\n\nMirrors [`InventoryCategory`][albert.resources.inventory.InventoryCategory],\nthe canonical \"kind of material\" an\n[`InventoryItem`][albert.resources.inventory.InventoryItem] belongs to. A\nSpecial parameter's value is always a reference to an `InventoryItem`, so its\nsubtype is one of that enum's members.\n\nAttributes\n----------\nRAW_MATERIALS : str\n    A raw material entity. Values appear as ``INVA...`` ids in report columns.\nCONSUMABLES : str\n    A consumable entity. Values appear as ``INVB...`` ids in report columns.\nEQUIPMENT : str\n    An equipment entity. Values appear as ``INVC...`` ids in report columns.\nFORMULAS : str\n    A formula entity (a mixture designed through a Worksheet). Values appear\n    as ``INVMO...`` ids in report columns.",
      "enum": [
        "RawMaterials",
        "Consumables",
        "Equipment",
        "Formulas"
      ],
      "title": "SpecialParameterType",
      "type": "string"
    },
    "Status": {
      "description": "The status of a resource.\n\nAttributes\n----------\nACTIVE : str\n    The resource is fully operational and visible in normal operations.\nINACTIVE : str\n    The resource is hidden from normal operations and disabled from use.",
      "enum": [
        "active",
        "inactive"
      ],
      "title": "Status",
      "type": "string"
    },
    "StorageKeyReference": {
      "description": "S3 storage key references for a data column file result.",
      "properties": {
        "rawfile": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The raw file storage key.",
          "title": "Rawfile"
        },
        "s3Input": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the input file.",
          "title": "S3Input"
        },
        "s3Output": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the processed output file.",
          "title": "S3Output"
        },
        "preview": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a preview image.",
          "title": "Preview"
        },
        "thumb": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a thumbnail image.",
          "title": "Thumb"
        },
        "original": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the original file.",
          "title": "Original"
        }
      },
      "title": "StorageKeyReference",
      "type": "object"
    },
    "Tag": {
      "description": "A freeform text label used to categorize and connect entities.\n\nTags are shared by name across the platform and can be applied to inventory\nitems, companies, tasks, and other records to group and filter them. Managed\nthrough [`TagCollection`][albert.collections.tags.TagCollection] (``client.tags``);\nthe usual entry point is [`get_or_create`][albert.collections.tags.TagCollection.get_or_create].\n\n!!! example\n    ```python\n    from albert.resources.tags import Tag\n    tag = Tag(tag=\"high-priority\")\n    ```\nMethods\n-------\nfrom_string(tag) -> Tag\n    Build a Tag from its name string.",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The name of the tag (its text label).",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the tag (format ``TAG...``). Set when the tag is retrieved from or created in Albert. Methods ------- from_string(tag) -> Tag Build a Tag from its name string.",
          "title": "Albertid"
        }
      },
      "required": [
        "name"
      ],
      "title": "Tag",
      "type": "object"
    },
    "Trial": {
      "description": "One replicate measurement of a given interval combination.\n\nA trial holds the set of [`PropertyValue`][albert.resources.property_data.PropertyValue] results recorded for one row of\ndata under a [`DataInterval`][albert.resources.property_data.DataInterval]. Multiple trials under the same interval are\nrepeat measurements of the same parameter setpoints.",
      "properties": {
        "trialNo": {
          "description": "The trial (row) number. Serialized as ``trialNo``.",
          "title": "Trialno",
          "type": "integer"
        },
        "visibleTrialNo": {
          "default": 1,
          "description": "The relative row number shown to users. Serialized as ``visibleTrialNo``.",
          "title": "Visibletrialno",
          "type": "integer"
        },
        "void": {
          "default": false,
          "description": "Whether this trial has been voided.",
          "title": "Void",
          "type": "boolean"
        },
        "backEndTrialNo": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Internal trial identifier. Serialized as ``backEndTrialNo``.",
          "title": "Backendtrialno"
        },
        "DataColumns": {
          "description": "The results measured in this trial, one per data column. Serialized as ``DataColumns``. See Also --------",
          "items": {
            "$ref": "#/$defs/PropertyValue"
          },
          "title": "Datacolumns",
          "type": "array"
        }
      },
      "required": [
        "trialNo"
      ],
      "title": "Trial",
      "type": "object"
    },
    "Unit": {
      "description": "A unit of measure (e.g. ``g``, ``mL``, ``\u00b0C``).\n\nUnits qualify quantities throughout the platform: inventory amounts,\nparameter values, and property results. Managed through\n[`UnitCollection`][albert.collections.units.UnitCollection] (``client.units``).\n\n!!! example\n    ```python\n    from albert.resources.units import Unit, UnitCategory\n    unit = Unit(name=\"milliliter\", symbol=\"mL\", category=UnitCategory.LIQUID_VOLUME)\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the unit (format ``UNI...``). Set when the unit is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "name": {
          "description": "Currently this is the only field that is displayed in Albert, so use this for display purposes. Therefore, users often use the symbol for the unit here as that's the preferred display.",
          "title": "Name",
          "type": "string"
        },
        "symbol": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display symbol for the unit (e.g. ``\"g\"``).",
          "title": "Symbol"
        },
        "Synonyms": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Alternate names or spellings that also refer to this unit.",
          "title": "Synonyms"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/UnitCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The physical quantity the unit measures (e.g. ``Mass``, ``Volume``)."
        },
        "verified": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": false,
          "description": "Whether the unit has been verified in Albert. Read-only.",
          "title": "Verified"
        }
      },
      "required": [
        "name"
      ],
      "title": "Unit",
      "type": "object"
    },
    "UnitCategory": {
      "description": "The physical quantity a unit measures.\n\nAttributes\n----------\nLENGTH : str\n    Length units (e.g. m, cm).\nVOLUME : str\n    Volume units (e.g. m\u00b3).\nLIQUID_VOLUME : str\n    Liquid volume units (e.g. L, mL).\nANGLES : str\n    Angle units (e.g. degrees, radians).\nTIME : str\n    Time units (e.g. s, h).\nFREQUENCY : str\n    Frequency units (e.g. Hz).\nMASS : str\n    Mass units (e.g. g, kg).\nCURRENT : str\n    Electric current units (e.g. A).\nTEMPERATURE : str\n    Temperature units (e.g. \u00b0C, K).\nAMOUNT : str\n    Amount of substance units (e.g. mol).\nLUMINOSITY : str\n    Luminous intensity units (e.g. cd).\nFORCE : str\n    Force units (e.g. N).\nENERGY : str\n    Energy units (e.g. J).\nPOWER : str\n    Power units (e.g. W).\nPRESSURE : str\n    Pressure units (e.g. Pa, bar).\nELECTRICITY_AND_MAGNETISM : str\n    Electricity and magnetism units.\nOTHER : str\n    Units that do not fit another category.\nWEIGHT : str\n    Weight units.\nAREA : str\n    Area units (e.g. m\u00b2).\nSURFACE_AREA : str\n    Surface area units.\nBINARY : str\n    Binary/digital-information units (e.g. bytes).\nCAPACITANCE : str\n    Capacitance units (e.g. F).\nSPEED : str\n    Speed units (e.g. m/s).\nELECTRICAL_CONDUCTIVITY : str\n    Electrical conductivity units.\nELECTRICAL_PERMITTIVITY : str\n    Electrical permittivity units.\nDENSITY : str\n    Density units (e.g. g/mL).\nRESISTANCE : str\n    Electrical resistance units (e.g. \u03a9).",
      "enum": [
        "Length",
        "Volume",
        "Liquid volume",
        "Angles",
        "Time",
        "Frequency",
        "Mass",
        "Electric current",
        "Temperature",
        "Amount of substance",
        "Luminous intensity",
        "Force",
        "Energy",
        "Power",
        "Pressure",
        "Electricity and magnetism",
        "Other",
        "Weight",
        "Area",
        "Surface Area",
        "Binary",
        "Capacitance",
        "Speed",
        "Electrical conductivity",
        "Electrical permitivitty",
        "Density",
        "Resistance"
      ],
      "title": "UnitCategory",
      "type": "string"
    },
    "User": {
      "description": "An Albert user account: a person who can log in and act in the platform.\n\nA user has a name and email, an optional home\n[`Location`][albert.resources.locations.Location], and a set of\n[`Role`][albert.resources.roles.Role] objects that govern what they can do.\nThe ``user_class`` sets a broad permission tier\n([`UserClass`][albert.resources.users.UserClass]). Users are grouped into teams\n([`Team`][albert.resources.teams.Team]), and are referenced across the\nplatform, for example as the assignee of a Task or in an entity's ACL.\n\n!!! example\n    ```python\n    from albert.resources.users import User, UserClass\n    user = User(\n        name=\"Ada Lovelace\",\n        email=\"ada@example.com\",\n        user_class=UserClass.STANDARD,\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The display name of the user.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert User ID (format ``USR...``). Set once the user is registered in or retrieved from Albert.",
          "title": "Albertid"
        },
        "Location": {
          "anyOf": [
            {
              "$ref": "#/$defs/Location"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The user's home location.",
          "title": "Location"
        },
        "email": {
          "default": null,
          "description": "The user's email address.",
          "format": "email",
          "title": "Email",
          "type": "string"
        },
        "Roles": {
          "description": "The roles the user holds, which determine their permissions.",
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/Role"
              },
              {
                "$ref": "#/$defs/EntityLink"
              }
            ]
          },
          "maxItems": 1,
          "title": "Roles",
          "type": "array"
        },
        "userClass": {
          "$ref": "#/$defs/UserClass",
          "default": "standard",
          "description": "The ACL class level of the user (broad permission tier)."
        },
        "witnesser": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the user can act as a witness on tasks (only relevant when witnessing is enabled for the tenant).",
          "title": "Witnesser"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom metadata attached to the user.",
          "title": "Metadata"
        }
      },
      "required": [
        "name"
      ],
      "title": "User",
      "type": "object"
    },
    "UserClass": {
      "description": "The ACL class level of a user, setting a broad permission tier.\n\nAttributes\n----------\nGUEST : str\n    Most limited access; typically external or temporary users.\nSTANDARD : str\n    Default access level for regular users.\nTRUSTED : str\n    Elevated access above standard users.\nPRIVILEGED : str\n    High access level below full administrators.\nADMIN : str\n    Full administrative access to the tenant.",
      "enum": [
        "guest",
        "standard",
        "trusted",
        "privileged",
        "admin"
      ],
      "title": "UserClass",
      "type": "string"
    },
    "ValueValidation": {
      "description": "A validation rule constraining a [`ParameterValue`][albert.resources.parameter_groups.ParameterValue].\n\nDeclares the expected [`DataType`][albert.resources.parameter_groups.DataType] for a parameter value and, optionally,\nthe bounds or allowed options it must satisfy. Attach one or more of these to a\n[`ParameterValue`][albert.resources.parameter_groups.ParameterValue] via its ``validation`` field.\n\nWhen ``datatype`` is ``date`` or ``timestamp``, ``value``, ``min``, and ``max`` are\nstrings in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].\n\n!!! example\n    ```python\n    from albert.resources.parameter_groups import (\n        DataType,\n        Operator,\n        ValueValidation,\n    )\n\n    rule = ValueValidation(\n        datatype=DataType.NUMBER,\n        operator=Operator.BETWEEN,\n        min=\"0\",\n        max=\"100\",\n    )\n    ```",
      "properties": {
        "datatype": {
          "$ref": "#/$defs/DataType",
          "description": "The data type the value must conform to. Required."
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "items": {
                "$ref": "#/$defs/EnumValidationValue"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "For ``ENUM`` types, the list of allowed options (see [`EnumValidationValue`][albert.resources.parameter_groups.EnumValidationValue]); otherwise the bound for single-bound operators (``lt``, ``lte``, ``gt``, ``gte``, ``eq``). For ``date`` and ``timestamp`` types, a string in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].",
          "title": "Value"
        },
        "min": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The lower bound, used only with ``operator=\"between\"``. For numeric types, a numeric string; for ``date`` and ``timestamp`` types, a string in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].",
          "title": "Min"
        },
        "max": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The upper bound, used only with ``operator=\"between\"``. For numeric types, a numeric string; for ``date`` and ``timestamp`` types, a string in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].",
          "title": "Max"
        },
        "operator": {
          "anyOf": [
            {
              "$ref": "#/$defs/Operator"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The comparison operator: ``between`` uses ``min`` and ``max``; the others use ``value``."
        }
      },
      "required": [
        "datatype"
      ],
      "title": "ValueValidation",
      "type": "object"
    },
    "Workflow": {
      "description": "A specific set of parameter setpoints: the independent variables of a test.\n\nA workflow (WFL) captures only the *independent variables* of a test, the parameters and\nthe setpoints (a value, plus a unit where applicable) they are fixed to. It is built from\none or more groupings of parameters, where each grouping is either a Data Template that\nhas pre-linked parameters or a Parameter Group. A single workflow can combine several\ngroupings, for example one Data Template's pre-linked parameters together with a couple of\nParameter Groups, each contributing its own parameter setpoints. Because a Data Template\ncan carry pre-linked parameters, it is used here exactly like a Parameter Group: purely to\ndescribe a set of parameters and their setpoints.\n\nA workflow does NOT include a Data Template's Data Columns (also called Results). Those are\nthe *dependent variables*, and they are recorded only in Property Data\n([`TaskPropertyData`][albert.resources.property_data.TaskPropertyData]). In short: the Workflow holds\nthe independent variables; Property Data holds the dependent variables (the measured\nresults).\n\nA workflow is uniquely identified by its full setpoint configuration: the value and\nunit of every setpoint, the order of parameters within each Data Template / Parameter\nGroup, and the order of those groups within the workflow. For this reason workflows are\n*found-or-created* rather than blindly created: build the object you want and pass it to\n[`create`][albert.collections.workflows.WorkflowCollection.create], which returns the\nexisting match or makes a new one. IDs look like ``WFL...``.\n\nEvery tenant includes a built-in workflow ``WFL1`` (\"No Parameter Group\") with no\nparameter groups or setpoints. Use it when a task or block does not involve parameter\ngroups; it does not need to be created via\n[`create`][albert.collections.workflows.WorkflowCollection.create].\n\nWhen parameters are intervalized, the workflow acts as a *parent* that carries\nthe resulting [`IntervalCombination`][albert.resources.workflows.IntervalCombination] entries. Each combination has an interval ID of\nthe form ``ROW1`` (one intervalized parameter) or ``ROW1XROW2X...`` (product of several). Use\n[`get_interval_id`][albert.resources.workflows.Workflow.get_interval_id] to build the interval ID for a condition, then use it with the\nproperty_data endpoints to read or write that condition's results.\n\nTo construct rules and combination overrides for Property tasks using parameter names\nand values, use [`build_rule`][albert.resources.workflows.Workflow.build_rule] and\n[`build_override`][albert.resources.workflows.Workflow.build_override].\n\n!!! example\n    ```python\n    from albert import Albert\n    from albert.resources.workflows import (\n        Workflow,\n        ParameterGroupSetpoints,\n        ParameterSetpoint,\n    )\n\n    client = Albert()\n    # One workflow combining a Data Template's pre-linked parameters with two\n    # Parameter Groups. Each grouping is keyed by its DAT... or PRG... id.\n    workflow = Workflow(\n        parameter_group_setpoints=[\n            # Pre-linked parameters on a Data Template (used just like a PRG here)\n            ParameterGroupSetpoints(\n                id=\"DAT9999999\",\n                parameter_setpoints=[\n                    ParameterSetpoint(parameter_id=\"PRM9999999\", value=\"23\"),\n                    ParameterSetpoint(parameter_id=\"PRM2\", value=\"50\"),\n                ],\n            ),\n            # A Parameter Group describing sample prep\n            ParameterGroupSetpoints(\n                id=\"PRG9999999\",\n                parameter_setpoints=[\n                    ParameterSetpoint(parameter_id=\"PRM3\", value=\"24\"),\n                ],\n            ),\n            # A second Parameter Group (e.g. the mixing step)\n            ParameterGroupSetpoints(\n                id=\"PRG2\",\n                parameter_setpoints=[\n                    ParameterSetpoint(parameter_id=\"PRM4\", value=\"2000\"),\n                ],\n            ),\n        ],\n    )\n    created = client.workflows.create(workflows=[workflow])\n    created[0].id\n    # 'WFL1'\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The name of the workflow. Can be omitted on platform built-in workflows without parameter groups (such as `WFL1`).",
          "title": "Name"
        },
        "ParameterGroups": {
          "description": "The setpoints to apply, organized one entry per Data Template / Parameter Group. The order of these entries is part of the workflow's identity.",
          "items": {
            "$ref": "#/$defs/ParameterGroupSetpoints"
          },
          "title": "Parametergroups",
          "type": "array"
        },
        "IntervalCombinations": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/IntervalCombination"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The realized conditions when parameters are intervalized. Populated by the platform; present when the workflow is retrieved, not something you set when building one.",
          "title": "Intervalcombinations"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the workflow (``WFL...``). Set when a workflow is created or retrieved from the platform.",
          "title": "Albertid"
        },
        "blockMapping": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Caller-supplied correlation key on workflow bulk create, used to tie each created workflow to a block position (e.g. ``\"0\"``, ``\"1\"``). Also hydrated on read when a Workflow is returned in the context of a block.",
          "title": "Blockmapping"
        },
        "combinationsCount": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Number of child-workflow combinations on this workflow when it is a block's FINAL workflow. Always present (including ``0``) on flag-ON reads. The embedded ``combinations`` array is empty at 500 or more; use [`get_block_combinations`][albert.collections.tasks.TaskCollection.get_block_combinations] to list them.",
          "title": "Combinationscount"
        },
        "Combinations": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/IntervalCombinationItem"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Child-workflow combinations embedded on a block's FINAL workflow. Read-only; excluded from serialization. Empty at 500 or more combinations.",
          "title": "Combinations"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "title": "Workflow",
      "type": "object"
    }
  },
  "description": "The measured results captured on a task under a single data template.\n\nGroups the interval data recorded for one block of a task. Returned as part of\n[`InventoryPropertyData`][albert.resources.property_data.InventoryPropertyData] (under ``task_property_data``), where\ntask-measured results roll up to the associated inventory item.",
  "properties": {
    "id": {
      "description": "The task the data was measured on (format ``TAS...``). Serialized as ``id``.",
      "title": "Id",
      "type": "string"
    },
    "name": {
      "description": "The task name. Serialized as ``name``.",
      "title": "Name",
      "type": "string"
    },
    "qcTask": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Whether the task is a QC task. Serialized as ``qcTask``.",
      "title": "Qctask"
    },
    "InitialWorkflow": {
      "anyOf": [
        {
          "$ref": "#/$defs/Workflow"
        },
        {
          "$ref": "#/$defs/EntityLink"
        }
      ],
      "description": "The workflow at the start of the task. Serialized as ``InitialWorkflow``.",
      "title": "Initialworkflow"
    },
    "FinalWorkflow": {
      "anyOf": [
        {
          "$ref": "#/$defs/Workflow"
        },
        {
          "$ref": "#/$defs/EntityLink"
        }
      ],
      "description": "The workflow at task completion. Serialized as ``FinalWorkflow``. Carries the interval combinations for the block in its ``combinations`` field, but not the parameter setpoints; use [`get_by_id`][albert.collections.workflows.WorkflowCollection.get_by_id] for those.",
      "title": "Finalworkflow"
    },
    "Datatemplate": {
      "anyOf": [
        {
          "$ref": "#/$defs/DataTemplate"
        },
        {
          "$ref": "#/$defs/EntityLink"
        }
      ],
      "description": "The data template whose columns were measured (format ``DAT...``). Serialized as ``Datatemplate``.",
      "title": "Datatemplate"
    },
    "Data": {
      "description": "The interval data recorded, one entry per interval combination. Serialized as ``Data``. See Also --------",
      "items": {
        "$ref": "#/$defs/DataInterval"
      },
      "title": "Data",
      "type": "array"
    }
  },
  "required": [
    "id",
    "name",
    "InitialWorkflow",
    "FinalWorkflow",
    "Datatemplate"
  ],
  "title": "TaskData",
  "type": "object"
}

Fields:

task_id

task_id: TaskId

The task the data was measured on (format TAS...). Serialized as id.

task_name

task_name: str

The task name. Serialized as name.

qc_task

qc_task: bool | None = None

Whether the task is a QC task. Serialized as qcTask.

initial_workflow

initial_workflow: SerializeAsEntityLink[Workflow]

The workflow at the start of the task. Serialized as InitialWorkflow.

final_workflow

final_workflow: SerializeAsEntityLink[Workflow]

The workflow at task completion. Serialized as FinalWorkflow. Carries the interval combinations for the block in its combinations field, but not the parameter setpoints; use get_by_id for those.

finial_workflow

finial_workflow: SerializeAsEntityLink[Workflow]

Deprecated misspelling of final_workflow.

data_template

data_template: SerializeAsEntityLink[DataTemplate]

The data template whose columns were measured (format DAT...). Serialized as Datatemplate.

data

The interval data recorded, one entry per interval combination. Serialized as Data. See Also --------

CustomInventoryDataColumn

Bases: BaseAlbertModel

A single custom (non-task) property value stored on an inventory item.

Show JSON schema:
{
  "$defs": {
    "AuditFields": {
      "description": "The audit fields for a resource",
      "properties": {
        "by": {
          "default": null,
          "title": "By",
          "type": "string"
        },
        "byName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Byname"
        },
        "at": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "At"
        }
      },
      "title": "AuditFields",
      "type": "object"
    },
    "EntityLink": {
      "properties": {
        "id": {
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "required": [
        "id"
      ],
      "title": "EntityLink",
      "type": "object"
    },
    "PropertyData": {
      "description": "A single stored result value together with any rich-media backing data.\n\nReturned by the API as part of a [`PropertyValue`][albert.resources.property_data.PropertyValue]. For simple numeric or\ntext results only ``value`` is populated; for image and curve data columns the\nadditional fields carry the uploaded file references and processing metadata.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of this property data record (format ``PTD...``).",
          "title": "Id"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The stored result value. All values are stored as strings in Albert.",
          "title": "Value"
        },
        "valueNumeric": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The numeric form of the value, when the column is numeric. Serialized as ``valueNumeric``.",
          "title": "Valuenumeric"
        },
        "valueString": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The string form of the value, when the column is string-typed. Serialized as ``valueString``.",
          "title": "Valuestring"
        },
        "valueType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The type of the value (e.g. numeric, string, image, curve). Serialized as ``valueType``.",
          "title": "Valuetype"
        },
        "s3Key": {
          "anyOf": [
            {
              "$ref": "#/$defs/PropertyDataStorageKey"
            },
            {
              "$ref": "#/$defs/StorageKeyReference"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Storage references for uploaded media (image previews/thumbnails or curve files). Serialized as ``s3Key``.",
          "title": "S3Key"
        },
        "job": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Processing job metadata, used for curve/image ingestion.",
          "title": "Job"
        },
        "csvMapping": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Mapping from CSV headers to curve result identifiers, for curve data. Serialized as ``csvMapping``.",
          "title": "Csvmapping"
        },
        "curveRemarks": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Remarks associated with curve data. Serialized as ``curveRemarks``.",
          "title": "Curveremarks"
        },
        "athena": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Backing analytical store metadata for curve data. See Also --------",
          "title": "Athena"
        }
      },
      "title": "PropertyData",
      "type": "object"
    },
    "PropertyDataStorageKey": {
      "description": "Storage references (preview, thumbnail, original) for an uploaded media file.",
      "properties": {
        "preview": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Preview"
        },
        "thumb": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Thumb"
        },
        "original": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Original"
        }
      },
      "title": "PropertyDataStorageKey",
      "type": "object"
    },
    "PropertyValue": {
      "description": "A measured result for one data column, with its value, unit, and metadata.\n\nAppears inside a [`Trial`][albert.resources.property_data.Trial] (as one of its ``data_columns``) and represents\nthe value captured for a single data column of a data template. Both a numeric\nand a string form of the value may be present depending on the column type.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Identifier of the result within the trial.",
          "title": "Id"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The data column / result name.",
          "title": "Name"
        },
        "sequence": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Pointer to the specific data (result) column; more unique than a data column ID because a data column can be repeated within a Data Template (analogous to a parameter repeated in a Parameter Group).",
          "title": "Sequence"
        },
        "calculation": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional calculation expression used in place of a fixed value; may reference other result columns (e.g. ``=((COL3-COL1)/COL2)*100``). The result is computed and shown in the UI.",
          "title": "Calculation"
        },
        "valueNumeric": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The numeric form of the value. Serialized as ``valueNumeric``.",
          "title": "Valuenumeric"
        },
        "valueString": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The string form of the value. Serialized as ``valueString``.",
          "title": "Valuestring"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The stored value.",
          "title": "Value"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "additionalProperties": true,
              "type": "object"
            }
          ],
          "description": "The unit of measure for the value, as an entity link. Serialized as ``Unit``.",
          "title": "Unit"
        },
        "PropertyData": {
          "anyOf": [
            {
              "$ref": "#/$defs/PropertyData"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The backing stored value / media record. Serialized as ``PropertyData``."
        },
        "dataColumnUniqueId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unique ID of the data column this result captures. Serialized as ``dataColumnUniqueId``.",
          "title": "Datacolumnuniqueid"
        },
        "hidden": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": false,
          "description": "Whether the result is hidden. See Also --------",
          "title": "Hidden"
        }
      },
      "title": "PropertyValue",
      "type": "object"
    },
    "Status": {
      "description": "The status of a resource.\n\nAttributes\n----------\nACTIVE : str\n    The resource is fully operational and visible in normal operations.\nINACTIVE : str\n    The resource is hidden from normal operations and disabled from use.",
      "enum": [
        "active",
        "inactive"
      ],
      "title": "Status",
      "type": "string"
    },
    "StorageKeyReference": {
      "description": "S3 storage key references for a data column file result.",
      "properties": {
        "rawfile": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The raw file storage key.",
          "title": "Rawfile"
        },
        "s3Input": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the input file.",
          "title": "S3Input"
        },
        "s3Output": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the processed output file.",
          "title": "S3Output"
        },
        "preview": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a preview image.",
          "title": "Preview"
        },
        "thumb": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a thumbnail image.",
          "title": "Thumb"
        },
        "original": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the original file.",
          "title": "Original"
        }
      },
      "title": "StorageKeyReference",
      "type": "object"
    },
    "Unit": {
      "description": "A unit of measure (e.g. ``g``, ``mL``, ``\u00b0C``).\n\nUnits qualify quantities throughout the platform: inventory amounts,\nparameter values, and property results. Managed through\n[`UnitCollection`][albert.collections.units.UnitCollection] (``client.units``).\n\n!!! example\n    ```python\n    from albert.resources.units import Unit, UnitCategory\n    unit = Unit(name=\"milliliter\", symbol=\"mL\", category=UnitCategory.LIQUID_VOLUME)\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the unit (format ``UNI...``). Set when the unit is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "name": {
          "description": "Currently this is the only field that is displayed in Albert, so use this for display purposes. Therefore, users often use the symbol for the unit here as that's the preferred display.",
          "title": "Name",
          "type": "string"
        },
        "symbol": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display symbol for the unit (e.g. ``\"g\"``).",
          "title": "Symbol"
        },
        "Synonyms": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Alternate names or spellings that also refer to this unit.",
          "title": "Synonyms"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/UnitCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The physical quantity the unit measures (e.g. ``Mass``, ``Volume``)."
        },
        "verified": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": false,
          "description": "Whether the unit has been verified in Albert. Read-only.",
          "title": "Verified"
        }
      },
      "required": [
        "name"
      ],
      "title": "Unit",
      "type": "object"
    },
    "UnitCategory": {
      "description": "The physical quantity a unit measures.\n\nAttributes\n----------\nLENGTH : str\n    Length units (e.g. m, cm).\nVOLUME : str\n    Volume units (e.g. m\u00b3).\nLIQUID_VOLUME : str\n    Liquid volume units (e.g. L, mL).\nANGLES : str\n    Angle units (e.g. degrees, radians).\nTIME : str\n    Time units (e.g. s, h).\nFREQUENCY : str\n    Frequency units (e.g. Hz).\nMASS : str\n    Mass units (e.g. g, kg).\nCURRENT : str\n    Electric current units (e.g. A).\nTEMPERATURE : str\n    Temperature units (e.g. \u00b0C, K).\nAMOUNT : str\n    Amount of substance units (e.g. mol).\nLUMINOSITY : str\n    Luminous intensity units (e.g. cd).\nFORCE : str\n    Force units (e.g. N).\nENERGY : str\n    Energy units (e.g. J).\nPOWER : str\n    Power units (e.g. W).\nPRESSURE : str\n    Pressure units (e.g. Pa, bar).\nELECTRICITY_AND_MAGNETISM : str\n    Electricity and magnetism units.\nOTHER : str\n    Units that do not fit another category.\nWEIGHT : str\n    Weight units.\nAREA : str\n    Area units (e.g. m\u00b2).\nSURFACE_AREA : str\n    Surface area units.\nBINARY : str\n    Binary/digital-information units (e.g. bytes).\nCAPACITANCE : str\n    Capacitance units (e.g. F).\nSPEED : str\n    Speed units (e.g. m/s).\nELECTRICAL_CONDUCTIVITY : str\n    Electrical conductivity units.\nELECTRICAL_PERMITTIVITY : str\n    Electrical permittivity units.\nDENSITY : str\n    Density units (e.g. g/mL).\nRESISTANCE : str\n    Electrical resistance units (e.g. \u03a9).",
      "enum": [
        "Length",
        "Volume",
        "Liquid volume",
        "Angles",
        "Time",
        "Frequency",
        "Mass",
        "Electric current",
        "Temperature",
        "Amount of substance",
        "Luminous intensity",
        "Force",
        "Energy",
        "Power",
        "Pressure",
        "Electricity and magnetism",
        "Other",
        "Weight",
        "Area",
        "Surface Area",
        "Binary",
        "Capacitance",
        "Speed",
        "Electrical conductivity",
        "Electrical permitivitty",
        "Density",
        "Resistance"
      ],
      "title": "UnitCategory",
      "type": "string"
    }
  },
  "description": "A single custom (non-task) property value stored on an inventory item.",
  "properties": {
    "id": {
      "title": "Id",
      "type": "string"
    },
    "name": {
      "title": "Name",
      "type": "string"
    },
    "PropertyData": {
      "$ref": "#/$defs/PropertyValue"
    },
    "Unit": {
      "anyOf": [
        {
          "$ref": "#/$defs/Unit"
        },
        {
          "$ref": "#/$defs/EntityLink"
        },
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "title": "Unit"
    }
  },
  "required": [
    "id",
    "name",
    "PropertyData"
  ],
  "title": "CustomInventoryDataColumn",
  "type": "object"
}

Fields:

data_column_id

data_column_id: DataColumnId

data_column_name

data_column_name: str

property_data

property_data: PropertyValue

unit

unit: SerializeAsEntityLink[Unit] | None | dict

CustomData

Bases: BaseAlbertModel

A property value stored directly on an inventory item, not from a task.

Returned inside InventoryPropertyData under custom_property_data. Represents a value entered against an inventory item independently of any task measurement (for example a supplier-stated value), optionally tied to a lot.

Show JSON schema:
{
  "$defs": {
    "AuditFields": {
      "description": "The audit fields for a resource",
      "properties": {
        "by": {
          "default": null,
          "title": "By",
          "type": "string"
        },
        "byName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Byname"
        },
        "at": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "At"
        }
      },
      "title": "AuditFields",
      "type": "object"
    },
    "CustomInventoryDataColumn": {
      "description": "A single custom (non-task) property value stored on an inventory item.",
      "properties": {
        "id": {
          "title": "Id",
          "type": "string"
        },
        "name": {
          "title": "Name",
          "type": "string"
        },
        "PropertyData": {
          "$ref": "#/$defs/PropertyValue"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "title": "Unit"
        }
      },
      "required": [
        "id",
        "name",
        "PropertyData"
      ],
      "title": "CustomInventoryDataColumn",
      "type": "object"
    },
    "EntityLink": {
      "properties": {
        "id": {
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "required": [
        "id"
      ],
      "title": "EntityLink",
      "type": "object"
    },
    "EntityLinkWithName": {
      "description": "EntityLink that includes the name field in serialization.",
      "properties": {
        "id": {
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "required": [
        "id"
      ],
      "title": "EntityLinkWithName",
      "type": "object"
    },
    "InventoryCategory": {
      "description": "The kind of material an [`InventoryItem`][albert.resources.inventory.InventoryItem] represents.\n\nEvery inventory item belongs to exactly one category, which determines how it\nis used across the platform and which fields are relevant to it.\n\nAttributes\n----------\nRAW_MATERIALS : str\n    A purchased substance used as an ingredient (e.g. a solvent or pigment).\n    Typically linked to a manufacturing ``company`` and one or more CAS numbers.\nCONSUMABLES : str\n    Lab supplies consumed during work (e.g. gloves, vials, filters).\nEQUIPMENT : str\n    Instruments and apparatus (e.g. a balance or spectrometer).\nFORMULAS : str\n    A mixture designed in Albert under a Project. Creating a Formula item\n    requires ``project_id`` set to the parent Project's ID.",
      "enum": [
        "RawMaterials",
        "Consumables",
        "Equipment",
        "Formulas"
      ],
      "title": "InventoryCategory",
      "type": "string"
    },
    "InventoryDensity": {
      "description": "The density of an inventory item or lot measured by volume.\n\nDensity is expressed in grams per milliliter (g/mL) and locked at creation.\nWhen creating a volume-based item or lot, supply either a bare numeric value\n(float, int, or string) or an [`InventoryDensity`][albert.resources.inventory.InventoryDensity]\ninstance. Metadata fields (attribute ID, unit ID, unit name, locked flag)\nare populated by the server and are read-only.\n\n!!! example\n    ```python\n    from albert.resources.inventory import InventoryDensity\n\n    density = InventoryDensity(value=1.05)\n    ```",
      "properties": {
        "value": {
          "description": "The density value in g/mL.",
          "title": "Value",
          "type": "number"
        },
        "atrId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the density attribute definition. Read-only.",
          "title": "Atrid"
        },
        "unitId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the density measurement unit. Read-only.",
          "title": "Unitid"
        },
        "unitName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display name of the density measurement unit (e.g. ``g/mL``). Read-only.",
          "title": "Unitname"
        },
        "lockedAtCreation": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the density was locked when the parent entity was created. Read-only.",
          "title": "Lockedatcreation"
        }
      },
      "required": [
        "value"
      ],
      "title": "InventoryDensity",
      "type": "object"
    },
    "Location": {
      "description": "A physical lab or site location in Albert.\n\nLocations are referenced by Tasks and Inventory Items to record where an\nactivity is performed or where a material lives, and each Location can hold\none or more Storage Locations\n([`StorageLocation`][albert.resources.storage_locations.StorageLocation]). Managed\nthrough [`LocationCollection`][albert.collections.locations.LocationCollection].\n\n!!! example\n    ```python\n    from albert.resources.locations import Location\n    location = Location(\n        name=\"Boston Lab\",\n        latitude=42.3601,\n        longitude=-71.0589,\n        address=\"1 Main St\",\n        country=\"US\",\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The human-readable name of the location.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the location. Assigned by Albert and populated once the location has been created or retrieved.",
          "title": "Albertid"
        },
        "latitude": {
          "description": "The latitude of the location, in decimal degrees.",
          "title": "Latitude",
          "type": "number"
        },
        "longitude": {
          "description": "The longitude of the location, in decimal degrees.",
          "title": "Longitude",
          "type": "number"
        },
        "address": {
          "description": "The street address of the location.",
          "title": "Address",
          "type": "string"
        },
        "country": {
          "anyOf": [
            {
              "maxLength": 2,
              "minLength": 2,
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The two-letter country code of the location (for example, ``\"US\"``).",
          "title": "Country"
        }
      },
      "required": [
        "name",
        "latitude",
        "longitude",
        "address"
      ],
      "title": "Location",
      "type": "object"
    },
    "Lot": {
      "description": "A specific physical batch or quantity of an Inventory Item.\n\nA Lot represents one received shipment or produced amount of a parent\nInventory Item (identified by ``inventory_id``), tracking batch-specific\ndetails such as how much is currently on hand, where it is stored, its cost,\nand who owns it. Lots are managed through the Lot collection\n([`LotCollection`][albert.collections.lots.LotCollection], accessed as\n``client.lots``); their parent items live in the Inventory collection\n([`InventoryCollection`][albert.collections.inventory.InventoryCollection]). A ``lot_id``\nis used throughout property data to scope results to a single batch.\n\nA lot's own ID has the format ``LOT...``; its parent ``inventory_id`` has the\nformat ``INV...``.\n\n!!! example\n    ```python\n    from albert import Albert\n    from albert.core.shared.models.base import EntityLink\n    from albert.resources.lots import Lot, LotVolumeUnit\n\n    client = Albert()\n\n    # Regular mass-based lot\n    lot = Lot(\n        inventory_id=\"INVA9999999\",\n        storage_location=EntityLink(id=\"STL9999999\"),\n        initial_quantity=10.0,\n        inventory_on_hand=10.0,\n        cost=50.0,\n        manufacturer_lot_number=\"MLN-001\",\n    )\n    created = client.lots.create(lots=[lot])\n\n    # Volume-based lot\n    volume_lot = Lot(\n        inventory_id=\"INVA8888888\",\n        storage_location=EntityLink(id=\"STL9999999\"),\n        initial_quantity=100.0,\n        inventory_on_hand=100.0,\n        initial_quantity_l=127.39,\n        entry_unit=LotVolumeUnit.LITER,\n        cost=80.0,\n        cost_l=62.8,\n        manufacturer_lot_number=\"MLN-002\",\n    )\n    created_volume = client.lots.create(lots=[volume_lot])\n    ```\n\nNotes\n-----\nFields required when creating a lot via\n[`create`][albert.collections.lots.LotCollection.create] depend on the path:\n\n- **Regular lot** (no ``task_id``): ``inventory_id``, ``storage_location``,\n  ``initial_quantity``, and ``inventory_on_hand`` (usually the same value as\n  ``initial_quantity``). When the parent Inventory Item is ``RawMaterials``,\n  ``cost`` and ``manufacturer_lot_number`` are also required.\n- **Task lot** (``task_id`` set, batch / ``Formulas`` path): ``inventory_id``\n  and ``location`` (not ``storage_location``).\n- **Volume lot** (parent item has ``unit_category=\"volume\"``): caller must\n  still provide mass ``initial_quantity`` and ``inventory_on_hand``;\n  ``initial_quantity_l``, ``entry_unit``, ``cost_l``, and ``density`` are\n  optional extensions. Neither the SDK nor the server converts between mass\n  and volume units; callers must ensure mass equals volume multiplied by density.",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/LotStatus"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The lot's lifecycle status. Read-only."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "action": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Internal marker for the operation that produced the lot (e.g. a split). Not typically set by callers.",
          "title": "Action"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The lot's Albert ID (format ``LOT...``). Assigned by Albert; present on lots retrieved from the platform.",
          "title": "Albertid"
        },
        "parentId": {
          "description": "The Albert ID of the parent Inventory Item this lot is a batch of.\n\nRequired when creating a lot.",
          "title": "Parentid",
          "type": "string"
        },
        "taskId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the Task that produced this lot, if it came from one.\n\nWhen set, creation follows the task / batch (``Formulas``) path: provide\n``location`` instead of ``storage_location``.",
          "title": "Taskid"
        },
        "workflowId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the workflow associated with this lot (format ``WFL...``).\n\nIgnored when creating a lot. Can be set via\n[`update`][albert.collections.lots.LotCollection.update].",
          "title": "Workflowid"
        },
        "Workflows": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/LotWorkflowLink"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Workflow associations for this lot. Read-only; use ``workflow_id``.",
          "title": "Workflows"
        },
        "expirationDate": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The date the lot expires, in ``YYYY-MM-DD`` format.",
          "title": "Expirationdate"
        },
        "manufacturerLotNumber": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The manufacturer's own lot number for this batch.\n\nRequired when creating a lot whose parent Inventory Item is ``RawMaterials``\n(and ``task_id`` is not set). Optional on read and update.",
          "title": "Manufacturerlotnumber"
        },
        "StorageLocation": {
          "anyOf": [
            {
              "$ref": "#/$defs/StorageLocation"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The specific place within a location where the lot is stored (e.g. a bin, cabinet, or hood).\n\nWhen creating or updating, pass an [`EntityLink`][albert.core.shared.models.base.EntityLink]\nwith the storage location ID (format ``STL...``), or a fully populated\n[`StorageLocation`][albert.resources.storage_locations.StorageLocation].\nDo not construct ``StorageLocation`` with only ``id``/``name``; ``location`` is required\non that model.",
          "title": "Storagelocation"
        },
        "packSize": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The pack size of the lot, used to calculate cost per unit.",
          "title": "Packsize"
        },
        "initialQuantity": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The quantity the lot started with, in the parent item's units.\n\nFor mass items (``parent_unit=\"mass\"``) this is in **kilograms**: 10 kg is\n``10`` and 500 g is ``0.5``. Required when creating a non-task lot (no\n``task_id``).",
          "title": "Initialquantity"
        },
        "cost": {
          "anyOf": [
            {
              "minimum": 0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The cost of the lot.\n\nRequired when creating a lot whose parent Inventory Item is ``RawMaterials``\n(and ``task_id`` is not set). Optional on read and update.",
          "title": "Cost"
        },
        "inventoryOnHand": {
          "description": "The quantity currently in stock, in the parent item's units.\n\nFor mass items (``parent_unit=\"mass\"``) this is in **kilograms** (10 kg is\n``10``, not ``10000``). Required when creating a non-task lot; set to the\nstarting stock (usually the same value as ``initial_quantity``). After creation, change it with\n[`adjust`][albert.collections.lots.LotCollection.adjust] rather than by\nediting directly.",
          "title": "Inventoryonhand",
          "type": "number"
        },
        "initialQuantityL": {
          "anyOf": [
            {
              "minimum": 0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The initial quantity in litres for a volume-based lot.\n\nOptional. Only honoured when the parent inventory item has ``unit_category=\"volume\"``.\nNo conversion is performed by the SDK or server; the value must already be in litres.\nMass ``initial_quantity`` and ``inventory_on_hand`` are still required.",
          "title": "Initialquantityl"
        },
        "entryUnit": {
          "anyOf": [
            {
              "$ref": "#/$defs/LotVolumeUnit"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit in which quantity was entered at creation (mL, L, or Gal).\n\nLabel only; neither the SDK nor the server converts values based on this field."
        },
        "entryCostUnit": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit in which cost was entered at creation (e.g. ``\"$/L\"``, ``\"$/Gal\"``).\n\nLabel only; neither the SDK nor the server converts values based on this field.",
          "title": "Entrycostunit"
        },
        "costL": {
          "anyOf": [
            {
              "minimum": 0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The volume-primary cost in $/L for a volume-based lot.\n\nOptional. Only honoured when the parent inventory item has ``unit_category=\"volume\"``.\nNo conversion is performed by the SDK or server; the value must already be in $/L.\nMass ``cost`` ($/kg) is still required.",
          "title": "Costl"
        },
        "density": {
          "anyOf": [
            {
              "$ref": "#/$defs/InventoryDensity"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The density in g/mL for this lot.\n\nOptional. When omitted, falls back to the parent inventory item's density.\nFixed at creation and cannot be changed afterward."
        },
        "Owner": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/User"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The user(s) who own the lot. A lot may have at most one owner.",
          "title": "Owner"
        },
        "lotNumber": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The lot's number within Albert.",
          "title": "Lotnumber"
        },
        "externalBarcodeId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "An external barcode ID for the lot.",
          "title": "Externalbarcodeid"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom field values for the lot. Allowed keys and values are defined by the Custom Fields configuration.",
          "title": "Metadata"
        },
        "notes": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Free-text notes on the lot.\n\nNot saved when creating a lot; manage lot notes through the Notes collection\n([`NotesCollection`][albert.collections.notes.NotesCollection], accessed as\n``client.notes``).",
          "title": "Notes"
        },
        "Location": {
          "anyOf": [
            {
              "$ref": "#/$defs/Location"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The site/campus the lot is at (may contain multiple buildings, each with many storage locations).\n\nRequired when creating a task lot (``task_id`` set). Read-only on lots returned\nfrom GET; use ``storage_location`` for regular (non-task) lot creation.",
          "title": "Location"
        },
        "hasNotes": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the lot has notes. Read-only.",
          "title": "Hasnotes"
        },
        "hasAttachments": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the lot has attachments. Read-only.",
          "title": "Hasattachments"
        },
        "parentName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The name of the parent Inventory Item. Read-only.",
          "title": "Parentname"
        },
        "parentUnit": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit of measure of the parent Inventory Item. Read-only.",
          "title": "Parentunit"
        },
        "parentIdCategory": {
          "anyOf": [
            {
              "$ref": "#/$defs/InventoryCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The category of the parent Inventory Item (e.g. ``RawMaterials``). Read-only."
        },
        "barcodeId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The barcode ID assigned by Albert. Read-only.",
          "title": "Barcodeid"
        },
        "taskCompletionDate": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The completion date of the Task that produced the lot. Read-only.",
          "title": "Taskcompletiondate"
        },
        "inventoryOnHandL": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The quantity currently in stock in litres for volume-based lots. Read-only.",
          "title": "Inventoryonhandl"
        },
        "supportsLGalToggle": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the UI offers an L / Gal display toggle. Read-only.",
          "title": "Supportslgaltoggle"
        }
      },
      "required": [
        "parentId",
        "inventoryOnHand"
      ],
      "title": "Lot",
      "type": "object"
    },
    "LotStatus": {
      "description": "The lifecycle status of a lot.\n\nAttributes\n----------\nACTIVE\n    The lot is in normal use.\nINACTIVE\n    The lot is no longer in use.\nQUARANTINED\n    The lot is held back from use (e.g. pending inspection).",
      "enum": [
        "active",
        "inactive",
        "quarantined"
      ],
      "title": "LotStatus",
      "type": "string"
    },
    "LotVolumeUnit": {
      "description": "The volume unit used when entering lot quantities.\n\nAttributes\n----------\nMILLILITER\n    Milliliters (mL).\nLITER\n    Liters (L).\nGALLON\n    Gallons (Gal).",
      "enum": [
        "mL",
        "L",
        "Gal"
      ],
      "title": "LotVolumeUnit",
      "type": "string"
    },
    "LotWorkflowLink": {
      "description": "A workflow associated with a lot.",
      "properties": {
        "id": {
          "description": "The workflow ID (format ``WFL...``).",
          "title": "Id",
          "type": "string"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Workflow category (e.g. ``FINAL``).",
          "title": "Category"
        }
      },
      "required": [
        "id"
      ],
      "title": "LotWorkflowLink",
      "type": "object"
    },
    "PropertyData": {
      "description": "A single stored result value together with any rich-media backing data.\n\nReturned by the API as part of a [`PropertyValue`][albert.resources.property_data.PropertyValue]. For simple numeric or\ntext results only ``value`` is populated; for image and curve data columns the\nadditional fields carry the uploaded file references and processing metadata.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of this property data record (format ``PTD...``).",
          "title": "Id"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The stored result value. All values are stored as strings in Albert.",
          "title": "Value"
        },
        "valueNumeric": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The numeric form of the value, when the column is numeric. Serialized as ``valueNumeric``.",
          "title": "Valuenumeric"
        },
        "valueString": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The string form of the value, when the column is string-typed. Serialized as ``valueString``.",
          "title": "Valuestring"
        },
        "valueType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The type of the value (e.g. numeric, string, image, curve). Serialized as ``valueType``.",
          "title": "Valuetype"
        },
        "s3Key": {
          "anyOf": [
            {
              "$ref": "#/$defs/PropertyDataStorageKey"
            },
            {
              "$ref": "#/$defs/StorageKeyReference"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Storage references for uploaded media (image previews/thumbnails or curve files). Serialized as ``s3Key``.",
          "title": "S3Key"
        },
        "job": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Processing job metadata, used for curve/image ingestion.",
          "title": "Job"
        },
        "csvMapping": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Mapping from CSV headers to curve result identifiers, for curve data. Serialized as ``csvMapping``.",
          "title": "Csvmapping"
        },
        "curveRemarks": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Remarks associated with curve data. Serialized as ``curveRemarks``.",
          "title": "Curveremarks"
        },
        "athena": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Backing analytical store metadata for curve data. See Also --------",
          "title": "Athena"
        }
      },
      "title": "PropertyData",
      "type": "object"
    },
    "PropertyDataStorageKey": {
      "description": "Storage references (preview, thumbnail, original) for an uploaded media file.",
      "properties": {
        "preview": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Preview"
        },
        "thumb": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Thumb"
        },
        "original": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Original"
        }
      },
      "title": "PropertyDataStorageKey",
      "type": "object"
    },
    "PropertyValue": {
      "description": "A measured result for one data column, with its value, unit, and metadata.\n\nAppears inside a [`Trial`][albert.resources.property_data.Trial] (as one of its ``data_columns``) and represents\nthe value captured for a single data column of a data template. Both a numeric\nand a string form of the value may be present depending on the column type.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Identifier of the result within the trial.",
          "title": "Id"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The data column / result name.",
          "title": "Name"
        },
        "sequence": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Pointer to the specific data (result) column; more unique than a data column ID because a data column can be repeated within a Data Template (analogous to a parameter repeated in a Parameter Group).",
          "title": "Sequence"
        },
        "calculation": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional calculation expression used in place of a fixed value; may reference other result columns (e.g. ``=((COL3-COL1)/COL2)*100``). The result is computed and shown in the UI.",
          "title": "Calculation"
        },
        "valueNumeric": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The numeric form of the value. Serialized as ``valueNumeric``.",
          "title": "Valuenumeric"
        },
        "valueString": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The string form of the value. Serialized as ``valueString``.",
          "title": "Valuestring"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The stored value.",
          "title": "Value"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "additionalProperties": true,
              "type": "object"
            }
          ],
          "description": "The unit of measure for the value, as an entity link. Serialized as ``Unit``.",
          "title": "Unit"
        },
        "PropertyData": {
          "anyOf": [
            {
              "$ref": "#/$defs/PropertyData"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The backing stored value / media record. Serialized as ``PropertyData``."
        },
        "dataColumnUniqueId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unique ID of the data column this result captures. Serialized as ``dataColumnUniqueId``.",
          "title": "Datacolumnuniqueid"
        },
        "hidden": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": false,
          "description": "Whether the result is hidden. See Also --------",
          "title": "Hidden"
        }
      },
      "title": "PropertyValue",
      "type": "object"
    },
    "Role": {
      "description": "A named set of access permissions within a tenant.\n\nA role bundles policies that determine what a holder is allowed to do. Roles\nare assigned to users ([`User`][albert.resources.users.User]) and referenced\nby entity ACLs. Roles are typically read from Albert rather than built by\nhand.",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the role. Role IDs may contain ``#`` characters. Set once the role is retrieved from Albert.",
          "title": "Albertid"
        },
        "name": {
          "description": "The display name of the role.",
          "title": "Name",
          "type": "string"
        },
        "Policies": {
          "anyOf": [
            {
              "items": {},
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The policies (permission rules) associated with the role.",
          "title": "Policies"
        },
        "tenant": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the tenant the role belongs to. Omitted on role-only (id-filtered) responses.",
          "title": "Tenant"
        },
        "visibility": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the role is visible in the platform's role listings.",
          "title": "Visibility"
        }
      },
      "required": [
        "name"
      ],
      "title": "Role",
      "type": "object"
    },
    "Status": {
      "description": "The status of a resource.\n\nAttributes\n----------\nACTIVE : str\n    The resource is fully operational and visible in normal operations.\nINACTIVE : str\n    The resource is hidden from normal operations and disabled from use.",
      "enum": [
        "active",
        "inactive"
      ],
      "title": "Status",
      "type": "string"
    },
    "StorageKeyReference": {
      "description": "S3 storage key references for a data column file result.",
      "properties": {
        "rawfile": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The raw file storage key.",
          "title": "Rawfile"
        },
        "s3Input": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the input file.",
          "title": "S3Input"
        },
        "s3Output": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the processed output file.",
          "title": "S3Output"
        },
        "preview": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a preview image.",
          "title": "Preview"
        },
        "thumb": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a thumbnail image.",
          "title": "Thumb"
        },
        "original": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the original file.",
          "title": "Original"
        }
      },
      "title": "StorageKeyReference",
      "type": "object"
    },
    "StorageLocation": {
      "description": "A specific place where an Inventory Item is physically stored.\n\nExamples include a flammables cabinet, a freezer, or a storeroom shelf. Every\nstorage location belongs to a parent Location\n([`Location`][albert.resources.locations.Location]), and Inventory search filters\ncan narrow results to items held in a given storage location. Managed through\n[`StorageLocationsCollection`][albert.collections.storage_locations.StorageLocationsCollection].\n\n!!! example\n    ```python\n    from albert import Albert\n    from albert.resources.storage_locations import StorageLocation\n    client = Albert()\n    parent = client.locations.get_by_id(id=\"...\")\n    storage_location = StorageLocation(name=\"Freezer A\", location=parent)\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The human-readable name of the storage location (2 to 255 characters).",
          "maxLength": 255,
          "minLength": 2,
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the storage location (format ``STL...``). Assigned by Albert and populated once the storage location has been created or retrieved.",
          "title": "Albertid"
        },
        "Location": {
          "anyOf": [
            {
              "$ref": "#/$defs/Location"
            },
            {
              "$ref": "#/$defs/EntityLink"
            }
          ],
          "description": "The parent Location this storage location belongs to.",
          "title": "Location"
        }
      },
      "required": [
        "name",
        "Location"
      ],
      "title": "StorageLocation",
      "type": "object"
    },
    "Unit": {
      "description": "A unit of measure (e.g. ``g``, ``mL``, ``\u00b0C``).\n\nUnits qualify quantities throughout the platform: inventory amounts,\nparameter values, and property results. Managed through\n[`UnitCollection`][albert.collections.units.UnitCollection] (``client.units``).\n\n!!! example\n    ```python\n    from albert.resources.units import Unit, UnitCategory\n    unit = Unit(name=\"milliliter\", symbol=\"mL\", category=UnitCategory.LIQUID_VOLUME)\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the unit (format ``UNI...``). Set when the unit is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "name": {
          "description": "Currently this is the only field that is displayed in Albert, so use this for display purposes. Therefore, users often use the symbol for the unit here as that's the preferred display.",
          "title": "Name",
          "type": "string"
        },
        "symbol": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display symbol for the unit (e.g. ``\"g\"``).",
          "title": "Symbol"
        },
        "Synonyms": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Alternate names or spellings that also refer to this unit.",
          "title": "Synonyms"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/UnitCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The physical quantity the unit measures (e.g. ``Mass``, ``Volume``)."
        },
        "verified": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": false,
          "description": "Whether the unit has been verified in Albert. Read-only.",
          "title": "Verified"
        }
      },
      "required": [
        "name"
      ],
      "title": "Unit",
      "type": "object"
    },
    "UnitCategory": {
      "description": "The physical quantity a unit measures.\n\nAttributes\n----------\nLENGTH : str\n    Length units (e.g. m, cm).\nVOLUME : str\n    Volume units (e.g. m\u00b3).\nLIQUID_VOLUME : str\n    Liquid volume units (e.g. L, mL).\nANGLES : str\n    Angle units (e.g. degrees, radians).\nTIME : str\n    Time units (e.g. s, h).\nFREQUENCY : str\n    Frequency units (e.g. Hz).\nMASS : str\n    Mass units (e.g. g, kg).\nCURRENT : str\n    Electric current units (e.g. A).\nTEMPERATURE : str\n    Temperature units (e.g. \u00b0C, K).\nAMOUNT : str\n    Amount of substance units (e.g. mol).\nLUMINOSITY : str\n    Luminous intensity units (e.g. cd).\nFORCE : str\n    Force units (e.g. N).\nENERGY : str\n    Energy units (e.g. J).\nPOWER : str\n    Power units (e.g. W).\nPRESSURE : str\n    Pressure units (e.g. Pa, bar).\nELECTRICITY_AND_MAGNETISM : str\n    Electricity and magnetism units.\nOTHER : str\n    Units that do not fit another category.\nWEIGHT : str\n    Weight units.\nAREA : str\n    Area units (e.g. m\u00b2).\nSURFACE_AREA : str\n    Surface area units.\nBINARY : str\n    Binary/digital-information units (e.g. bytes).\nCAPACITANCE : str\n    Capacitance units (e.g. F).\nSPEED : str\n    Speed units (e.g. m/s).\nELECTRICAL_CONDUCTIVITY : str\n    Electrical conductivity units.\nELECTRICAL_PERMITTIVITY : str\n    Electrical permittivity units.\nDENSITY : str\n    Density units (e.g. g/mL).\nRESISTANCE : str\n    Electrical resistance units (e.g. \u03a9).",
      "enum": [
        "Length",
        "Volume",
        "Liquid volume",
        "Angles",
        "Time",
        "Frequency",
        "Mass",
        "Electric current",
        "Temperature",
        "Amount of substance",
        "Luminous intensity",
        "Force",
        "Energy",
        "Power",
        "Pressure",
        "Electricity and magnetism",
        "Other",
        "Weight",
        "Area",
        "Surface Area",
        "Binary",
        "Capacitance",
        "Speed",
        "Electrical conductivity",
        "Electrical permitivitty",
        "Density",
        "Resistance"
      ],
      "title": "UnitCategory",
      "type": "string"
    },
    "User": {
      "description": "An Albert user account: a person who can log in and act in the platform.\n\nA user has a name and email, an optional home\n[`Location`][albert.resources.locations.Location], and a set of\n[`Role`][albert.resources.roles.Role] objects that govern what they can do.\nThe ``user_class`` sets a broad permission tier\n([`UserClass`][albert.resources.users.UserClass]). Users are grouped into teams\n([`Team`][albert.resources.teams.Team]), and are referenced across the\nplatform, for example as the assignee of a Task or in an entity's ACL.\n\n!!! example\n    ```python\n    from albert.resources.users import User, UserClass\n    user = User(\n        name=\"Ada Lovelace\",\n        email=\"ada@example.com\",\n        user_class=UserClass.STANDARD,\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The display name of the user.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert User ID (format ``USR...``). Set once the user is registered in or retrieved from Albert.",
          "title": "Albertid"
        },
        "Location": {
          "anyOf": [
            {
              "$ref": "#/$defs/Location"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The user's home location.",
          "title": "Location"
        },
        "email": {
          "default": null,
          "description": "The user's email address.",
          "format": "email",
          "title": "Email",
          "type": "string"
        },
        "Roles": {
          "description": "The roles the user holds, which determine their permissions.",
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/Role"
              },
              {
                "$ref": "#/$defs/EntityLink"
              }
            ]
          },
          "maxItems": 1,
          "title": "Roles",
          "type": "array"
        },
        "userClass": {
          "$ref": "#/$defs/UserClass",
          "default": "standard",
          "description": "The ACL class level of the user (broad permission tier)."
        },
        "witnesser": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the user can act as a witness on tasks (only relevant when witnessing is enabled for the tenant).",
          "title": "Witnesser"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom metadata attached to the user.",
          "title": "Metadata"
        }
      },
      "required": [
        "name"
      ],
      "title": "User",
      "type": "object"
    },
    "UserClass": {
      "description": "The ACL class level of a user, setting a broad permission tier.\n\nAttributes\n----------\nGUEST : str\n    Most limited access; typically external or temporary users.\nSTANDARD : str\n    Default access level for regular users.\nTRUSTED : str\n    Elevated access above standard users.\nPRIVILEGED : str\n    High access level below full administrators.\nADMIN : str\n    Full administrative access to the tenant.",
      "enum": [
        "guest",
        "standard",
        "trusted",
        "privileged",
        "admin"
      ],
      "title": "UserClass",
      "type": "string"
    }
  },
  "description": "A property value stored directly on an inventory item, not from a task.\n\nReturned inside [`InventoryPropertyData`][albert.resources.property_data.InventoryPropertyData] under ``custom_property_data``.\nRepresents a value entered against an inventory item independently of any task\nmeasurement (for example a supplier-stated value), optionally tied to a lot.",
  "properties": {
    "Lot": {
      "anyOf": [
        {
          "$ref": "#/$defs/Lot"
        },
        {
          "$ref": "#/$defs/EntityLink"
        },
        {
          "additionalProperties": true,
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "description": "The lot the value applies to, if any. Serialized as ``Lot``.",
      "title": "Lot"
    },
    "DataColumn": {
      "$ref": "#/$defs/CustomInventoryDataColumn",
      "description": "The data column and its stored value. Serialized as ``DataColumn``. See Also --------"
    }
  },
  "required": [
    "DataColumn"
  ],
  "title": "CustomData",
  "type": "object"
}

Fields:

lot

lot: SerializeAsEntityLink[Lot] | None | dict

The lot the value applies to, if any. Serialized as Lot.

data_column

The data column and its stored value. Serialized as DataColumn. See Also --------

PropertyDataInventoryInformation

Bases: BaseAlbertModel

The inventory item and lot a task's property data was measured against.

Show JSON schema:
{
  "description": "The inventory item and lot a task's property data was measured against.",
  "properties": {
    "id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Id"
    },
    "lotId": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Lotid"
    }
  },
  "title": "PropertyDataInventoryInformation",
  "type": "object"
}

Fields:

inventory_id

inventory_id: str | None = None

lot_id

lot_id: str | None = None

CheckPropertyData

Bases: BaseResource

Result of checking whether property data exists for a task/block/interval.

Returned by check_for_task_data and check_block_interval_for_data to report whether values have already been recorded for a given location.

Show JSON schema:
{
  "$defs": {
    "AuditFields": {
      "description": "The audit fields for a resource",
      "properties": {
        "by": {
          "default": null,
          "title": "By",
          "type": "string"
        },
        "byName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Byname"
        },
        "at": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "At"
        }
      },
      "title": "AuditFields",
      "type": "object"
    },
    "Status": {
      "description": "The status of a resource.\n\nAttributes\n----------\nACTIVE : str\n    The resource is fully operational and visible in normal operations.\nINACTIVE : str\n    The resource is hidden from normal operations and disabled from use.",
      "enum": [
        "active",
        "inactive"
      ],
      "title": "Status",
      "type": "string"
    }
  },
  "description": "Result of checking whether property data exists for a task/block/interval.\n\nReturned by\n[`check_for_task_data`][albert.collections.property_data.PropertyDataCollection.check_for_task_data]\nand\n[`check_block_interval_for_data`][albert.collections.property_data.PropertyDataCollection.check_block_interval_for_data]\nto report whether values have already been recorded for a given location.",
  "properties": {
    "status": {
      "anyOf": [
        {
          "$ref": "#/$defs/Status"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The status of the resource, optional."
    },
    "Created": {
      "anyOf": [
        {
          "$ref": "#/$defs/AuditFields"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Audit fields for the creation of the resource, optional."
    },
    "Updated": {
      "anyOf": [
        {
          "$ref": "#/$defs/AuditFields"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Audit fields for the update of the resource, optional."
    },
    "blockId": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The block checked (format ``BLK...``). Serialized as ``blockId``.",
      "title": "Blockid"
    },
    "interval": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The interval combination checked. Serialized as ``interval``.",
      "title": "Interval"
    },
    "inventoryId": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The inventory item checked (format ``INV...``). Serialized as ``inventoryId``.",
      "title": "Inventoryid"
    },
    "lotId": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The lot checked, if any. Serialized as ``lotId``.",
      "title": "Lotid"
    },
    "dataExist": {
      "anyOf": [
        {
          "type": "boolean"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Whether property data exists at the checked location. Serialized as ``dataExist``.",
      "title": "Dataexist"
    },
    "message": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "A human-readable message describing the result.",
      "title": "Message"
    }
  },
  "title": "CheckPropertyData",
  "type": "object"
}

Fields:

block_id

block_id: str | None = None

The block checked (format BLK...). Serialized as blockId.

interval_id

interval_id: str | None = None

The interval combination checked. Serialized as interval.

inventory_id

inventory_id: str | None = None

The inventory item checked (format INV...). Serialized as inventoryId.

lot_id

lot_id: str | None = None

The lot checked, if any. Serialized as lotId.

data_exists

data_exists: bool | None = None

Whether property data exists at the checked location. Serialized as dataExist.

message

message: str | None = None

A human-readable message describing the result.

InventoryPropertyData

Bases: BaseResource

All property data associated with one inventory item.

Returned by get_properties_on_inventory. Separates results that rolled up from tasks from custom values entered directly on the item. Distinct from Inventory Specs / Attributes, which store inventory reference properties rather than measured (or custom PTD) values.

Show JSON schema:
{
  "$defs": {
    "ACL": {
      "description": "A single access rule for a user.",
      "properties": {
        "id": {
          "description": "The id of the user for which this ACL applies",
          "title": "Id",
          "type": "string"
        },
        "fgc": {
          "anyOf": [
            {
              "$ref": "#/$defs/AccessControlLevel"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Fine-Grain Control Level"
        }
      },
      "required": [
        "id"
      ],
      "title": "ACL",
      "type": "object"
    },
    "AccessControlLevel": {
      "description": "Access control levels you can grant users.",
      "enum": [
        "ProjectOwner",
        "ProjectEditor",
        "ProjectViewer",
        "ProjectAllTask",
        "ProjectStrictViewer",
        "ProjectPropertyTask",
        "InventoryOwner",
        "InventoryViewer",
        "CustomTemplateOwner",
        "CustomTemplateViewer",
        "CASFullAccess"
      ],
      "title": "AccessControlLevel",
      "type": "string"
    },
    "AuditFields": {
      "description": "The audit fields for a resource",
      "properties": {
        "by": {
          "default": null,
          "title": "By",
          "type": "string"
        },
        "byName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Byname"
        },
        "at": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "At"
        }
      },
      "title": "AuditFields",
      "type": "object"
    },
    "Axis": {
      "enum": [
        "X",
        "Y"
      ],
      "title": "Axis",
      "type": "string"
    },
    "CSVMapping": {
      "description": "A mapping between CSV column headers and data column IDs.",
      "properties": {
        "mapId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A compact mapping string (e.g. ``\"Header1:DAC2900#Header2:DAC4707\"``).",
          "examples": "Header1:DAC2900#Header2:DAC4707",
          "title": "Mapid"
        },
        "mapData": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A dictionary mapping CSV header names to data column IDs.",
          "examples": {
            "Header1": "DAC2900",
            "Header2": "DAC4707"
          },
          "title": "Mapdata"
        }
      },
      "title": "CSVMapping",
      "type": "object"
    },
    "Cas": {
      "description": "A CAS entry: a chemical substance identified by its CAS Registry Number.\n\nA ``Cas`` is Albert's dictionary record for a substance. Raw-material Inventory\nItems reference these entries to declare what they are made of, pairing each\n``Cas`` with an amount (see [`CasAmount`][albert.resources.inventory.CasAmount]).\nManage entries through\n[`CasCollection`][albert.collections.cas.CasCollection] (``client.cas``): most fields\nare populated by Albert, so you typically only build a ``Cas`` from a registry\n``number`` when creating a new entry.\n\n!!! example\n    ```python\n    from albert.resources.cas import Cas\n    # Build a CAS entry to register a new substance\n    cas = Cas(number=\"7727-37-9\")\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "number": {
          "description": "The CAS number.",
          "title": "Number",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Name of the CAS.",
          "title": "Name"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The description or name of the CAS.",
          "title": "Description"
        },
        "notes": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Notes related to the CAS.",
          "title": "Notes"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/CasCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The category of the CAS."
        },
        "casSmiles": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "CAS SMILES notation.",
          "title": "Cassmiles"
        },
        "inchiKey": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "InChIKey of the CAS.",
          "title": "Inchikey"
        },
        "iUpacName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "IUPAC name of the CAS.",
          "title": "Iupacname"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The AlbertID of the CAS.",
          "title": "Albertid"
        },
        "hazards": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/Hazard"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazards associated with the CAS.",
          "title": "Hazards"
        },
        "wgk": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "German Water Hazard Class (WGK) number.",
          "title": "Wgk"
        },
        "ecListNo": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "European Community (EC) number.",
          "title": "Eclistno"
        },
        "type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Internal classification_type reference.",
          "title": "Type"
        },
        "classificationType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Classification type of the CAS.",
          "title": "Classificationtype"
        },
        "order": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "CAS order.",
          "title": "Order"
        },
        "Metadata": {
          "additionalProperties": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "integer"
              },
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/EntityLinkWithName"
              },
              {
                "$ref": "#/$defs/EntityLink"
              },
              {
                "items": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/EntityLinkWithName"
                    },
                    {
                      "$ref": "#/$defs/EntityLink"
                    }
                  ]
                },
                "type": "array"
              }
            ]
          },
          "description": "Custom metadata keyed by field. Updatable.",
          "title": "Metadata",
          "type": "object"
        }
      },
      "required": [
        "number"
      ],
      "title": "Cas",
      "type": "object"
    },
    "CasAmount": {
      "description": "A single CAS constituent and its concentration within an [`InventoryItem`][albert.resources.inventory.InventoryItem].\n\nA ``CasAmount`` links one CAS number (a chemical substance identifier) to the\namount of that substance present in an inventory item, expressed as a range\n(``min`` to ``max``) with an optional ``target``. A list of these on an\n[`InventoryItem`][albert.resources.inventory.InventoryItem] gives the item's compositional breakdown.\n\nIdentify the CAS in one of two ways: pass a full [`Cas`][albert.resources.cas.Cas]\nobject as ``cas`` (its ``id``, ``number``, and ``cas_smiles`` are then copied onto\nthis amount), or pass just the CAS resource ``id`` string. Do not pass both.\n\n!!! example\n    ```python\n    from albert.resources.inventory import CasAmount\n\n    # Reference an existing CAS resource by its Albert ID, 10-30% concentration\n    amount = CasAmount(min=10.0, max=30.0, id=\"CAS1\")\n    ```",
      "properties": {
        "min": {
          "description": "The minimum amount (concentration) of the CAS in the item.",
          "title": "Min",
          "type": "number"
        },
        "max": {
          "description": "The maximum amount (concentration) of the CAS in the item.",
          "title": "Max",
          "type": "number"
        },
        "inventoryValue": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The target amount of the CAS in the item. Serialized as ``inventoryValue``.",
          "title": "Inventoryvalue"
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the CAS resource this amount represents. Provide either a ``cas`` object or an ``id``; when ``cas`` is given, this is set from it.",
          "title": "Id"
        },
        "casCategory": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the CAS is a trade secret.",
          "title": "Cascategory"
        },
        "inventoryFunction": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/ListItem"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Business-controlled functions associated with the CAS in this inventory context (e.g. what role the substance plays). Values come from a managed list.",
          "title": "Inventoryfunction"
        },
        "type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The CAS type. Can be retrieved from the CAS collection before construction.",
          "title": "Type"
        },
        "classificationType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The EU classification source for the CAS: harmonized, notified, or REACH.",
          "title": "Classificationtype"
        },
        "substanceId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The substance ID linked to this CAS entry.",
          "title": "Substanceid"
        },
        "cas": {
          "anyOf": [
            {
              "$ref": "#/$defs/Cas"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The full CAS object associated with this amount. Read-only after init; excluded from serialization. Provide either a ``cas`` or an ``id``."
        },
        "casSmiles": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The SMILES string of the CAS resource. Read-only; set from the ``cas`` object.",
          "title": "Cassmiles"
        },
        "number": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The CAS number (e.g. ``\"7440-32-6\"``). Read-only; set from the ``cas`` object.",
          "title": "Number"
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit metadata for creation. Read-only."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/CasAuditFieldsWithEmail"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit metadata for the last update. Read-only. See Also --------"
        }
      },
      "required": [
        "min",
        "max"
      ],
      "title": "CasAmount",
      "type": "object"
    },
    "CasAuditFieldsWithEmail": {
      "description": "The audit fields for a CAS resource with email",
      "properties": {
        "by": {
          "default": null,
          "title": "By",
          "type": "string"
        },
        "byName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Byname"
        },
        "at": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "At"
        },
        "email": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Email"
        }
      },
      "title": "CasAuditFieldsWithEmail",
      "type": "object"
    },
    "CasCategory": {
      "enum": [
        "User",
        "Verisk",
        "TSCA - Public",
        "TSCA - Private",
        "not TSCA",
        "CAS linked to External Database",
        "Unknown (Trade Secret)",
        "CL_Inventory Upload"
      ],
      "title": "CasCategory",
      "type": "string"
    },
    "Company": {
      "description": "A manufacturing company or supplier tracked in Albert.\n\nA Company is the organization that makes or supplies a material. It is the\n``company`` linked on raw-material inventory items: each raw material points\nback to the Company that manufactures it (see\n[`InventoryItem`][albert.resources.inventory.InventoryItem]). Companies are managed\nthrough [`CompanyCollection`][albert.collections.companies.CompanyCollection], accessed as\n``client.companies``.\n\nCompanies are identified by a Company ID (format ``COM...``). A Company is\ntypically minimal: a name plus its assigned ID. You construct one directly\n(``Company(name=\"Acme Chemicals\")``) to create it or to attach it to an\ninventory item.\n\n!!! example\n    ```python\n    from albert.resources.companies import Company\n\n    # Build a company to create or attach to an inventory item\n    company = Company(name=\"Acme Chemicals\")\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The company's name. This is the primary identifier used when searching for or creating a company.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert Company ID (format ``COM...``). ``None`` until the company is created in or retrieved from Albert.",
          "title": "Albertid"
        },
        "distance": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Search-relevance score returned when the company comes back as a search result. Read-only; not set on companies you build yourself.",
          "title": "Distance"
        }
      },
      "required": [
        "name"
      ],
      "title": "Company",
      "type": "object"
    },
    "CurveDBMetadata": {
      "description": "Database metadata for a curve data column result.",
      "properties": {
        "tableName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Athena/database table name storing the curve data.",
          "title": "Tablename"
        },
        "partitionKey": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The partition key for the curve data table.",
          "title": "Partitionkey"
        }
      },
      "title": "CurveDBMetadata",
      "type": "object"
    },
    "CurveDataEntityLink": {
      "description": "A link to a data column that provides one axis of a curve dataset.",
      "properties": {
        "id": {
          "description": "The data column ID.",
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        },
        "axis": {
          "anyOf": [
            {
              "$ref": "#/$defs/Axis"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Which axis this column represents (X or Y)."
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit of measure for this axis.",
          "title": "Unit"
        }
      },
      "required": [
        "id"
      ],
      "title": "CurveDataEntityLink",
      "type": "object"
    },
    "CustomData": {
      "description": "A property value stored directly on an inventory item, not from a task.\n\nReturned inside [`InventoryPropertyData`][albert.resources.property_data.InventoryPropertyData] under ``custom_property_data``.\nRepresents a value entered against an inventory item independently of any task\nmeasurement (for example a supplier-stated value), optionally tied to a lot.",
      "properties": {
        "Lot": {
          "anyOf": [
            {
              "$ref": "#/$defs/Lot"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "description": "The lot the value applies to, if any. Serialized as ``Lot``.",
          "title": "Lot"
        },
        "DataColumn": {
          "$ref": "#/$defs/CustomInventoryDataColumn",
          "description": "The data column and its stored value. Serialized as ``DataColumn``. See Also --------"
        }
      },
      "required": [
        "DataColumn"
      ],
      "title": "CustomData",
      "type": "object"
    },
    "CustomInventoryDataColumn": {
      "description": "A single custom (non-task) property value stored on an inventory item.",
      "properties": {
        "id": {
          "title": "Id",
          "type": "string"
        },
        "name": {
          "title": "Name",
          "type": "string"
        },
        "PropertyData": {
          "$ref": "#/$defs/PropertyValue"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "title": "Unit"
        }
      },
      "required": [
        "id",
        "name",
        "PropertyData"
      ],
      "title": "CustomInventoryDataColumn",
      "type": "object"
    },
    "DataColumn": {
      "description": "The definition of a single measured result variable in Albert.\n\nA Data Column (DAC) defines one direct output variable that a task can\nmeasure, such as ``Viscosity`` or ``APHA Color``. Data columns are the\nreusable building blocks of a Data Template's results: a\n[`DataTemplate`][albert.resources.data_templates.DataTemplate] references data columns\nthrough its ``data_column_values``, and the values recorded against a data\ncolumn during experiments are stored as Property Data.\n\nData columns are identified by a Data Column ID (format ``DAC...``, e.g.\n``\"DAC9999999\"``) and are managed through\n[`DataColumnCollection`][albert.collections.data_columns.DataColumnCollection], accessed as\n``client.data_columns``.\n\n!!! example\n    ```python\n    from albert import Albert\n    from albert.resources.data_columns import DataColumn\n    client = Albert()\n    column = DataColumn(name=\"Viscosity\")\n    created = client.data_columns.create(data_column=column)\n    created.id\n    # 'DAC9999999'\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The name of the data column (e.g. ``\"Viscosity\"``).",
          "title": "Name",
          "type": "string"
        },
        "default": {
          "type": "boolean",
          "default": false,
          "description": "Whether this is a default (platform-provided) data column.",
          "title": "Default"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom metadata keyed by field name. Values may be strings, numbers, or entity links.",
          "title": "Metadata"
        },
        "albertId": {
          "default": null,
          "description": "The Data Column ID assigned by Albert (format ``DAC...``). Populated by the server on creation; leave unset when building a column to create.",
          "title": "Albertid",
          "type": "string"
        }
      },
      "required": [
        "name"
      ],
      "title": "DataColumn",
      "type": "object"
    },
    "DataColumnValue": {
      "description": "A result data column on a Data Template.\n\nA ``DataColumnValue`` binds a [`DataColumn`][albert.resources.data_columns.DataColumn] to\na Data Template as one of the results the test captures (a \"direct variable\"). Data\ncolumns can be typed numeric, text, dropdown/enum, image, curve, date, or timestamp.\nOn a Data Template the ``value`` typically holds an example value shown on the\ndetails page rather than measured data; actual measurements are stored as Property\nData. When constructing one, provide either ``data_column`` or ``data_column_id``.\n\n!!! example\n    ```python\n    from albert.resources.data_templates import DataColumnValue\n\n    column = DataColumnValue(data_column_id=\"DAC9999999\", value=\"42\")\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "data_column": {
          "anyOf": [
            {
              "$ref": "#/$defs/DataColumn"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The full DataColumn resource this value binds to. Provide this or ``data_column_id``. Not serialized."
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the bound DataColumn (format ``DAC...``). Serialized as ``id``. Provide this or ``data_column``.",
          "title": "Id"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display name of the column.",
          "title": "Name"
        },
        "originalName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The original column name as stored in Albert. Read-only.",
          "title": "Originalname"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The column's example/default value shown on the Data Template details page.",
          "title": "Value"
        },
        "hidden": {
          "default": false,
          "description": "Whether the column is hidden. Defaults to False.",
          "title": "Hidden",
          "type": "boolean"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit of measure for the column.",
          "title": "Unit"
        },
        "calculation": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A calculation expression for a computed column.",
          "title": "Calculation"
        },
        "sequence": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The column's position within the template. Assigned by Albert.",
          "title": "Sequence"
        },
        "script": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Script"
        },
        "athena": {
          "anyOf": [
            {
              "$ref": "#/$defs/CurveDBMetadata"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "s3Key": {
          "anyOf": [
            {
              "$ref": "#/$defs/StorageKeyReference"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "job": {
          "anyOf": [
            {
              "$ref": "#/$defs/JobSummary"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "csvMapping": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "$ref": "#/$defs/CSVMapping"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Csvmapping"
        },
        "validation": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/ValueValidation"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Validation rules applied to the column value (e.g. enum options, numeric range).",
          "title": "Validation"
        },
        "CurveData": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/CurveDataEntityLink"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "For curve columns, the linked X/Y curve result columns.",
          "title": "Curvedata"
        }
      },
      "title": "DataColumnValue",
      "type": "object"
    },
    "DataInterval": {
      "description": "All trials recorded for one interval combination within a block.\n\nAn interval combination is one specific set of parameter setpoints, identified\nby an interval ID such as ``ROW1``, ``ROW1XROW2``, or the literal ``\"default\"``\nwhen the block has no intervalized parameters. Build the ID with\n[`get_interval_id`][albert.resources.workflows.Workflow.get_interval_id].",
      "properties": {
        "intervalCombination": {
          "description": "The interval ID this data belongs to (e.g. ``\"default\"``, ``\"ROW1\"``, ``\"ROW1XROW2\"``). Serialized as ``intervalCombination``.",
          "title": "Intervalcombination",
          "type": "string"
        },
        "void": {
          "default": false,
          "description": "Whether this interval's data has been voided.",
          "title": "Void",
          "type": "boolean"
        },
        "Trials": {
          "description": "The replicate measurements recorded for this interval. Serialized as ``Trials``.",
          "items": {
            "$ref": "#/$defs/Trial"
          },
          "title": "Trials",
          "type": "array"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "An optional display name for the interval. See Also --------",
          "title": "Name"
        }
      },
      "required": [
        "intervalCombination"
      ],
      "title": "DataInterval",
      "type": "object"
    },
    "DataTemplate": {
      "description": "A definition of what a test captures (a DAT).\n\nA ``DataTemplate`` (Data Template, ID format ``DAT...``) describes a test in two\nparts: its ``data_column_values`` are the measured RESULTS (the data columns, or\n\"direct variables\"), and its ``parameter_values`` are the CONDITIONS under which\nthe test is run (the \"indirect variables\"). A Data Template does not itself store\nmeasured values; those are recorded as Property Data. When the template is paired\nwith a Workflow inside a Block, only its parameters (not its result columns) flow\ninto the Workflow's setpoints.\n\nTemplates are managed through\n[`DataTemplateCollection`][albert.collections.data_templates.DataTemplateCollection]\n(``client.data_templates``).\n\n!!! example\n    ```python\n    from albert.resources.data_templates import DataTemplate, DataColumnValue\n\n    template = DataTemplate(\n        name=\"Tensile Strength Test\",\n        data_column_values=[DataColumnValue(data_column_id=\"DAC9999999\")],\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "Tags": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/Tag"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A list of Tag objects or strings representing tags.",
          "title": "Tags"
        },
        "name": {
          "description": "The name of the data template. Required.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert Data Template ID (format ``DAT...``). Set when the template is retrieved from or created in Albert. Serialized as ``albertId``.",
          "title": "Albertid"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A free-text description of the template.",
          "title": "Description"
        },
        "class": {
          "anyOf": [
            {
              "$ref": "#/$defs/SecurityClass"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The access/security class of the template. Serialized as ``class``."
        },
        "verified": {
          "default": false,
          "description": "The approval/governance state of the template. Defaults to False.",
          "title": "Verified",
          "type": "boolean"
        },
        "ACL": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/User"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The access-control list of users who can access the template. Serialized as ``ACL``.",
          "title": "Acl"
        },
        "DataColumns": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/DataColumnValue"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The measured results the test captures (its data columns / direct variables). See [`DataColumnValue`][albert.resources.data_templates.DataColumnValue].",
          "title": "Datacolumns"
        },
        "Parameters": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/ParameterValue"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The conditions under which the test is run (its indirect variables). See [`ParameterValue`][albert.resources.parameter_groups.ParameterValue].",
          "title": "Parameters"
        },
        "DeletedParameters": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/ParameterValue"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Deletedparameters"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom metadata fields. Allowed keys are defined by the workspace's CustomFields configuration.",
          "title": "Metadata"
        },
        "Documents": {
          "description": "Documents registered on the template. Read-only. Only populated by\n[`get_by_id`][albert.collections.data_templates.DataTemplateCollection.get_by_id]; empty\non templates from `get_by_ids`, `get_all`, and `search`. Scripts are not documents: they\nare attachments with category `Script`, found with\n[`get_by_parent_ids`][albert.collections.attachments.AttachmentCollection.get_by_parent_ids]\nusing the template ID as the parent.",
          "items": {
            "$ref": "#/$defs/EntityLink"
          },
          "title": "Documents",
          "type": "array"
        },
        "originalName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The original template name as stored in Albert. Read-only.",
          "title": "Originalname"
        },
        "fullName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The fully qualified template name. Read-only. See Also --------",
          "title": "Fullname"
        }
      },
      "required": [
        "name"
      ],
      "title": "DataTemplate",
      "type": "object"
    },
    "DataType": {
      "description": "The data type of a parameter value, driving how it is validated.\n\nUsed by [`ValueValidation`][albert.resources.parameter_groups.ValueValidation] to declare what kind of value a parameter\naccepts.\n\nAttributes\n----------\nNUMBER : str\n    A numeric value.\nSTRING : str\n    A free-text string value.\nENUM : str\n    A value restricted to a fixed set of options (see\n    [`EnumValidationValue`][albert.resources.parameter_groups.EnumValidationValue]).\nIMAGE : str\n    An image value.\nCURVE : str\n    A curve (series) value.\nDATE : str\n    A calendar date value stored as ``YYYY-MM-DD``.\nTIMESTAMP : str\n    A date-and-time value in ISO 8601 format with a UTC offset\n    (e.g. ``2026-05-21T14:32:00+02:00``).",
      "enum": [
        "number",
        "string",
        "enum",
        "image",
        "curve",
        "date",
        "timestamp"
      ],
      "title": "DataType",
      "type": "string"
    },
    "EntityLink": {
      "properties": {
        "id": {
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "required": [
        "id"
      ],
      "title": "EntityLink",
      "type": "object"
    },
    "EntityLinkWithName": {
      "description": "EntityLink that includes the name field in serialization.",
      "properties": {
        "id": {
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "required": [
        "id"
      ],
      "title": "EntityLinkWithName",
      "type": "object"
    },
    "EnumValidationValue": {
      "description": "Represents a value for an enum type validation.",
      "properties": {
        "text": {
          "description": "The text of the enum value.",
          "title": "Text",
          "type": "string"
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the enum value. If not provided, the ID will be generated upon creation.",
          "title": "Id"
        },
        "originalText": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Originaltext"
        }
      },
      "required": [
        "text"
      ],
      "title": "EnumValidationValue",
      "type": "object"
    },
    "Hazard": {
      "description": "A single GHS hazard classification associated with a CAS substance.\n\nHazards are read from the CAS record; a [`Cas`][albert.resources.cas.Cas] may carry a list of them.",
      "properties": {
        "subCategory": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard subcategory",
          "title": "Subcategory"
        },
        "hCode": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard code",
          "title": "Hcode"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard category",
          "title": "Category"
        },
        "class": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard classification",
          "title": "Class"
        },
        "hCodeText": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard code text",
          "title": "Hcodetext"
        }
      },
      "title": "Hazard",
      "type": "object"
    },
    "Interval": {
      "description": "One value that an intervalized parameter is varied across.\n\nWhen a parameter is \"intervalized\" (tested at several values rather than a single\nsetpoint), each of those values is represented by an [`Interval`][albert.resources.workflows.Interval]. A list of\nthem is placed on the parameter's [`ParameterSetpoint`][albert.resources.workflows.ParameterSetpoint] via its ``intervals``\nfield. The workflow then carries the resulting [`IntervalCombination`][albert.resources.workflows.IntervalCombination] entries,\none per interval (or per cartesian product of intervalized parameters).\n\n!!! example\n    ```python\n    from albert.resources.workflows import Interval\n\n    # A Normal parameter varied across two temperatures.\n    low = Interval(value=\"25\", unit={\"id\": \"UNI9999999\"})\n    high = Interval(value=\"60\", unit={\"id\": \"UNI9999999\"})\n    ```",
      "properties": {
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The value of this interval. For Normal parameters this is a scalar string (e.g. ``\"23\"``). For Special parameters (Equipment, Consumables, Templates) this may be an object with an ``id`` (and optional ``name``), matching [`ParameterSetpoint.value`][albert.resources.workflows.ParameterSetpoint.value]. Empty or hyphen intervals (represented as ``\"\"`` or ``None``) are permitted on the platform for optional parameters and exclusion matching. The sibling ``name`` field is independent and is not copied from an object value.",
          "title": "Value"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display name of the interval value. Populated for Special parameters (e.g. ``\"Pipette 0.01 -0.1 ml (10 - 100 \u03bcl)\"``). ``None`` for Normal parameters. Not auto-filled from an object ``value``.",
          "title": "Name"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit of ``value``, where applicable. If given, the unit must have an ``id``. See Also --------",
          "title": "Unit"
        },
        "rowId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Rowid"
        }
      },
      "title": "Interval",
      "type": "object"
    },
    "IntervalCombination": {
      "description": "One realized condition (interval combination) carried by a workflow.\n\nReturned by the workflow endpoint when at least one parameter in the workflow has\nbeen intervalized. A combination is a single intervalized parameter (interval ID\n``ROW#``) or the cartesian product of any number of intervalized parameters\n(``ROW#XROW#X...``). On tenants with increased intervals the id may also be a child\nworkflow id (``WFL...``) or a case-sensitive barcode. Its ``interval_id`` is what you\npass to the property_data endpoints to read or write results for that specific\ncondition.",
      "properties": {
        "interval": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The interval ID this combination is associated with. A ``ROW#`` chain of any length, a child workflow id (``WFL...``), a 9-character barcode, or ``\"default\"``. This is the same value [`get_interval_id`][albert.resources.workflows.Workflow.get_interval_id] returns for ROW-chain combinations.",
          "title": "Interval"
        },
        "intervalParams": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The parameters participating in the interval.",
          "title": "Intervalparams"
        },
        "intervalString": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A human-readable representation of the combination, of the form ``\"[Parameter Name]: [Parameter Value] [Parameter Unit]\"`` for each parameter.",
          "title": "Intervalstring"
        },
        "intervalDetails": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/IntervalDetail"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Per-parameter breakdown of the combination. Each entry has ``name`` (parameter name) and ``value`` (display string, e.g. ``\"C191778 || Pipette ...\"``). See Also --------",
          "title": "Intervaldetails"
        }
      },
      "title": "IntervalCombination",
      "type": "object"
    },
    "IntervalCombinationItem": {
      "description": "One child-workflow interval combination on a task block (\ud83e\uddea Beta).\n\nReturned by\n[`get_block_combinations`][albert.collections.tasks.TaskCollection.get_block_combinations].\nUse that method rather than any combinations array embedded on a task or block:\nthe embedded array is empty once the block has 500 or more combinations.\n\n!!! warning \"Beta Feature!\"\n    Increased intervals combination support is currently in beta and behind a platform\n    feature flag. Please do not use in production or without explicit guidance from\n    Albert. You might otherwise have a bad experience. This feature currently falls\n    outside of the Albert support contract, but we'd love your feedback!\n\n!!! example\n    ```python\n    from albert import Albert\n\n    client = Albert()\n    combo = next(\n        client.tasks.get_block_combinations(task_id=\"TASFOR1\", block_id=\"BLK1\", max_items=1)\n    )\n    combo.id\n    # 'WFL999'\n    combo.interval_barcode\n    # 'OhI8ap0HY'\n    ```",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The child workflow id for this combination (format ``WFL...``).",
          "title": "Id"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Display name of the combination (parameter names and values).",
          "title": "Name"
        },
        "intervalBarcode": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Case-sensitive barcode for the combination. Serialized as ``intervalBarcode``.",
          "title": "Intervalbarcode"
        },
        "intervalRowKey": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Legacy ROW-chain key (e.g. ``ROW3XROW7``). Serialized as ``intervalRowKey``.",
          "title": "Intervalrowkey"
        }
      },
      "title": "IntervalCombinationItem",
      "type": "object"
    },
    "IntervalDetail": {
      "description": "A single parameter's contribution to an interval combination.\n\nThis appears inside [`IntervalCombination`][albert.resources.workflows.IntervalCombination] (as its ``interval_details``) to\nbreak a combination down into the individual parameters that make it up. It is\nread from the workflow endpoint; you do not construct it directly.",
      "properties": {
        "name": {
          "description": "The parameter name (e.g. ``\"Equipment\"``).",
          "title": "Name",
          "type": "string"
        },
        "value": {
          "description": "The display value for this interval (e.g. ``\"C191778 || Pipette 0.01 -0.1 ml\"``). See Also --------",
          "title": "Value",
          "type": "string"
        }
      },
      "required": [
        "name",
        "value"
      ],
      "title": "IntervalDetail",
      "type": "object"
    },
    "InventoryCategory": {
      "description": "The kind of material an [`InventoryItem`][albert.resources.inventory.InventoryItem] represents.\n\nEvery inventory item belongs to exactly one category, which determines how it\nis used across the platform and which fields are relevant to it.\n\nAttributes\n----------\nRAW_MATERIALS : str\n    A purchased substance used as an ingredient (e.g. a solvent or pigment).\n    Typically linked to a manufacturing ``company`` and one or more CAS numbers.\nCONSUMABLES : str\n    Lab supplies consumed during work (e.g. gloves, vials, filters).\nEQUIPMENT : str\n    Instruments and apparatus (e.g. a balance or spectrometer).\nFORMULAS : str\n    A mixture designed in Albert under a Project. Creating a Formula item\n    requires ``project_id`` set to the parent Project's ID.",
      "enum": [
        "RawMaterials",
        "Consumables",
        "Equipment",
        "Formulas"
      ],
      "title": "InventoryCategory",
      "type": "string"
    },
    "InventoryDensity": {
      "description": "The density of an inventory item or lot measured by volume.\n\nDensity is expressed in grams per milliliter (g/mL) and locked at creation.\nWhen creating a volume-based item or lot, supply either a bare numeric value\n(float, int, or string) or an [`InventoryDensity`][albert.resources.inventory.InventoryDensity]\ninstance. Metadata fields (attribute ID, unit ID, unit name, locked flag)\nare populated by the server and are read-only.\n\n!!! example\n    ```python\n    from albert.resources.inventory import InventoryDensity\n\n    density = InventoryDensity(value=1.05)\n    ```",
      "properties": {
        "value": {
          "description": "The density value in g/mL.",
          "title": "Value",
          "type": "number"
        },
        "atrId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the density attribute definition. Read-only.",
          "title": "Atrid"
        },
        "unitId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the density measurement unit. Read-only.",
          "title": "Unitid"
        },
        "unitName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display name of the density measurement unit (e.g. ``g/mL``). Read-only.",
          "title": "Unitname"
        },
        "lockedAtCreation": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the density was locked when the parent entity was created. Read-only.",
          "title": "Lockedatcreation"
        }
      },
      "required": [
        "value"
      ],
      "title": "InventoryDensity",
      "type": "object"
    },
    "InventoryItem": {
      "description": "A catalog entry for a material tracked in Albert.\n\nAn ``InventoryItem`` is the canonical record for a raw material, consumable,\npiece of equipment, or formula. Its [`InventoryCategory`][albert.resources.inventory.InventoryCategory] determines how it\nis used across the platform, and once saved it is referenced everywhere by its\nInventory ID (format ``INV...``, e.g. ``\"INVA9999999\"``). Raw materials are typically\nlinked to a manufacturing ``company`` and a compositional breakdown of CAS\namounts. A Formula item represents a mixture designed in a Project; creating\none requires ``project_id`` set to the parent Project's ID.\n\nItems are managed through\n[`InventoryCollection`][albert.collections.inventory.InventoryCollection] (``client.inventory``).\n\n!!! example\n    ```python\n    from albert.resources.inventory import (\n        InventoryCategory,\n        InventoryDensity,\n        InventoryItem,\n        InventoryUnitCategory,\n    )\n\n    # Mass-based inventory item\n    item = InventoryItem(\n        name=\"Titanium Dioxide\",\n        category=InventoryCategory.RAW_MATERIALS,\n        company=\"Acme Chemicals\",\n    )\n\n    # Volume-based inventory item\n    volume_item = InventoryItem(\n        name=\"Isopropyl Alcohol\",\n        category=InventoryCategory.RAW_MATERIALS,\n        unit_category=InventoryUnitCategory.VOLUME,\n        density=InventoryDensity(value=0.785),\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "Tags": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/Tag"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A list of Tag objects or strings representing tags.",
          "title": "Tags"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The name of the item.",
          "title": "Name"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert Inventory ID (format ``INV...``). Set when the item is retrieved from or created in Albert. Serialized as ``albertId``.",
          "title": "Albertid"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A free-text description of the item.",
          "title": "Description"
        },
        "category": {
          "$ref": "#/$defs/InventoryCategory",
          "description": "The kind of material this item represents. Required. One of ``RawMaterials``, ``Consumables``, ``Equipment``, or ``Formulas``."
        },
        "unitCategory": {
          "anyOf": [
            {
              "$ref": "#/$defs/InventoryUnitCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The dimension the item is measured in (mass, volume, length, pressure, or units). If not supplied, it defaults from ``category``: mass for raw materials and formulas, units for equipment and consumables."
        },
        "density": {
          "anyOf": [
            {
              "$ref": "#/$defs/InventoryDensity"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The density in g/mL for volume-based inventory items. Required at creation when ``unit_category`` is volume. Locked at creation and cannot be changed."
        },
        "class": {
          "anyOf": [
            {
              "$ref": "#/$defs/SecurityClass"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The access/security class of the item (e.g. confidential, shared, restricted)."
        },
        "Company": {
          "anyOf": [
            {
              "$ref": "#/$defs/Company"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The manufacturing Company associated with the item (links to the Company collection). Accepts a [`Company`][albert.resources.companies.Company] or a name string; a string is turned into a Company that is first-or-created on save.",
          "title": "Company"
        },
        "minimum": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/InventoryMinimum"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Per-Location reorder thresholds for the item. See [`InventoryMinimum`][albert.resources.inventory.InventoryMinimum].",
          "title": "Minimum"
        },
        "alias": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "An alternate name for the item.",
          "title": "Alias"
        },
        "Cas": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/CasAmount"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The item's compositional breakdown as CAS amounts. See [`CasAmount`][albert.resources.inventory.CasAmount].",
          "title": "Cas"
        },
        "isFormulaOverride": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the substance/CAS-level breakdown for this formula has been overridden from the auto-calculated value; commonly set to indicate the formula is not a non-reactive homogeneous mixture.",
          "title": "Isformulaoverride"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom metadata fields. Allowed keys are defined by the workspace's CustomFields configuration.",
          "title": "Metadata"
        },
        "parentId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The parent Project ID. Required for Formulas. Serialized as ``parentId``.",
          "title": "Parentid"
        },
        "ACL": {
          "description": "Access-control entries governing who can act on the item.",
          "items": {
            "$ref": "#/$defs/ACL"
          },
          "title": "Acl",
          "type": "array"
        },
        "onHand": {
          "default": 0.0,
          "description": "Total amount currently on hand across all lots. Read-only.",
          "title": "Onhand",
          "type": "number"
        },
        "onHandL": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Total amount currently on hand across all lots in litres for volume-based items. Read-only.",
          "title": "Onhandl"
        },
        "TaskConfig": {
          "anyOf": [
            {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Task configuration associated with the item. Read-only.",
          "title": "Taskconfig"
        },
        "formulaId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The formula ID for a formula item. Read-only.",
          "title": "Formulaid"
        },
        "Symbols": {
          "anyOf": [
            {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard/pictogram symbols associated with the item. Read-only.",
          "title": "Symbols"
        },
        "unNumber": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The UN hazardous-material number, when applicable. Read-only.",
          "title": "Unnumber"
        },
        "recentAttachmentId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the most recent attachment on the item. Read-only. See Also --------",
          "title": "Recentattachmentid"
        }
      },
      "required": [
        "category"
      ],
      "title": "InventoryItem",
      "type": "object"
    },
    "InventoryMinimum": {
      "description": "A reorder threshold: the minimum stock of an [`InventoryItem`][albert.resources.inventory.InventoryItem] to keep at a Location.\n\nEach entry pairs one Location with the minimum quantity of an item that must be\nkept on hand there. An [`InventoryItem`][albert.resources.inventory.InventoryItem] may carry several of these, one per\nLocation. Identify the Location either by passing a full\n[`Location`][albert.resources.locations.Location] object as ``location`` (its ``id`` is\nthen copied onto ``id``), or by passing the location ``id`` string directly. Provide\none or the other, not both.\n\n!!! example\n    ```python\n    from albert.resources.inventory import InventoryMinimum\n\n    minimum = InventoryMinimum(id=\"LOC9999999\", minimum=500)\n    ```",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the Location this minimum applies to. Provide either a ``location`` or an ``id``; when ``location`` is given, this is set from it.",
          "title": "Id"
        },
        "location": {
          "anyOf": [
            {
              "$ref": "#/$defs/Location"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Location object this minimum applies to. Excluded from serialization. Provide either a ``location`` or an ``id``."
        },
        "minimum": {
          "description": "The minimum amount of the item that must be kept in stock at the Location. Must be between 0 and 1e15. See Also --------",
          "maximum": 1000000000000000,
          "minimum": 0,
          "title": "Minimum",
          "type": "number"
        }
      },
      "required": [
        "minimum"
      ],
      "title": "InventoryMinimum",
      "type": "object"
    },
    "InventoryUnitCategory": {
      "description": "The dimension of the unit an [`InventoryItem`][albert.resources.inventory.InventoryItem] is measured and stocked in.\n\nDetermines how quantities on hand and in formulas are interpreted. When not\nsupplied, the category defaults based on [`InventoryCategory`][albert.resources.inventory.InventoryCategory]: ``MASS``\nfor raw materials and formulas, ``UNITS`` for equipment and consumables.\n\nAttributes\n----------\nMASS : str\n    Measured by mass (e.g. grams, kilograms).\nVOLUME : str\n    Measured by volume (e.g. milliliters, liters). Supported for RawMaterials\n    and Consumables; requires ``density`` at creation.\nLENGTH : str\n    Measured by length (e.g. meters).\nPRESSURE : str\n    Measured by pressure.\nUNITS : str\n    Counted as discrete units (e.g. each item).",
      "enum": [
        "mass",
        "volume",
        "length",
        "pressure",
        "units"
      ],
      "title": "InventoryUnitCategory",
      "type": "string"
    },
    "JobSummary": {
      "description": "A brief summary of a background processing job.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The job identifier.",
          "title": "Id"
        },
        "state": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The current state of the job.",
          "title": "State"
        }
      },
      "title": "JobSummary",
      "type": "object"
    },
    "ListItem": {
      "description": "A single allowed value in a configurable list of options.\n\nList items back the choices offered by ``list``-type custom fields (e.g.\ndropdown options) and other fixed option sets in Albert. A\n[`CustomField`][albert.resources.custom_fields.CustomField] with\n[`LIST`][albert.resources.custom_fields.FieldType.LIST] defines a list (keyed\nby ``list_type``, typically the field's name); its selectable options are\n``ListItem`` records with a matching ``list_type``. Managed through\n[`ListsCollection`][albert.collections.lists.ListsCollection] (``client.lists``).\n\n!!! example\n    ```python\n    from albert.resources.lists import ListItem, ListItemCategory\n    item = ListItem(name=\"In Progress\", category=ListItemCategory.USER_DEFINED)\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The display name of the list item (the option value).",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the list item. Set when the item is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/ListItemCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The category of the list item. Allowed values are ``businessDefined``, ``userDefined``, ``projects``, ``extensions``, and ``inventory``."
        },
        "listType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The list this item belongs to. For a list-type custom field this is typically the field's name (see [`CustomField`][albert.resources.custom_fields.CustomField]). For built-in categories the allowed values are ``projectState`` for ``projects``, ``extensions`` for ``extensions``, and ``casCategory`` or ``inventoryFunction`` for ``inventory``.",
          "title": "Listtype"
        }
      },
      "required": [
        "name"
      ],
      "title": "ListItem",
      "type": "object"
    },
    "ListItemCategory": {
      "description": "The category a list item belongs to, which governs its allowed list types.\n\nAttributes\n----------\nBUSINESS_DEFINED : str\n    Predefined values managed at the business/organization level.\nUSER_DEFINED : str\n    Custom values defined by users.\nPROJECTS : str\n    Values used by projects (e.g. project states).\nEXTENSIONS : str\n    Values used by extensions.\nINVENTORY : str\n    Values used by inventory (e.g. CAS categories or inventory functions).",
      "enum": [
        "businessDefined",
        "userDefined",
        "projects",
        "extensions",
        "inventory"
      ],
      "title": "ListItemCategory",
      "type": "string"
    },
    "Location": {
      "description": "A physical lab or site location in Albert.\n\nLocations are referenced by Tasks and Inventory Items to record where an\nactivity is performed or where a material lives, and each Location can hold\none or more Storage Locations\n([`StorageLocation`][albert.resources.storage_locations.StorageLocation]). Managed\nthrough [`LocationCollection`][albert.collections.locations.LocationCollection].\n\n!!! example\n    ```python\n    from albert.resources.locations import Location\n    location = Location(\n        name=\"Boston Lab\",\n        latitude=42.3601,\n        longitude=-71.0589,\n        address=\"1 Main St\",\n        country=\"US\",\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The human-readable name of the location.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the location. Assigned by Albert and populated once the location has been created or retrieved.",
          "title": "Albertid"
        },
        "latitude": {
          "description": "The latitude of the location, in decimal degrees.",
          "title": "Latitude",
          "type": "number"
        },
        "longitude": {
          "description": "The longitude of the location, in decimal degrees.",
          "title": "Longitude",
          "type": "number"
        },
        "address": {
          "description": "The street address of the location.",
          "title": "Address",
          "type": "string"
        },
        "country": {
          "anyOf": [
            {
              "maxLength": 2,
              "minLength": 2,
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The two-letter country code of the location (for example, ``\"US\"``).",
          "title": "Country"
        }
      },
      "required": [
        "name",
        "latitude",
        "longitude",
        "address"
      ],
      "title": "Location",
      "type": "object"
    },
    "Lot": {
      "description": "A specific physical batch or quantity of an Inventory Item.\n\nA Lot represents one received shipment or produced amount of a parent\nInventory Item (identified by ``inventory_id``), tracking batch-specific\ndetails such as how much is currently on hand, where it is stored, its cost,\nand who owns it. Lots are managed through the Lot collection\n([`LotCollection`][albert.collections.lots.LotCollection], accessed as\n``client.lots``); their parent items live in the Inventory collection\n([`InventoryCollection`][albert.collections.inventory.InventoryCollection]). A ``lot_id``\nis used throughout property data to scope results to a single batch.\n\nA lot's own ID has the format ``LOT...``; its parent ``inventory_id`` has the\nformat ``INV...``.\n\n!!! example\n    ```python\n    from albert import Albert\n    from albert.core.shared.models.base import EntityLink\n    from albert.resources.lots import Lot, LotVolumeUnit\n\n    client = Albert()\n\n    # Regular mass-based lot\n    lot = Lot(\n        inventory_id=\"INVA9999999\",\n        storage_location=EntityLink(id=\"STL9999999\"),\n        initial_quantity=10.0,\n        inventory_on_hand=10.0,\n        cost=50.0,\n        manufacturer_lot_number=\"MLN-001\",\n    )\n    created = client.lots.create(lots=[lot])\n\n    # Volume-based lot\n    volume_lot = Lot(\n        inventory_id=\"INVA8888888\",\n        storage_location=EntityLink(id=\"STL9999999\"),\n        initial_quantity=100.0,\n        inventory_on_hand=100.0,\n        initial_quantity_l=127.39,\n        entry_unit=LotVolumeUnit.LITER,\n        cost=80.0,\n        cost_l=62.8,\n        manufacturer_lot_number=\"MLN-002\",\n    )\n    created_volume = client.lots.create(lots=[volume_lot])\n    ```\n\nNotes\n-----\nFields required when creating a lot via\n[`create`][albert.collections.lots.LotCollection.create] depend on the path:\n\n- **Regular lot** (no ``task_id``): ``inventory_id``, ``storage_location``,\n  ``initial_quantity``, and ``inventory_on_hand`` (usually the same value as\n  ``initial_quantity``). When the parent Inventory Item is ``RawMaterials``,\n  ``cost`` and ``manufacturer_lot_number`` are also required.\n- **Task lot** (``task_id`` set, batch / ``Formulas`` path): ``inventory_id``\n  and ``location`` (not ``storage_location``).\n- **Volume lot** (parent item has ``unit_category=\"volume\"``): caller must\n  still provide mass ``initial_quantity`` and ``inventory_on_hand``;\n  ``initial_quantity_l``, ``entry_unit``, ``cost_l``, and ``density`` are\n  optional extensions. Neither the SDK nor the server converts between mass\n  and volume units; callers must ensure mass equals volume multiplied by density.",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/LotStatus"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The lot's lifecycle status. Read-only."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "action": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Internal marker for the operation that produced the lot (e.g. a split). Not typically set by callers.",
          "title": "Action"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The lot's Albert ID (format ``LOT...``). Assigned by Albert; present on lots retrieved from the platform.",
          "title": "Albertid"
        },
        "parentId": {
          "description": "The Albert ID of the parent Inventory Item this lot is a batch of.\n\nRequired when creating a lot.",
          "title": "Parentid",
          "type": "string"
        },
        "taskId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the Task that produced this lot, if it came from one.\n\nWhen set, creation follows the task / batch (``Formulas``) path: provide\n``location`` instead of ``storage_location``.",
          "title": "Taskid"
        },
        "workflowId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the workflow associated with this lot (format ``WFL...``).\n\nIgnored when creating a lot. Can be set via\n[`update`][albert.collections.lots.LotCollection.update].",
          "title": "Workflowid"
        },
        "Workflows": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/LotWorkflowLink"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Workflow associations for this lot. Read-only; use ``workflow_id``.",
          "title": "Workflows"
        },
        "expirationDate": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The date the lot expires, in ``YYYY-MM-DD`` format.",
          "title": "Expirationdate"
        },
        "manufacturerLotNumber": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The manufacturer's own lot number for this batch.\n\nRequired when creating a lot whose parent Inventory Item is ``RawMaterials``\n(and ``task_id`` is not set). Optional on read and update.",
          "title": "Manufacturerlotnumber"
        },
        "StorageLocation": {
          "anyOf": [
            {
              "$ref": "#/$defs/StorageLocation"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The specific place within a location where the lot is stored (e.g. a bin, cabinet, or hood).\n\nWhen creating or updating, pass an [`EntityLink`][albert.core.shared.models.base.EntityLink]\nwith the storage location ID (format ``STL...``), or a fully populated\n[`StorageLocation`][albert.resources.storage_locations.StorageLocation].\nDo not construct ``StorageLocation`` with only ``id``/``name``; ``location`` is required\non that model.",
          "title": "Storagelocation"
        },
        "packSize": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The pack size of the lot, used to calculate cost per unit.",
          "title": "Packsize"
        },
        "initialQuantity": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The quantity the lot started with, in the parent item's units.\n\nFor mass items (``parent_unit=\"mass\"``) this is in **kilograms**: 10 kg is\n``10`` and 500 g is ``0.5``. Required when creating a non-task lot (no\n``task_id``).",
          "title": "Initialquantity"
        },
        "cost": {
          "anyOf": [
            {
              "minimum": 0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The cost of the lot.\n\nRequired when creating a lot whose parent Inventory Item is ``RawMaterials``\n(and ``task_id`` is not set). Optional on read and update.",
          "title": "Cost"
        },
        "inventoryOnHand": {
          "description": "The quantity currently in stock, in the parent item's units.\n\nFor mass items (``parent_unit=\"mass\"``) this is in **kilograms** (10 kg is\n``10``, not ``10000``). Required when creating a non-task lot; set to the\nstarting stock (usually the same value as ``initial_quantity``). After creation, change it with\n[`adjust`][albert.collections.lots.LotCollection.adjust] rather than by\nediting directly.",
          "title": "Inventoryonhand",
          "type": "number"
        },
        "initialQuantityL": {
          "anyOf": [
            {
              "minimum": 0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The initial quantity in litres for a volume-based lot.\n\nOptional. Only honoured when the parent inventory item has ``unit_category=\"volume\"``.\nNo conversion is performed by the SDK or server; the value must already be in litres.\nMass ``initial_quantity`` and ``inventory_on_hand`` are still required.",
          "title": "Initialquantityl"
        },
        "entryUnit": {
          "anyOf": [
            {
              "$ref": "#/$defs/LotVolumeUnit"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit in which quantity was entered at creation (mL, L, or Gal).\n\nLabel only; neither the SDK nor the server converts values based on this field."
        },
        "entryCostUnit": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit in which cost was entered at creation (e.g. ``\"$/L\"``, ``\"$/Gal\"``).\n\nLabel only; neither the SDK nor the server converts values based on this field.",
          "title": "Entrycostunit"
        },
        "costL": {
          "anyOf": [
            {
              "minimum": 0,
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The volume-primary cost in $/L for a volume-based lot.\n\nOptional. Only honoured when the parent inventory item has ``unit_category=\"volume\"``.\nNo conversion is performed by the SDK or server; the value must already be in $/L.\nMass ``cost`` ($/kg) is still required.",
          "title": "Costl"
        },
        "density": {
          "anyOf": [
            {
              "$ref": "#/$defs/InventoryDensity"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The density in g/mL for this lot.\n\nOptional. When omitted, falls back to the parent inventory item's density.\nFixed at creation and cannot be changed afterward."
        },
        "Owner": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/User"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The user(s) who own the lot. A lot may have at most one owner.",
          "title": "Owner"
        },
        "lotNumber": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The lot's number within Albert.",
          "title": "Lotnumber"
        },
        "externalBarcodeId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "An external barcode ID for the lot.",
          "title": "Externalbarcodeid"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom field values for the lot. Allowed keys and values are defined by the Custom Fields configuration.",
          "title": "Metadata"
        },
        "notes": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Free-text notes on the lot.\n\nNot saved when creating a lot; manage lot notes through the Notes collection\n([`NotesCollection`][albert.collections.notes.NotesCollection], accessed as\n``client.notes``).",
          "title": "Notes"
        },
        "Location": {
          "anyOf": [
            {
              "$ref": "#/$defs/Location"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The site/campus the lot is at (may contain multiple buildings, each with many storage locations).\n\nRequired when creating a task lot (``task_id`` set). Read-only on lots returned\nfrom GET; use ``storage_location`` for regular (non-task) lot creation.",
          "title": "Location"
        },
        "hasNotes": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the lot has notes. Read-only.",
          "title": "Hasnotes"
        },
        "hasAttachments": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the lot has attachments. Read-only.",
          "title": "Hasattachments"
        },
        "parentName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The name of the parent Inventory Item. Read-only.",
          "title": "Parentname"
        },
        "parentUnit": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit of measure of the parent Inventory Item. Read-only.",
          "title": "Parentunit"
        },
        "parentIdCategory": {
          "anyOf": [
            {
              "$ref": "#/$defs/InventoryCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The category of the parent Inventory Item (e.g. ``RawMaterials``). Read-only."
        },
        "barcodeId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The barcode ID assigned by Albert. Read-only.",
          "title": "Barcodeid"
        },
        "taskCompletionDate": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The completion date of the Task that produced the lot. Read-only.",
          "title": "Taskcompletiondate"
        },
        "inventoryOnHandL": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The quantity currently in stock in litres for volume-based lots. Read-only.",
          "title": "Inventoryonhandl"
        },
        "supportsLGalToggle": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the UI offers an L / Gal display toggle. Read-only.",
          "title": "Supportslgaltoggle"
        }
      },
      "required": [
        "parentId",
        "inventoryOnHand"
      ],
      "title": "Lot",
      "type": "object"
    },
    "LotStatus": {
      "description": "The lifecycle status of a lot.\n\nAttributes\n----------\nACTIVE\n    The lot is in normal use.\nINACTIVE\n    The lot is no longer in use.\nQUARANTINED\n    The lot is held back from use (e.g. pending inspection).",
      "enum": [
        "active",
        "inactive",
        "quarantined"
      ],
      "title": "LotStatus",
      "type": "string"
    },
    "LotVolumeUnit": {
      "description": "The volume unit used when entering lot quantities.\n\nAttributes\n----------\nMILLILITER\n    Milliliters (mL).\nLITER\n    Liters (L).\nGALLON\n    Gallons (Gal).",
      "enum": [
        "mL",
        "L",
        "Gal"
      ],
      "title": "LotVolumeUnit",
      "type": "string"
    },
    "LotWorkflowLink": {
      "description": "A workflow associated with a lot.",
      "properties": {
        "id": {
          "description": "The workflow ID (format ``WFL...``).",
          "title": "Id",
          "type": "string"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Workflow category (e.g. ``FINAL``).",
          "title": "Category"
        }
      },
      "required": [
        "id"
      ],
      "title": "LotWorkflowLink",
      "type": "object"
    },
    "Operator": {
      "description": "A comparison operator constraining a numeric parameter value.\n\nUsed by [`ValueValidation`][albert.resources.parameter_groups.ValueValidation] to bound acceptable values. ``between``\ntakes ``min`` and ``max``; every single-bound operator takes ``value`` (e.g. ``gte``\nwith ``value=\"0\"`` requires the value to be at least 0).\n\nAttributes\n----------\nBETWEEN : str\n    Value must fall between ``min`` and ``max`` (inclusive).\nLESS_THAN : str\n    Value must be less than ``value``.\nLESS_THAN_OR_EQUAL : str\n    Value must be less than or equal to ``value``.\nGREATER_THAN_OR_EQUAL : str\n    Value must be greater than or equal to ``value``.\nGREATER_THAN : str\n    Value must be greater than ``value``.\nEQUALS : str\n    Value must equal ``value``.\nNOT_EQUALS : str\n    Not accepted by the API for parameter validations.",
      "enum": [
        "between",
        "lt",
        "lte",
        "gte",
        "gt",
        "eq",
        "neq"
      ],
      "title": "Operator",
      "type": "string"
    },
    "PGType": {
      "description": "The kind of task a [`ParameterGroup`][albert.resources.parameter_groups.ParameterGroup] relates to.\n\nA Parameter Group is about making a sample and/or prepping it for measurement,\nand its type records which sort of task it is used in.\n\nAttributes\n----------\nGENERAL : str\n    A group used in a general lab task (anything that is not a batch or\n    property task).\nBATCH : str\n    A group used in a Batch Task ([`BatchTask`][albert.resources.tasks.BatchTask]),\n    e.g. a mixing step when manufacturing a batch.\nPROPERTY : str\n    A group used in a property (measurement) task to prep a sample for testing.",
      "enum": [
        "general",
        "batch",
        "property"
      ],
      "title": "PGType",
      "type": "string"
    },
    "Parameter": {
      "description": "The definition of a single experimental condition or input variable.\n\nA Parameter (ID format ``PRM...``) names an \"indirect variable\" such as\nTemperature, Spin Speed, or Instrument. The Parameter itself only defines the\nvariable; its actual value and unit are fixed to a setpoint later, inside a\n[`Workflow`][albert.resources.workflows.Workflow]. Parameters are the building\nblocks of Parameter Groups\n([`ParameterGroup`][albert.resources.parameter_groups.ParameterGroup]) and form the\nparameter side of Data Templates\n([`DataTemplate`][albert.resources.data_templates.DataTemplate]).\n\nManage parameters through\n[`ParameterCollection`][albert.collections.parameters.ParameterCollection]\n(``client.parameters``).\n\n!!! example\n    ```python\n    from albert import Albert\n    from albert.resources.parameters import Parameter\n    client = Albert()\n    param = client.parameters.create(parameter=Parameter(name=\"Temperature\"))\n    param.id\n    # 'PRM9999999'\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The name of the parameter. Names must be unique.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the parameter (format ``PRM...``). Set when the parameter is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional user-defined metadata keyed by field name.",
          "title": "Metadata"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/ParameterCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the parameter is ``Normal`` (scalar value) or ``Special`` (entity reference). Set by the platform and read-only."
        },
        "rank": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The rank of the returned parameter. Read-only.",
          "title": "Rank"
        },
        "required": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether this parameter must be filled in within a Parameter Group.",
          "title": "Required"
        }
      },
      "required": [
        "name"
      ],
      "title": "Parameter",
      "type": "object"
    },
    "ParameterCategory": {
      "description": "Whether a [`Parameter`][albert.resources.parameters.Parameter]'s value is a plain scalar or an entity reference.\n\nSet by the platform and read-only. It determines how a parameter's value is\ninterpreted when a setpoint is assigned to it inside a\n[`Workflow`][albert.resources.workflows.Workflow].\n\nAttributes\n----------\nNORMAL : str\n    A \"normal\" parameter whose value is a plain scalar (e.g. a number or text),\n    such as Temperature or Spin Speed.\nSPECIAL : str\n    A \"special\" parameter whose value references another entity (e.g. Equipment,\n    a Consumable, or a Template). The setpoint value is that entity's ID rather\n    than a plain scalar.",
      "enum": [
        "Normal",
        "Special"
      ],
      "title": "ParameterCategory",
      "type": "string"
    },
    "ParameterGroup": {
      "description": "A reusable set of parameters (PRG) for making or prepping a sample.\n\nA Parameter Group bundles [`Parameter`][albert.resources.parameters.Parameter]\nentities, along with their values, units, and validation rules, into a reusable\nunit. Whereas a Data Template's parameters relate to a given measurement, a\nParameter Group is about *making* the sample and/or *prepping* it for\nmeasurement (e.g. a mixing step or a cure schedule). Some groups drive Batch\nTasks ([`BatchTask`][albert.resources.tasks.BatchTask]); others are stacked within a\ntask. A group's parameters, together with a Data Template's parameters, are\nfixed to setpoints inside a [`Workflow`][albert.resources.workflows.Workflow].\n\nOnce saved, a group is referenced by its Parameter Group ID (format ``PRG...``,\ne.g. ``\"PRG9999999\"``). Store test standards (e.g. ASTM or ISO) under the\n``\"Standards\"`` key of ``metadata``.\n\nGroups are managed through\n[`ParameterGroupCollection`][albert.collections.parameter_groups.ParameterGroupCollection]\n(``client.parameter_groups``).\n\n!!! example\n    ```python\n    from albert.resources.parameter_groups import (\n        ParameterGroup,\n        ParameterValue,\n        PGType,\n    )\n\n    pg = ParameterGroup(\n        name=\"Mixing Step\",\n        type=PGType.BATCH,\n        parameters=[ParameterValue(id=\"PRM9999999\", value=\"500\")],\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "Tags": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/Tag"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A list of Tag objects or strings representing tags.",
          "title": "Tags"
        },
        "name": {
          "description": "The name of the parameter group. Required.",
          "title": "Name",
          "type": "string"
        },
        "type": {
          "anyOf": [
            {
              "$ref": "#/$defs/PGType"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The kind of task the group relates to (``general``, ``batch``, or ``property``)."
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert Parameter Group ID (format ``PRG...``). Set when the group is retrieved from or created in Albert. Serialized as ``albertId``.",
          "title": "Albertid"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A free-text description of the group.",
          "title": "Description"
        },
        "class": {
          "$ref": "#/$defs/SecurityClass",
          "default": "restricted",
          "description": "The access/security class of the group. Defaults to ``RESTRICTED``. Serialized as ``class``."
        },
        "ACL": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/User"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Access-control entries governing who can act on the group. Serialized as ``ACL``.",
          "title": "Acl"
        },
        "Metadata": {
          "additionalProperties": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "integer"
              },
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/EntityLinkWithName"
              },
              {
                "$ref": "#/$defs/EntityLink"
              },
              {
                "items": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/EntityLinkWithName"
                    },
                    {
                      "$ref": "#/$defs/EntityLink"
                    }
                  ]
                },
                "type": "array"
              }
            ]
          },
          "description": "Custom metadata fields. Test standards are stored under the ``\"Standards\"`` key. Serialized as ``Metadata``.",
          "title": "Metadata",
          "type": "object"
        },
        "Parameters": {
          "description": "The parameters in the group, each with its value, unit, and validation. See [`ParameterValue`][albert.resources.parameter_groups.ParameterValue]. Serialized as ``Parameters``.",
          "items": {
            "$ref": "#/$defs/ParameterValue"
          },
          "title": "Parameters",
          "type": "array"
        },
        "verified": {
          "default": false,
          "description": "Whether the group has been verified (an approval/governance state). Read-only.",
          "title": "Verified",
          "type": "boolean"
        },
        "Documents": {
          "description": "Documents (e.g. SOPs) associated with the group. Read-only. Deserialized from ``Documents``.",
          "items": {
            "$ref": "#/$defs/EntityLink"
          },
          "title": "Documents",
          "type": "array"
        }
      },
      "required": [
        "name"
      ],
      "title": "ParameterGroup",
      "type": "object"
    },
    "ParameterGroupSetpoints": {
      "description": "All parameter setpoints belonging to one Data Template or Parameter Group.\n\nA workflow is organized by group: each [`ParameterGroupSetpoints`][albert.resources.workflows.ParameterGroupSetpoints] names one\nData Template or Parameter Group (by ``id`` or by a full ``parameter_group`` object)\nand carries the [`ParameterSetpoint`][albert.resources.workflows.ParameterSetpoint] list for the parameters in it. A\n[`Workflow`][albert.resources.workflows.Workflow] holds one of these per group. Both the order of setpoints within a\ngroup and the order of groups within the workflow are part of what makes a workflow\nunique, so preserve the order you intend. Group ``sequence`` is read-only; list order\nalone defines group ordering when creating workflows. Setpoint ``sequence`` is also\nread-only (see [`ParameterSetpoint`][albert.resources.workflows.ParameterSetpoint]).\n\n!!! example\n    ```python\n    from albert.resources.workflows import (\n        ParameterGroupSetpoints,\n        ParameterSetpoint,\n    )\n\n    group = ParameterGroupSetpoints(\n        id=\"PRG9999999\",\n        parameter_setpoints=[\n            ParameterSetpoint(parameter_id=\"PRM9999999\", value=\"25\"),\n        ],\n    )\n    ```",
      "properties": {
        "parameter_group": {
          "anyOf": [
            {
              "$ref": "#/$defs/ParameterGroup"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The parameter group to set setpoints on. Provide either ``parameter_group`` or ``id``. If both are given they must refer to the same group."
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the parameter group (``PRG...``) or Data Template (``DAT...``). Provide either ``id`` or ``parameter_group``. Auto-filled from ``parameter_group`` when one is provided.",
          "title": "Id"
        },
        "name": {
          "default": "Pre-linked Parameters",
          "description": "Read-only display name of the group (defaults to ``\"Pre-linked Parameters\"``).",
          "title": "Name",
          "type": "string"
        },
        "Parameters": {
          "description": "The setpoints to apply to this group's parameters.",
          "items": {
            "$ref": "#/$defs/ParameterSetpoint"
          },
          "title": "Parameters",
          "type": "array"
        },
        "rowId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Read-only. The group's interval row ID.",
          "title": "Rowid"
        },
        "prgSequence": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Read-only. Order of this group within the workflow. Assigned from list order when creating workflows; do not set.",
          "title": "Prgsequence"
        }
      },
      "title": "ParameterGroupSetpoints",
      "type": "object"
    },
    "ParameterSetpoint": {
      "description": "The fixed value (or set of interval values) for one parameter within a workflow.\n\nA setpoint pins a single parameter to a condition. Provide either a single ``value``\n(plus ``unit`` where applicable) for a fixed setpoint, or a list of ``intervals`` to\nintervalize the parameter across several values. You must identify the parameter by\npassing either a full ``parameter`` object or its ``parameter_id``. Setpoints are\ngrouped under a [`ParameterGroupSetpoints`][albert.resources.workflows.ParameterGroupSetpoints], which is in turn placed on a\n[`Workflow`][albert.resources.workflows.Workflow].\n\nNormal parameters take exactly one of ``value`` or ``intervals``. Special parameters\n(Equipment, Consumables, Templates) take an entity ID as their value.\n\n``sequence`` is read-only: do not set it when building a workflow for\n[`create`][albert.collections.workflows.WorkflowCollection.create]. Provide the parent\ngroup's ``id`` (``PRG...`` or ``DAT...``) on\n[`ParameterGroupSetpoints`][albert.resources.workflows.ParameterGroupSetpoints]; the SDK\nresolves each setpoint's row id from that group before create.\n\n!!! example\n    ```python\n    from albert.resources.parameters import ParameterCategory\n    from albert.resources.workflows import ParameterSetpoint, Interval\n\n    # A single fixed setpoint identified by parameter ID.\n    temp = ParameterSetpoint(parameter_id=\"PRM9999999\", value=\"25\")\n\n    # The same parameter intervalized across two values.\n    temp_varied = ParameterSetpoint(\n        parameter_id=\"PRM9999999\",\n        intervals=[\n            Interval(value=\"25\", unit={\"id\": \"UNI9999999\"}),\n            Interval(value=\"60\", unit={\"id\": \"UNI9999999\"}),\n        ],\n    )\n\n    # A Special parameter (an inventory item) takes the item's id as its value;\n    # short_name is only sent for Special parameters.\n    equipment = ParameterSetpoint(\n        parameter_id=\"PRM3\",\n        category=ParameterCategory.SPECIAL,\n        value={\"id\": \"INV9999999\"},\n        short_name=\"Oven\",\n    )\n    ```",
      "properties": {
        "parameter": {
          "anyOf": [
            {
              "$ref": "#/$defs/Parameter"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The parameter to set. Provide either ``parameter`` or ``parameter_id``. If both are given they must refer to the same parameter."
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The value of the setpoint. For a Special parameter (an inventory item), provide the item's [`EntityLink`][albert.core.shared.models.base.EntityLink] (or a mapping with an ``id``). Mutually exclusive with ``intervals`` for Normal parameters.",
          "title": "Value"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit of ``value``, where applicable.",
          "title": "Unit"
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the parameter (e.g. ``\"PRM9999999\"``). Provide either ``parameter`` or ``parameter_id``.",
          "title": "Id"
        },
        "Intervals": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/Interval"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The interval values when the parameter is intervalized. Provide either ``intervals`` or ``value`` (plus ``unit``), not both.",
          "title": "Intervals"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/ParameterCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The category of the parameter: ``SPECIAL`` for an inventory item (Equipment, Consumable, Template), ``NORMAL`` for everything else."
        },
        "shortName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The short / display name of the parameter. Only sent on create for ``SPECIAL``-category parameters; the platform rejects ``shortName`` on Normal parameters, so the SDK drops it there.",
          "title": "Shortname"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The parameter name. Auto-filled from ``parameter`` when one is provided.",
          "title": "Name"
        },
        "rowId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Read-only. The row ID of this parameter with respect to its interval row.",
          "title": "Rowid"
        },
        "prgPrmRowId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Read-only. Maps this setpoint to its row in the parent Data Template or Parameter Group. Populated by the SDK during [`create`][albert.collections.workflows.WorkflowCollection.create]; do not set when building workflows.",
          "title": "Prgprmrowid"
        }
      },
      "title": "ParameterSetpoint",
      "type": "object"
    },
    "ParameterValue": {
      "description": "A single [`Parameter`][albert.resources.parameters.Parameter] and its value within a [`ParameterGroup`][albert.resources.parameter_groups.ParameterGroup].\n\nA ``ParameterValue`` binds one Parameter to the value, unit, and validation\nrules it takes inside a group. Each entry must reference an existing Parameter,\nso provide exactly one of ``id`` (the Parameter's Albert ID) or ``parameter``\n(the [`Parameter`][albert.resources.parameters.Parameter] object itself); when a\n``parameter`` is given, the ``id``, ``category``, and ``name`` are populated\nfrom it. Values are later fixed to setpoints inside a\n[`Workflow`][albert.resources.workflows.Workflow].\n\n!!! example\n    ```python\n    from albert.resources.parameter_groups import ParameterValue\n\n    # Reference the parameter by its Albert ID\n    value = ParameterValue(id=\"PRM9999999\", value=\"500\")\n    ```",
      "properties": {
        "parameter": {
          "anyOf": [
            {
              "$ref": "#/$defs/Parameter"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Parameter this value is associated with. Provide either ``id`` or ``parameter``. Excluded from serialization."
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the associated Parameter. Provide either ``id`` or ``parameter``.",
          "title": "Id"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/ParameterCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The category of the parameter (``Normal`` or ``Special``). Populated from ``parameter`` when one is provided. When only ``id`` is given, the parameter-group create API rejects the payload (``400 \"Category mismatch ... Category undefined expected\"``), so set ``category`` explicitly (``ParameterCategory.NORMAL`` for ordinary parameters) or pass the full ``parameter`` object."
        },
        "specialType": {
          "anyOf": [
            {
              "$ref": "#/$defs/SpecialParameterType"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The specific entity type for a ``Special`` parameter. ``None`` for ``Normal`` parameters. The platform does not validate this field on create the way it validates ``category``, so omitting it does not cause a 400."
        },
        "shortName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A short name for the parameter value. Serialized as ``shortName``.",
          "title": "Shortname"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/InventoryItem"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "$ref": "#/$defs/User"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The value of the parameter. Can be a plain string, an [`InventoryItem`][albert.resources.inventory.InventoryItem] (e.g. when the parameter represents an instrument choice), or a [`User`][albert.resources.users.User] (e.g. a user reference such as \"Performed By\").",
          "title": "Value"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit of measure for the value. Serialized as ``Unit``.",
          "title": "Unit"
        },
        "Added": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "required": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether this parameter is required. Defaults to False.",
          "title": "Required"
        },
        "validation": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/ValueValidation"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Validation rules applied to the value. See [`ValueValidation`][albert.resources.parameter_groups.ValueValidation].",
          "title": "Validation"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The name of the parameter. Read-only.",
          "title": "Name"
        },
        "sequence": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The sequence of the parameter within the group. Read-only.",
          "title": "Sequence"
        },
        "originalShortName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Originalshortname"
        },
        "originalName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Originalname"
        }
      },
      "title": "ParameterValue",
      "type": "object"
    },
    "PropertyData": {
      "description": "A single stored result value together with any rich-media backing data.\n\nReturned by the API as part of a [`PropertyValue`][albert.resources.property_data.PropertyValue]. For simple numeric or\ntext results only ``value`` is populated; for image and curve data columns the\nadditional fields carry the uploaded file references and processing metadata.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of this property data record (format ``PTD...``).",
          "title": "Id"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The stored result value. All values are stored as strings in Albert.",
          "title": "Value"
        },
        "valueNumeric": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The numeric form of the value, when the column is numeric. Serialized as ``valueNumeric``.",
          "title": "Valuenumeric"
        },
        "valueString": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The string form of the value, when the column is string-typed. Serialized as ``valueString``.",
          "title": "Valuestring"
        },
        "valueType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The type of the value (e.g. numeric, string, image, curve). Serialized as ``valueType``.",
          "title": "Valuetype"
        },
        "s3Key": {
          "anyOf": [
            {
              "$ref": "#/$defs/PropertyDataStorageKey"
            },
            {
              "$ref": "#/$defs/StorageKeyReference"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Storage references for uploaded media (image previews/thumbnails or curve files). Serialized as ``s3Key``.",
          "title": "S3Key"
        },
        "job": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Processing job metadata, used for curve/image ingestion.",
          "title": "Job"
        },
        "csvMapping": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Mapping from CSV headers to curve result identifiers, for curve data. Serialized as ``csvMapping``.",
          "title": "Csvmapping"
        },
        "curveRemarks": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Remarks associated with curve data. Serialized as ``curveRemarks``.",
          "title": "Curveremarks"
        },
        "athena": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Backing analytical store metadata for curve data. See Also --------",
          "title": "Athena"
        }
      },
      "title": "PropertyData",
      "type": "object"
    },
    "PropertyDataStorageKey": {
      "description": "Storage references (preview, thumbnail, original) for an uploaded media file.",
      "properties": {
        "preview": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Preview"
        },
        "thumb": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Thumb"
        },
        "original": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Original"
        }
      },
      "title": "PropertyDataStorageKey",
      "type": "object"
    },
    "PropertyValue": {
      "description": "A measured result for one data column, with its value, unit, and metadata.\n\nAppears inside a [`Trial`][albert.resources.property_data.Trial] (as one of its ``data_columns``) and represents\nthe value captured for a single data column of a data template. Both a numeric\nand a string form of the value may be present depending on the column type.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Identifier of the result within the trial.",
          "title": "Id"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The data column / result name.",
          "title": "Name"
        },
        "sequence": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Pointer to the specific data (result) column; more unique than a data column ID because a data column can be repeated within a Data Template (analogous to a parameter repeated in a Parameter Group).",
          "title": "Sequence"
        },
        "calculation": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional calculation expression used in place of a fixed value; may reference other result columns (e.g. ``=((COL3-COL1)/COL2)*100``). The result is computed and shown in the UI.",
          "title": "Calculation"
        },
        "valueNumeric": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The numeric form of the value. Serialized as ``valueNumeric``.",
          "title": "Valuenumeric"
        },
        "valueString": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The string form of the value. Serialized as ``valueString``.",
          "title": "Valuestring"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The stored value.",
          "title": "Value"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "additionalProperties": true,
              "type": "object"
            }
          ],
          "description": "The unit of measure for the value, as an entity link. Serialized as ``Unit``.",
          "title": "Unit"
        },
        "PropertyData": {
          "anyOf": [
            {
              "$ref": "#/$defs/PropertyData"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The backing stored value / media record. Serialized as ``PropertyData``."
        },
        "dataColumnUniqueId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unique ID of the data column this result captures. Serialized as ``dataColumnUniqueId``.",
          "title": "Datacolumnuniqueid"
        },
        "hidden": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": false,
          "description": "Whether the result is hidden. See Also --------",
          "title": "Hidden"
        }
      },
      "title": "PropertyValue",
      "type": "object"
    },
    "Role": {
      "description": "A named set of access permissions within a tenant.\n\nA role bundles policies that determine what a holder is allowed to do. Roles\nare assigned to users ([`User`][albert.resources.users.User]) and referenced\nby entity ACLs. Roles are typically read from Albert rather than built by\nhand.",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the role. Role IDs may contain ``#`` characters. Set once the role is retrieved from Albert.",
          "title": "Albertid"
        },
        "name": {
          "description": "The display name of the role.",
          "title": "Name",
          "type": "string"
        },
        "Policies": {
          "anyOf": [
            {
              "items": {},
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The policies (permission rules) associated with the role.",
          "title": "Policies"
        },
        "tenant": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the tenant the role belongs to. Omitted on role-only (id-filtered) responses.",
          "title": "Tenant"
        },
        "visibility": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the role is visible in the platform's role listings.",
          "title": "Visibility"
        }
      },
      "required": [
        "name"
      ],
      "title": "Role",
      "type": "object"
    },
    "SecurityClass": {
      "description": "The security (access control) class of a resource.\n\nAttributes\n----------\nSHARED : str\n    Accessible to all members of the tenant.\nRESTRICTED : str\n    Access is restricted to specific teams or users.\nCONFIDENTIAL : str\n    Access is limited to designated users only.\nPRIVATE : str\n    Visible only to the owner. Used by Projects.\nPUBLIC : str\n    Accessible publicly. Returned by Parameter Groups.",
      "enum": [
        "shared",
        "restricted",
        "confidential",
        "private",
        "public"
      ],
      "title": "SecurityClass",
      "type": "string"
    },
    "SpecialParameterType": {
      "description": "The specific entity type referenced by a Special\n[`Parameter`][albert.resources.parameters.Parameter].\n\nNot returned by the platform parameter API (use Zeus reports RET48/RET52 to\nread the subtype from experiment data). Writable on\n[`ParameterValue`][albert.resources.parameter_groups.ParameterValue] and\n[`TargetParameter`][albert.resources.targets.TargetParameter].\n\nEach member implies an id-namespace for the value column in experiment reports\n(RET48/RET52): ``RAW_MATERIALS`` values carry ``INVA...`` ids, ``CONSUMABLES``\ncarry ``INVB...`` ids, ``EQUIPMENT`` carry ``INVC...`` ids, and ``FORMULAS``\ncarry ``INVMO...`` ids.\n\nMirrors [`InventoryCategory`][albert.resources.inventory.InventoryCategory],\nthe canonical \"kind of material\" an\n[`InventoryItem`][albert.resources.inventory.InventoryItem] belongs to. A\nSpecial parameter's value is always a reference to an `InventoryItem`, so its\nsubtype is one of that enum's members.\n\nAttributes\n----------\nRAW_MATERIALS : str\n    A raw material entity. Values appear as ``INVA...`` ids in report columns.\nCONSUMABLES : str\n    A consumable entity. Values appear as ``INVB...`` ids in report columns.\nEQUIPMENT : str\n    An equipment entity. Values appear as ``INVC...`` ids in report columns.\nFORMULAS : str\n    A formula entity (a mixture designed through a Worksheet). Values appear\n    as ``INVMO...`` ids in report columns.",
      "enum": [
        "RawMaterials",
        "Consumables",
        "Equipment",
        "Formulas"
      ],
      "title": "SpecialParameterType",
      "type": "string"
    },
    "Status": {
      "description": "The status of a resource.\n\nAttributes\n----------\nACTIVE : str\n    The resource is fully operational and visible in normal operations.\nINACTIVE : str\n    The resource is hidden from normal operations and disabled from use.",
      "enum": [
        "active",
        "inactive"
      ],
      "title": "Status",
      "type": "string"
    },
    "StorageKeyReference": {
      "description": "S3 storage key references for a data column file result.",
      "properties": {
        "rawfile": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The raw file storage key.",
          "title": "Rawfile"
        },
        "s3Input": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the input file.",
          "title": "S3Input"
        },
        "s3Output": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the processed output file.",
          "title": "S3Output"
        },
        "preview": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a preview image.",
          "title": "Preview"
        },
        "thumb": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a thumbnail image.",
          "title": "Thumb"
        },
        "original": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the original file.",
          "title": "Original"
        }
      },
      "title": "StorageKeyReference",
      "type": "object"
    },
    "StorageLocation": {
      "description": "A specific place where an Inventory Item is physically stored.\n\nExamples include a flammables cabinet, a freezer, or a storeroom shelf. Every\nstorage location belongs to a parent Location\n([`Location`][albert.resources.locations.Location]), and Inventory search filters\ncan narrow results to items held in a given storage location. Managed through\n[`StorageLocationsCollection`][albert.collections.storage_locations.StorageLocationsCollection].\n\n!!! example\n    ```python\n    from albert import Albert\n    from albert.resources.storage_locations import StorageLocation\n    client = Albert()\n    parent = client.locations.get_by_id(id=\"...\")\n    storage_location = StorageLocation(name=\"Freezer A\", location=parent)\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The human-readable name of the storage location (2 to 255 characters).",
          "maxLength": 255,
          "minLength": 2,
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the storage location (format ``STL...``). Assigned by Albert and populated once the storage location has been created or retrieved.",
          "title": "Albertid"
        },
        "Location": {
          "anyOf": [
            {
              "$ref": "#/$defs/Location"
            },
            {
              "$ref": "#/$defs/EntityLink"
            }
          ],
          "description": "The parent Location this storage location belongs to.",
          "title": "Location"
        }
      },
      "required": [
        "name",
        "Location"
      ],
      "title": "StorageLocation",
      "type": "object"
    },
    "Tag": {
      "description": "A freeform text label used to categorize and connect entities.\n\nTags are shared by name across the platform and can be applied to inventory\nitems, companies, tasks, and other records to group and filter them. Managed\nthrough [`TagCollection`][albert.collections.tags.TagCollection] (``client.tags``);\nthe usual entry point is [`get_or_create`][albert.collections.tags.TagCollection.get_or_create].\n\n!!! example\n    ```python\n    from albert.resources.tags import Tag\n    tag = Tag(tag=\"high-priority\")\n    ```\nMethods\n-------\nfrom_string(tag) -> Tag\n    Build a Tag from its name string.",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The name of the tag (its text label).",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the tag (format ``TAG...``). Set when the tag is retrieved from or created in Albert. Methods ------- from_string(tag) -> Tag Build a Tag from its name string.",
          "title": "Albertid"
        }
      },
      "required": [
        "name"
      ],
      "title": "Tag",
      "type": "object"
    },
    "TaskData": {
      "description": "The measured results captured on a task under a single data template.\n\nGroups the interval data recorded for one block of a task. Returned as part of\n[`InventoryPropertyData`][albert.resources.property_data.InventoryPropertyData] (under ``task_property_data``), where\ntask-measured results roll up to the associated inventory item.",
      "properties": {
        "id": {
          "description": "The task the data was measured on (format ``TAS...``). Serialized as ``id``.",
          "title": "Id",
          "type": "string"
        },
        "name": {
          "description": "The task name. Serialized as ``name``.",
          "title": "Name",
          "type": "string"
        },
        "qcTask": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the task is a QC task. Serialized as ``qcTask``.",
          "title": "Qctask"
        },
        "InitialWorkflow": {
          "anyOf": [
            {
              "$ref": "#/$defs/Workflow"
            },
            {
              "$ref": "#/$defs/EntityLink"
            }
          ],
          "description": "The workflow at the start of the task. Serialized as ``InitialWorkflow``.",
          "title": "Initialworkflow"
        },
        "FinalWorkflow": {
          "anyOf": [
            {
              "$ref": "#/$defs/Workflow"
            },
            {
              "$ref": "#/$defs/EntityLink"
            }
          ],
          "description": "The workflow at task completion. Serialized as ``FinalWorkflow``. Carries the interval combinations for the block in its ``combinations`` field, but not the parameter setpoints; use [`get_by_id`][albert.collections.workflows.WorkflowCollection.get_by_id] for those.",
          "title": "Finalworkflow"
        },
        "Datatemplate": {
          "anyOf": [
            {
              "$ref": "#/$defs/DataTemplate"
            },
            {
              "$ref": "#/$defs/EntityLink"
            }
          ],
          "description": "The data template whose columns were measured (format ``DAT...``). Serialized as ``Datatemplate``.",
          "title": "Datatemplate"
        },
        "Data": {
          "description": "The interval data recorded, one entry per interval combination. Serialized as ``Data``. See Also --------",
          "items": {
            "$ref": "#/$defs/DataInterval"
          },
          "title": "Data",
          "type": "array"
        }
      },
      "required": [
        "id",
        "name",
        "InitialWorkflow",
        "FinalWorkflow",
        "Datatemplate"
      ],
      "title": "TaskData",
      "type": "object"
    },
    "Trial": {
      "description": "One replicate measurement of a given interval combination.\n\nA trial holds the set of [`PropertyValue`][albert.resources.property_data.PropertyValue] results recorded for one row of\ndata under a [`DataInterval`][albert.resources.property_data.DataInterval]. Multiple trials under the same interval are\nrepeat measurements of the same parameter setpoints.",
      "properties": {
        "trialNo": {
          "description": "The trial (row) number. Serialized as ``trialNo``.",
          "title": "Trialno",
          "type": "integer"
        },
        "visibleTrialNo": {
          "default": 1,
          "description": "The relative row number shown to users. Serialized as ``visibleTrialNo``.",
          "title": "Visibletrialno",
          "type": "integer"
        },
        "void": {
          "default": false,
          "description": "Whether this trial has been voided.",
          "title": "Void",
          "type": "boolean"
        },
        "backEndTrialNo": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Internal trial identifier. Serialized as ``backEndTrialNo``.",
          "title": "Backendtrialno"
        },
        "DataColumns": {
          "description": "The results measured in this trial, one per data column. Serialized as ``DataColumns``. See Also --------",
          "items": {
            "$ref": "#/$defs/PropertyValue"
          },
          "title": "Datacolumns",
          "type": "array"
        }
      },
      "required": [
        "trialNo"
      ],
      "title": "Trial",
      "type": "object"
    },
    "Unit": {
      "description": "A unit of measure (e.g. ``g``, ``mL``, ``\u00b0C``).\n\nUnits qualify quantities throughout the platform: inventory amounts,\nparameter values, and property results. Managed through\n[`UnitCollection`][albert.collections.units.UnitCollection] (``client.units``).\n\n!!! example\n    ```python\n    from albert.resources.units import Unit, UnitCategory\n    unit = Unit(name=\"milliliter\", symbol=\"mL\", category=UnitCategory.LIQUID_VOLUME)\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the unit (format ``UNI...``). Set when the unit is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "name": {
          "description": "Currently this is the only field that is displayed in Albert, so use this for display purposes. Therefore, users often use the symbol for the unit here as that's the preferred display.",
          "title": "Name",
          "type": "string"
        },
        "symbol": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display symbol for the unit (e.g. ``\"g\"``).",
          "title": "Symbol"
        },
        "Synonyms": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Alternate names or spellings that also refer to this unit.",
          "title": "Synonyms"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/UnitCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The physical quantity the unit measures (e.g. ``Mass``, ``Volume``)."
        },
        "verified": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": false,
          "description": "Whether the unit has been verified in Albert. Read-only.",
          "title": "Verified"
        }
      },
      "required": [
        "name"
      ],
      "title": "Unit",
      "type": "object"
    },
    "UnitCategory": {
      "description": "The physical quantity a unit measures.\n\nAttributes\n----------\nLENGTH : str\n    Length units (e.g. m, cm).\nVOLUME : str\n    Volume units (e.g. m\u00b3).\nLIQUID_VOLUME : str\n    Liquid volume units (e.g. L, mL).\nANGLES : str\n    Angle units (e.g. degrees, radians).\nTIME : str\n    Time units (e.g. s, h).\nFREQUENCY : str\n    Frequency units (e.g. Hz).\nMASS : str\n    Mass units (e.g. g, kg).\nCURRENT : str\n    Electric current units (e.g. A).\nTEMPERATURE : str\n    Temperature units (e.g. \u00b0C, K).\nAMOUNT : str\n    Amount of substance units (e.g. mol).\nLUMINOSITY : str\n    Luminous intensity units (e.g. cd).\nFORCE : str\n    Force units (e.g. N).\nENERGY : str\n    Energy units (e.g. J).\nPOWER : str\n    Power units (e.g. W).\nPRESSURE : str\n    Pressure units (e.g. Pa, bar).\nELECTRICITY_AND_MAGNETISM : str\n    Electricity and magnetism units.\nOTHER : str\n    Units that do not fit another category.\nWEIGHT : str\n    Weight units.\nAREA : str\n    Area units (e.g. m\u00b2).\nSURFACE_AREA : str\n    Surface area units.\nBINARY : str\n    Binary/digital-information units (e.g. bytes).\nCAPACITANCE : str\n    Capacitance units (e.g. F).\nSPEED : str\n    Speed units (e.g. m/s).\nELECTRICAL_CONDUCTIVITY : str\n    Electrical conductivity units.\nELECTRICAL_PERMITTIVITY : str\n    Electrical permittivity units.\nDENSITY : str\n    Density units (e.g. g/mL).\nRESISTANCE : str\n    Electrical resistance units (e.g. \u03a9).",
      "enum": [
        "Length",
        "Volume",
        "Liquid volume",
        "Angles",
        "Time",
        "Frequency",
        "Mass",
        "Electric current",
        "Temperature",
        "Amount of substance",
        "Luminous intensity",
        "Force",
        "Energy",
        "Power",
        "Pressure",
        "Electricity and magnetism",
        "Other",
        "Weight",
        "Area",
        "Surface Area",
        "Binary",
        "Capacitance",
        "Speed",
        "Electrical conductivity",
        "Electrical permitivitty",
        "Density",
        "Resistance"
      ],
      "title": "UnitCategory",
      "type": "string"
    },
    "User": {
      "description": "An Albert user account: a person who can log in and act in the platform.\n\nA user has a name and email, an optional home\n[`Location`][albert.resources.locations.Location], and a set of\n[`Role`][albert.resources.roles.Role] objects that govern what they can do.\nThe ``user_class`` sets a broad permission tier\n([`UserClass`][albert.resources.users.UserClass]). Users are grouped into teams\n([`Team`][albert.resources.teams.Team]), and are referenced across the\nplatform, for example as the assignee of a Task or in an entity's ACL.\n\n!!! example\n    ```python\n    from albert.resources.users import User, UserClass\n    user = User(\n        name=\"Ada Lovelace\",\n        email=\"ada@example.com\",\n        user_class=UserClass.STANDARD,\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The display name of the user.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert User ID (format ``USR...``). Set once the user is registered in or retrieved from Albert.",
          "title": "Albertid"
        },
        "Location": {
          "anyOf": [
            {
              "$ref": "#/$defs/Location"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The user's home location.",
          "title": "Location"
        },
        "email": {
          "default": null,
          "description": "The user's email address.",
          "format": "email",
          "title": "Email",
          "type": "string"
        },
        "Roles": {
          "description": "The roles the user holds, which determine their permissions.",
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/Role"
              },
              {
                "$ref": "#/$defs/EntityLink"
              }
            ]
          },
          "maxItems": 1,
          "title": "Roles",
          "type": "array"
        },
        "userClass": {
          "$ref": "#/$defs/UserClass",
          "default": "standard",
          "description": "The ACL class level of the user (broad permission tier)."
        },
        "witnesser": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the user can act as a witness on tasks (only relevant when witnessing is enabled for the tenant).",
          "title": "Witnesser"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom metadata attached to the user.",
          "title": "Metadata"
        }
      },
      "required": [
        "name"
      ],
      "title": "User",
      "type": "object"
    },
    "UserClass": {
      "description": "The ACL class level of a user, setting a broad permission tier.\n\nAttributes\n----------\nGUEST : str\n    Most limited access; typically external or temporary users.\nSTANDARD : str\n    Default access level for regular users.\nTRUSTED : str\n    Elevated access above standard users.\nPRIVILEGED : str\n    High access level below full administrators.\nADMIN : str\n    Full administrative access to the tenant.",
      "enum": [
        "guest",
        "standard",
        "trusted",
        "privileged",
        "admin"
      ],
      "title": "UserClass",
      "type": "string"
    },
    "ValueValidation": {
      "description": "A validation rule constraining a [`ParameterValue`][albert.resources.parameter_groups.ParameterValue].\n\nDeclares the expected [`DataType`][albert.resources.parameter_groups.DataType] for a parameter value and, optionally,\nthe bounds or allowed options it must satisfy. Attach one or more of these to a\n[`ParameterValue`][albert.resources.parameter_groups.ParameterValue] via its ``validation`` field.\n\nWhen ``datatype`` is ``date`` or ``timestamp``, ``value``, ``min``, and ``max`` are\nstrings in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].\n\n!!! example\n    ```python\n    from albert.resources.parameter_groups import (\n        DataType,\n        Operator,\n        ValueValidation,\n    )\n\n    rule = ValueValidation(\n        datatype=DataType.NUMBER,\n        operator=Operator.BETWEEN,\n        min=\"0\",\n        max=\"100\",\n    )\n    ```",
      "properties": {
        "datatype": {
          "$ref": "#/$defs/DataType",
          "description": "The data type the value must conform to. Required."
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "items": {
                "$ref": "#/$defs/EnumValidationValue"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "For ``ENUM`` types, the list of allowed options (see [`EnumValidationValue`][albert.resources.parameter_groups.EnumValidationValue]); otherwise the bound for single-bound operators (``lt``, ``lte``, ``gt``, ``gte``, ``eq``). For ``date`` and ``timestamp`` types, a string in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].",
          "title": "Value"
        },
        "min": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The lower bound, used only with ``operator=\"between\"``. For numeric types, a numeric string; for ``date`` and ``timestamp`` types, a string in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].",
          "title": "Min"
        },
        "max": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The upper bound, used only with ``operator=\"between\"``. For numeric types, a numeric string; for ``date`` and ``timestamp`` types, a string in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].",
          "title": "Max"
        },
        "operator": {
          "anyOf": [
            {
              "$ref": "#/$defs/Operator"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The comparison operator: ``between`` uses ``min`` and ``max``; the others use ``value``."
        }
      },
      "required": [
        "datatype"
      ],
      "title": "ValueValidation",
      "type": "object"
    },
    "Workflow": {
      "description": "A specific set of parameter setpoints: the independent variables of a test.\n\nA workflow (WFL) captures only the *independent variables* of a test, the parameters and\nthe setpoints (a value, plus a unit where applicable) they are fixed to. It is built from\none or more groupings of parameters, where each grouping is either a Data Template that\nhas pre-linked parameters or a Parameter Group. A single workflow can combine several\ngroupings, for example one Data Template's pre-linked parameters together with a couple of\nParameter Groups, each contributing its own parameter setpoints. Because a Data Template\ncan carry pre-linked parameters, it is used here exactly like a Parameter Group: purely to\ndescribe a set of parameters and their setpoints.\n\nA workflow does NOT include a Data Template's Data Columns (also called Results). Those are\nthe *dependent variables*, and they are recorded only in Property Data\n([`TaskPropertyData`][albert.resources.property_data.TaskPropertyData]). In short: the Workflow holds\nthe independent variables; Property Data holds the dependent variables (the measured\nresults).\n\nA workflow is uniquely identified by its full setpoint configuration: the value and\nunit of every setpoint, the order of parameters within each Data Template / Parameter\nGroup, and the order of those groups within the workflow. For this reason workflows are\n*found-or-created* rather than blindly created: build the object you want and pass it to\n[`create`][albert.collections.workflows.WorkflowCollection.create], which returns the\nexisting match or makes a new one. IDs look like ``WFL...``.\n\nEvery tenant includes a built-in workflow ``WFL1`` (\"No Parameter Group\") with no\nparameter groups or setpoints. Use it when a task or block does not involve parameter\ngroups; it does not need to be created via\n[`create`][albert.collections.workflows.WorkflowCollection.create].\n\nWhen parameters are intervalized, the workflow acts as a *parent* that carries\nthe resulting [`IntervalCombination`][albert.resources.workflows.IntervalCombination] entries. Each combination has an interval ID of\nthe form ``ROW1`` (one intervalized parameter) or ``ROW1XROW2X...`` (product of several). Use\n[`get_interval_id`][albert.resources.workflows.Workflow.get_interval_id] to build the interval ID for a condition, then use it with the\nproperty_data endpoints to read or write that condition's results.\n\nTo construct rules and combination overrides for Property tasks using parameter names\nand values, use [`build_rule`][albert.resources.workflows.Workflow.build_rule] and\n[`build_override`][albert.resources.workflows.Workflow.build_override].\n\n!!! example\n    ```python\n    from albert import Albert\n    from albert.resources.workflows import (\n        Workflow,\n        ParameterGroupSetpoints,\n        ParameterSetpoint,\n    )\n\n    client = Albert()\n    # One workflow combining a Data Template's pre-linked parameters with two\n    # Parameter Groups. Each grouping is keyed by its DAT... or PRG... id.\n    workflow = Workflow(\n        parameter_group_setpoints=[\n            # Pre-linked parameters on a Data Template (used just like a PRG here)\n            ParameterGroupSetpoints(\n                id=\"DAT9999999\",\n                parameter_setpoints=[\n                    ParameterSetpoint(parameter_id=\"PRM9999999\", value=\"23\"),\n                    ParameterSetpoint(parameter_id=\"PRM2\", value=\"50\"),\n                ],\n            ),\n            # A Parameter Group describing sample prep\n            ParameterGroupSetpoints(\n                id=\"PRG9999999\",\n                parameter_setpoints=[\n                    ParameterSetpoint(parameter_id=\"PRM3\", value=\"24\"),\n                ],\n            ),\n            # A second Parameter Group (e.g. the mixing step)\n            ParameterGroupSetpoints(\n                id=\"PRG2\",\n                parameter_setpoints=[\n                    ParameterSetpoint(parameter_id=\"PRM4\", value=\"2000\"),\n                ],\n            ),\n        ],\n    )\n    created = client.workflows.create(workflows=[workflow])\n    created[0].id\n    # 'WFL1'\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The name of the workflow. Can be omitted on platform built-in workflows without parameter groups (such as `WFL1`).",
          "title": "Name"
        },
        "ParameterGroups": {
          "description": "The setpoints to apply, organized one entry per Data Template / Parameter Group. The order of these entries is part of the workflow's identity.",
          "items": {
            "$ref": "#/$defs/ParameterGroupSetpoints"
          },
          "title": "Parametergroups",
          "type": "array"
        },
        "IntervalCombinations": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/IntervalCombination"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The realized conditions when parameters are intervalized. Populated by the platform; present when the workflow is retrieved, not something you set when building one.",
          "title": "Intervalcombinations"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the workflow (``WFL...``). Set when a workflow is created or retrieved from the platform.",
          "title": "Albertid"
        },
        "blockMapping": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Caller-supplied correlation key on workflow bulk create, used to tie each created workflow to a block position (e.g. ``\"0\"``, ``\"1\"``). Also hydrated on read when a Workflow is returned in the context of a block.",
          "title": "Blockmapping"
        },
        "combinationsCount": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Number of child-workflow combinations on this workflow when it is a block's FINAL workflow. Always present (including ``0``) on flag-ON reads. The embedded ``combinations`` array is empty at 500 or more; use [`get_block_combinations`][albert.collections.tasks.TaskCollection.get_block_combinations] to list them.",
          "title": "Combinationscount"
        },
        "Combinations": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/IntervalCombinationItem"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Child-workflow combinations embedded on a block's FINAL workflow. Read-only; excluded from serialization. Empty at 500 or more combinations.",
          "title": "Combinations"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "title": "Workflow",
      "type": "object"
    }
  },
  "description": "All property data associated with one inventory item.\n\nReturned by\n[`get_properties_on_inventory`][albert.collections.property_data.PropertyDataCollection.get_properties_on_inventory].\nSeparates results that rolled up from tasks from custom values entered\ndirectly on the item. Distinct from Inventory Specs / Attributes, which store\ninventory reference properties rather than measured (or custom PTD) values.",
  "properties": {
    "status": {
      "anyOf": [
        {
          "$ref": "#/$defs/Status"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The status of the resource, optional."
    },
    "Created": {
      "anyOf": [
        {
          "$ref": "#/$defs/AuditFields"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Audit fields for the creation of the resource, optional."
    },
    "Updated": {
      "anyOf": [
        {
          "$ref": "#/$defs/AuditFields"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Audit fields for the update of the resource, optional."
    },
    "inventoryId": {
      "description": "The inventory item (format ``INV...``). Serialized as ``inventoryId``.",
      "title": "Inventoryid",
      "type": "string"
    },
    "inventoryName": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The inventory item name. Serialized as ``inventoryName``.",
      "title": "Inventoryname"
    },
    "Task": {
      "description": "Results measured on tasks that roll up to this item. Serialized as ``Task``.",
      "items": {
        "$ref": "#/$defs/TaskData"
      },
      "title": "Task",
      "type": "array"
    },
    "NoTask": {
      "description": "Values entered directly on the item, independent of any task. Serialized as ``NoTask``. See Also --------",
      "items": {
        "$ref": "#/$defs/CustomData"
      },
      "title": "Notask",
      "type": "array"
    }
  },
  "required": [
    "inventoryId"
  ],
  "title": "InventoryPropertyData",
  "type": "object"
}

Fields:

inventory_id

inventory_id: str

The inventory item (format INV...). Serialized as inventoryId.

inventory_name

inventory_name: str | None = None

The inventory item name. Serialized as inventoryName.

task_property_data

task_property_data: list[TaskData]

Results measured on tasks that roll up to this item. Serialized as Task.

custom_property_data

custom_property_data: list[CustomData]

Values entered directly on the item, independent of any task. Serialized as NoTask. See Also --------

TaskPropertyData

Bases: BaseResource

The property data recorded on a task, for one block and data template.

Returned by get_task_block_properties and get_all_task_properties. Carries the interval/trial data along with the task's workflows and the inventory item the results apply to.

Show JSON schema:
{
  "$defs": {
    "ACL": {
      "description": "A single access rule for a user.",
      "properties": {
        "id": {
          "description": "The id of the user for which this ACL applies",
          "title": "Id",
          "type": "string"
        },
        "fgc": {
          "anyOf": [
            {
              "$ref": "#/$defs/AccessControlLevel"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Fine-Grain Control Level"
        }
      },
      "required": [
        "id"
      ],
      "title": "ACL",
      "type": "object"
    },
    "AccessControlLevel": {
      "description": "Access control levels you can grant users.",
      "enum": [
        "ProjectOwner",
        "ProjectEditor",
        "ProjectViewer",
        "ProjectAllTask",
        "ProjectStrictViewer",
        "ProjectPropertyTask",
        "InventoryOwner",
        "InventoryViewer",
        "CustomTemplateOwner",
        "CustomTemplateViewer",
        "CASFullAccess"
      ],
      "title": "AccessControlLevel",
      "type": "string"
    },
    "AuditFields": {
      "description": "The audit fields for a resource",
      "properties": {
        "by": {
          "default": null,
          "title": "By",
          "type": "string"
        },
        "byName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Byname"
        },
        "at": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "At"
        }
      },
      "title": "AuditFields",
      "type": "object"
    },
    "Axis": {
      "enum": [
        "X",
        "Y"
      ],
      "title": "Axis",
      "type": "string"
    },
    "CSVMapping": {
      "description": "A mapping between CSV column headers and data column IDs.",
      "properties": {
        "mapId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A compact mapping string (e.g. ``\"Header1:DAC2900#Header2:DAC4707\"``).",
          "examples": "Header1:DAC2900#Header2:DAC4707",
          "title": "Mapid"
        },
        "mapData": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A dictionary mapping CSV header names to data column IDs.",
          "examples": {
            "Header1": "DAC2900",
            "Header2": "DAC4707"
          },
          "title": "Mapdata"
        }
      },
      "title": "CSVMapping",
      "type": "object"
    },
    "Cas": {
      "description": "A CAS entry: a chemical substance identified by its CAS Registry Number.\n\nA ``Cas`` is Albert's dictionary record for a substance. Raw-material Inventory\nItems reference these entries to declare what they are made of, pairing each\n``Cas`` with an amount (see [`CasAmount`][albert.resources.inventory.CasAmount]).\nManage entries through\n[`CasCollection`][albert.collections.cas.CasCollection] (``client.cas``): most fields\nare populated by Albert, so you typically only build a ``Cas`` from a registry\n``number`` when creating a new entry.\n\n!!! example\n    ```python\n    from albert.resources.cas import Cas\n    # Build a CAS entry to register a new substance\n    cas = Cas(number=\"7727-37-9\")\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "number": {
          "description": "The CAS number.",
          "title": "Number",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Name of the CAS.",
          "title": "Name"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The description or name of the CAS.",
          "title": "Description"
        },
        "notes": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Notes related to the CAS.",
          "title": "Notes"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/CasCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The category of the CAS."
        },
        "casSmiles": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "CAS SMILES notation.",
          "title": "Cassmiles"
        },
        "inchiKey": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "InChIKey of the CAS.",
          "title": "Inchikey"
        },
        "iUpacName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "IUPAC name of the CAS.",
          "title": "Iupacname"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The AlbertID of the CAS.",
          "title": "Albertid"
        },
        "hazards": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/Hazard"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazards associated with the CAS.",
          "title": "Hazards"
        },
        "wgk": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "German Water Hazard Class (WGK) number.",
          "title": "Wgk"
        },
        "ecListNo": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "European Community (EC) number.",
          "title": "Eclistno"
        },
        "type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Internal classification_type reference.",
          "title": "Type"
        },
        "classificationType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Classification type of the CAS.",
          "title": "Classificationtype"
        },
        "order": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "CAS order.",
          "title": "Order"
        },
        "Metadata": {
          "additionalProperties": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "integer"
              },
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/EntityLinkWithName"
              },
              {
                "$ref": "#/$defs/EntityLink"
              },
              {
                "items": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/EntityLinkWithName"
                    },
                    {
                      "$ref": "#/$defs/EntityLink"
                    }
                  ]
                },
                "type": "array"
              }
            ]
          },
          "description": "Custom metadata keyed by field. Updatable.",
          "title": "Metadata",
          "type": "object"
        }
      },
      "required": [
        "number"
      ],
      "title": "Cas",
      "type": "object"
    },
    "CasAmount": {
      "description": "A single CAS constituent and its concentration within an [`InventoryItem`][albert.resources.inventory.InventoryItem].\n\nA ``CasAmount`` links one CAS number (a chemical substance identifier) to the\namount of that substance present in an inventory item, expressed as a range\n(``min`` to ``max``) with an optional ``target``. A list of these on an\n[`InventoryItem`][albert.resources.inventory.InventoryItem] gives the item's compositional breakdown.\n\nIdentify the CAS in one of two ways: pass a full [`Cas`][albert.resources.cas.Cas]\nobject as ``cas`` (its ``id``, ``number``, and ``cas_smiles`` are then copied onto\nthis amount), or pass just the CAS resource ``id`` string. Do not pass both.\n\n!!! example\n    ```python\n    from albert.resources.inventory import CasAmount\n\n    # Reference an existing CAS resource by its Albert ID, 10-30% concentration\n    amount = CasAmount(min=10.0, max=30.0, id=\"CAS1\")\n    ```",
      "properties": {
        "min": {
          "description": "The minimum amount (concentration) of the CAS in the item.",
          "title": "Min",
          "type": "number"
        },
        "max": {
          "description": "The maximum amount (concentration) of the CAS in the item.",
          "title": "Max",
          "type": "number"
        },
        "inventoryValue": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The target amount of the CAS in the item. Serialized as ``inventoryValue``.",
          "title": "Inventoryvalue"
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the CAS resource this amount represents. Provide either a ``cas`` object or an ``id``; when ``cas`` is given, this is set from it.",
          "title": "Id"
        },
        "casCategory": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the CAS is a trade secret.",
          "title": "Cascategory"
        },
        "inventoryFunction": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/ListItem"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Business-controlled functions associated with the CAS in this inventory context (e.g. what role the substance plays). Values come from a managed list.",
          "title": "Inventoryfunction"
        },
        "type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The CAS type. Can be retrieved from the CAS collection before construction.",
          "title": "Type"
        },
        "classificationType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The EU classification source for the CAS: harmonized, notified, or REACH.",
          "title": "Classificationtype"
        },
        "substanceId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The substance ID linked to this CAS entry.",
          "title": "Substanceid"
        },
        "cas": {
          "anyOf": [
            {
              "$ref": "#/$defs/Cas"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The full CAS object associated with this amount. Read-only after init; excluded from serialization. Provide either a ``cas`` or an ``id``."
        },
        "casSmiles": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The SMILES string of the CAS resource. Read-only; set from the ``cas`` object.",
          "title": "Cassmiles"
        },
        "number": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The CAS number (e.g. ``\"7440-32-6\"``). Read-only; set from the ``cas`` object.",
          "title": "Number"
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit metadata for creation. Read-only."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/CasAuditFieldsWithEmail"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit metadata for the last update. Read-only. See Also --------"
        }
      },
      "required": [
        "min",
        "max"
      ],
      "title": "CasAmount",
      "type": "object"
    },
    "CasAuditFieldsWithEmail": {
      "description": "The audit fields for a CAS resource with email",
      "properties": {
        "by": {
          "default": null,
          "title": "By",
          "type": "string"
        },
        "byName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Byname"
        },
        "at": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "At"
        },
        "email": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Email"
        }
      },
      "title": "CasAuditFieldsWithEmail",
      "type": "object"
    },
    "CasCategory": {
      "enum": [
        "User",
        "Verisk",
        "TSCA - Public",
        "TSCA - Private",
        "not TSCA",
        "CAS linked to External Database",
        "Unknown (Trade Secret)",
        "CL_Inventory Upload"
      ],
      "title": "CasCategory",
      "type": "string"
    },
    "Company": {
      "description": "A manufacturing company or supplier tracked in Albert.\n\nA Company is the organization that makes or supplies a material. It is the\n``company`` linked on raw-material inventory items: each raw material points\nback to the Company that manufactures it (see\n[`InventoryItem`][albert.resources.inventory.InventoryItem]). Companies are managed\nthrough [`CompanyCollection`][albert.collections.companies.CompanyCollection], accessed as\n``client.companies``.\n\nCompanies are identified by a Company ID (format ``COM...``). A Company is\ntypically minimal: a name plus its assigned ID. You construct one directly\n(``Company(name=\"Acme Chemicals\")``) to create it or to attach it to an\ninventory item.\n\n!!! example\n    ```python\n    from albert.resources.companies import Company\n\n    # Build a company to create or attach to an inventory item\n    company = Company(name=\"Acme Chemicals\")\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The company's name. This is the primary identifier used when searching for or creating a company.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert Company ID (format ``COM...``). ``None`` until the company is created in or retrieved from Albert.",
          "title": "Albertid"
        },
        "distance": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Search-relevance score returned when the company comes back as a search result. Read-only; not set on companies you build yourself.",
          "title": "Distance"
        }
      },
      "required": [
        "name"
      ],
      "title": "Company",
      "type": "object"
    },
    "CurveDBMetadata": {
      "description": "Database metadata for a curve data column result.",
      "properties": {
        "tableName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Athena/database table name storing the curve data.",
          "title": "Tablename"
        },
        "partitionKey": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The partition key for the curve data table.",
          "title": "Partitionkey"
        }
      },
      "title": "CurveDBMetadata",
      "type": "object"
    },
    "CurveDataEntityLink": {
      "description": "A link to a data column that provides one axis of a curve dataset.",
      "properties": {
        "id": {
          "description": "The data column ID.",
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        },
        "axis": {
          "anyOf": [
            {
              "$ref": "#/$defs/Axis"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Which axis this column represents (X or Y)."
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit of measure for this axis.",
          "title": "Unit"
        }
      },
      "required": [
        "id"
      ],
      "title": "CurveDataEntityLink",
      "type": "object"
    },
    "DataColumn": {
      "description": "The definition of a single measured result variable in Albert.\n\nA Data Column (DAC) defines one direct output variable that a task can\nmeasure, such as ``Viscosity`` or ``APHA Color``. Data columns are the\nreusable building blocks of a Data Template's results: a\n[`DataTemplate`][albert.resources.data_templates.DataTemplate] references data columns\nthrough its ``data_column_values``, and the values recorded against a data\ncolumn during experiments are stored as Property Data.\n\nData columns are identified by a Data Column ID (format ``DAC...``, e.g.\n``\"DAC9999999\"``) and are managed through\n[`DataColumnCollection`][albert.collections.data_columns.DataColumnCollection], accessed as\n``client.data_columns``.\n\n!!! example\n    ```python\n    from albert import Albert\n    from albert.resources.data_columns import DataColumn\n    client = Albert()\n    column = DataColumn(name=\"Viscosity\")\n    created = client.data_columns.create(data_column=column)\n    created.id\n    # 'DAC9999999'\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The name of the data column (e.g. ``\"Viscosity\"``).",
          "title": "Name",
          "type": "string"
        },
        "default": {
          "type": "boolean",
          "default": false,
          "description": "Whether this is a default (platform-provided) data column.",
          "title": "Default"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom metadata keyed by field name. Values may be strings, numbers, or entity links.",
          "title": "Metadata"
        },
        "albertId": {
          "default": null,
          "description": "The Data Column ID assigned by Albert (format ``DAC...``). Populated by the server on creation; leave unset when building a column to create.",
          "title": "Albertid",
          "type": "string"
        }
      },
      "required": [
        "name"
      ],
      "title": "DataColumn",
      "type": "object"
    },
    "DataColumnValue": {
      "description": "A result data column on a Data Template.\n\nA ``DataColumnValue`` binds a [`DataColumn`][albert.resources.data_columns.DataColumn] to\na Data Template as one of the results the test captures (a \"direct variable\"). Data\ncolumns can be typed numeric, text, dropdown/enum, image, curve, date, or timestamp.\nOn a Data Template the ``value`` typically holds an example value shown on the\ndetails page rather than measured data; actual measurements are stored as Property\nData. When constructing one, provide either ``data_column`` or ``data_column_id``.\n\n!!! example\n    ```python\n    from albert.resources.data_templates import DataColumnValue\n\n    column = DataColumnValue(data_column_id=\"DAC9999999\", value=\"42\")\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "data_column": {
          "anyOf": [
            {
              "$ref": "#/$defs/DataColumn"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The full DataColumn resource this value binds to. Provide this or ``data_column_id``. Not serialized."
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the bound DataColumn (format ``DAC...``). Serialized as ``id``. Provide this or ``data_column``.",
          "title": "Id"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display name of the column.",
          "title": "Name"
        },
        "originalName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The original column name as stored in Albert. Read-only.",
          "title": "Originalname"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The column's example/default value shown on the Data Template details page.",
          "title": "Value"
        },
        "hidden": {
          "default": false,
          "description": "Whether the column is hidden. Defaults to False.",
          "title": "Hidden",
          "type": "boolean"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit of measure for the column.",
          "title": "Unit"
        },
        "calculation": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A calculation expression for a computed column.",
          "title": "Calculation"
        },
        "sequence": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The column's position within the template. Assigned by Albert.",
          "title": "Sequence"
        },
        "script": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Script"
        },
        "athena": {
          "anyOf": [
            {
              "$ref": "#/$defs/CurveDBMetadata"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "s3Key": {
          "anyOf": [
            {
              "$ref": "#/$defs/StorageKeyReference"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "job": {
          "anyOf": [
            {
              "$ref": "#/$defs/JobSummary"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "csvMapping": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "$ref": "#/$defs/CSVMapping"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Csvmapping"
        },
        "validation": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/ValueValidation"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Validation rules applied to the column value (e.g. enum options, numeric range).",
          "title": "Validation"
        },
        "CurveData": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/CurveDataEntityLink"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "For curve columns, the linked X/Y curve result columns.",
          "title": "Curvedata"
        }
      },
      "title": "DataColumnValue",
      "type": "object"
    },
    "DataEntity": {
      "description": "The kind of entity that a piece of property data is attached to.\n\nSelects how the values are keyed and where they live in the platform.\n\nAttributes\n----------\nTASK : str\n    Data measured on a task, organized per block, interval combination, and\n    trial. Task results roll up to the associated inventory item.\nWORKFLOW : str\n    Data keyed to a workflow (a specific set of parameter setpoints).\nINVENTORY : str\n    Custom property data stored directly on an inventory item, independent of\n    any task. Distinct from Inventory Specs / Attributes (reference\n    properties).",
      "enum": [
        "task",
        "workflow",
        "inventory"
      ],
      "title": "DataEntity",
      "type": "string"
    },
    "DataInterval": {
      "description": "All trials recorded for one interval combination within a block.\n\nAn interval combination is one specific set of parameter setpoints, identified\nby an interval ID such as ``ROW1``, ``ROW1XROW2``, or the literal ``\"default\"``\nwhen the block has no intervalized parameters. Build the ID with\n[`get_interval_id`][albert.resources.workflows.Workflow.get_interval_id].",
      "properties": {
        "intervalCombination": {
          "description": "The interval ID this data belongs to (e.g. ``\"default\"``, ``\"ROW1\"``, ``\"ROW1XROW2\"``). Serialized as ``intervalCombination``.",
          "title": "Intervalcombination",
          "type": "string"
        },
        "void": {
          "default": false,
          "description": "Whether this interval's data has been voided.",
          "title": "Void",
          "type": "boolean"
        },
        "Trials": {
          "description": "The replicate measurements recorded for this interval. Serialized as ``Trials``.",
          "items": {
            "$ref": "#/$defs/Trial"
          },
          "title": "Trials",
          "type": "array"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "An optional display name for the interval. See Also --------",
          "title": "Name"
        }
      },
      "required": [
        "intervalCombination"
      ],
      "title": "DataInterval",
      "type": "object"
    },
    "DataTemplate": {
      "description": "A definition of what a test captures (a DAT).\n\nA ``DataTemplate`` (Data Template, ID format ``DAT...``) describes a test in two\nparts: its ``data_column_values`` are the measured RESULTS (the data columns, or\n\"direct variables\"), and its ``parameter_values`` are the CONDITIONS under which\nthe test is run (the \"indirect variables\"). A Data Template does not itself store\nmeasured values; those are recorded as Property Data. When the template is paired\nwith a Workflow inside a Block, only its parameters (not its result columns) flow\ninto the Workflow's setpoints.\n\nTemplates are managed through\n[`DataTemplateCollection`][albert.collections.data_templates.DataTemplateCollection]\n(``client.data_templates``).\n\n!!! example\n    ```python\n    from albert.resources.data_templates import DataTemplate, DataColumnValue\n\n    template = DataTemplate(\n        name=\"Tensile Strength Test\",\n        data_column_values=[DataColumnValue(data_column_id=\"DAC9999999\")],\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "Tags": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/Tag"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A list of Tag objects or strings representing tags.",
          "title": "Tags"
        },
        "name": {
          "description": "The name of the data template. Required.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert Data Template ID (format ``DAT...``). Set when the template is retrieved from or created in Albert. Serialized as ``albertId``.",
          "title": "Albertid"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A free-text description of the template.",
          "title": "Description"
        },
        "class": {
          "anyOf": [
            {
              "$ref": "#/$defs/SecurityClass"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The access/security class of the template. Serialized as ``class``."
        },
        "verified": {
          "default": false,
          "description": "The approval/governance state of the template. Defaults to False.",
          "title": "Verified",
          "type": "boolean"
        },
        "ACL": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/User"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The access-control list of users who can access the template. Serialized as ``ACL``.",
          "title": "Acl"
        },
        "DataColumns": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/DataColumnValue"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The measured results the test captures (its data columns / direct variables). See [`DataColumnValue`][albert.resources.data_templates.DataColumnValue].",
          "title": "Datacolumns"
        },
        "Parameters": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/ParameterValue"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The conditions under which the test is run (its indirect variables). See [`ParameterValue`][albert.resources.parameter_groups.ParameterValue].",
          "title": "Parameters"
        },
        "DeletedParameters": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/ParameterValue"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Deletedparameters"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom metadata fields. Allowed keys are defined by the workspace's CustomFields configuration.",
          "title": "Metadata"
        },
        "Documents": {
          "description": "Documents registered on the template. Read-only. Only populated by\n[`get_by_id`][albert.collections.data_templates.DataTemplateCollection.get_by_id]; empty\non templates from `get_by_ids`, `get_all`, and `search`. Scripts are not documents: they\nare attachments with category `Script`, found with\n[`get_by_parent_ids`][albert.collections.attachments.AttachmentCollection.get_by_parent_ids]\nusing the template ID as the parent.",
          "items": {
            "$ref": "#/$defs/EntityLink"
          },
          "title": "Documents",
          "type": "array"
        },
        "originalName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The original template name as stored in Albert. Read-only.",
          "title": "Originalname"
        },
        "fullName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The fully qualified template name. Read-only. See Also --------",
          "title": "Fullname"
        }
      },
      "required": [
        "name"
      ],
      "title": "DataTemplate",
      "type": "object"
    },
    "DataType": {
      "description": "The data type of a parameter value, driving how it is validated.\n\nUsed by [`ValueValidation`][albert.resources.parameter_groups.ValueValidation] to declare what kind of value a parameter\naccepts.\n\nAttributes\n----------\nNUMBER : str\n    A numeric value.\nSTRING : str\n    A free-text string value.\nENUM : str\n    A value restricted to a fixed set of options (see\n    [`EnumValidationValue`][albert.resources.parameter_groups.EnumValidationValue]).\nIMAGE : str\n    An image value.\nCURVE : str\n    A curve (series) value.\nDATE : str\n    A calendar date value stored as ``YYYY-MM-DD``.\nTIMESTAMP : str\n    A date-and-time value in ISO 8601 format with a UTC offset\n    (e.g. ``2026-05-21T14:32:00+02:00``).",
      "enum": [
        "number",
        "string",
        "enum",
        "image",
        "curve",
        "date",
        "timestamp"
      ],
      "title": "DataType",
      "type": "string"
    },
    "EntityLink": {
      "properties": {
        "id": {
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "required": [
        "id"
      ],
      "title": "EntityLink",
      "type": "object"
    },
    "EntityLinkWithName": {
      "description": "EntityLink that includes the name field in serialization.",
      "properties": {
        "id": {
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "required": [
        "id"
      ],
      "title": "EntityLinkWithName",
      "type": "object"
    },
    "EnumValidationValue": {
      "description": "Represents a value for an enum type validation.",
      "properties": {
        "text": {
          "description": "The text of the enum value.",
          "title": "Text",
          "type": "string"
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the enum value. If not provided, the ID will be generated upon creation.",
          "title": "Id"
        },
        "originalText": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Originaltext"
        }
      },
      "required": [
        "text"
      ],
      "title": "EnumValidationValue",
      "type": "object"
    },
    "Hazard": {
      "description": "A single GHS hazard classification associated with a CAS substance.\n\nHazards are read from the CAS record; a [`Cas`][albert.resources.cas.Cas] may carry a list of them.",
      "properties": {
        "subCategory": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard subcategory",
          "title": "Subcategory"
        },
        "hCode": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard code",
          "title": "Hcode"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard category",
          "title": "Category"
        },
        "class": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard classification",
          "title": "Class"
        },
        "hCodeText": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard code text",
          "title": "Hcodetext"
        }
      },
      "title": "Hazard",
      "type": "object"
    },
    "Interval": {
      "description": "One value that an intervalized parameter is varied across.\n\nWhen a parameter is \"intervalized\" (tested at several values rather than a single\nsetpoint), each of those values is represented by an [`Interval`][albert.resources.workflows.Interval]. A list of\nthem is placed on the parameter's [`ParameterSetpoint`][albert.resources.workflows.ParameterSetpoint] via its ``intervals``\nfield. The workflow then carries the resulting [`IntervalCombination`][albert.resources.workflows.IntervalCombination] entries,\none per interval (or per cartesian product of intervalized parameters).\n\n!!! example\n    ```python\n    from albert.resources.workflows import Interval\n\n    # A Normal parameter varied across two temperatures.\n    low = Interval(value=\"25\", unit={\"id\": \"UNI9999999\"})\n    high = Interval(value=\"60\", unit={\"id\": \"UNI9999999\"})\n    ```",
      "properties": {
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The value of this interval. For Normal parameters this is a scalar string (e.g. ``\"23\"``). For Special parameters (Equipment, Consumables, Templates) this may be an object with an ``id`` (and optional ``name``), matching [`ParameterSetpoint.value`][albert.resources.workflows.ParameterSetpoint.value]. Empty or hyphen intervals (represented as ``\"\"`` or ``None``) are permitted on the platform for optional parameters and exclusion matching. The sibling ``name`` field is independent and is not copied from an object value.",
          "title": "Value"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display name of the interval value. Populated for Special parameters (e.g. ``\"Pipette 0.01 -0.1 ml (10 - 100 \u03bcl)\"``). ``None`` for Normal parameters. Not auto-filled from an object ``value``.",
          "title": "Name"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit of ``value``, where applicable. If given, the unit must have an ``id``. See Also --------",
          "title": "Unit"
        },
        "rowId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Rowid"
        }
      },
      "title": "Interval",
      "type": "object"
    },
    "IntervalCombination": {
      "description": "One realized condition (interval combination) carried by a workflow.\n\nReturned by the workflow endpoint when at least one parameter in the workflow has\nbeen intervalized. A combination is a single intervalized parameter (interval ID\n``ROW#``) or the cartesian product of any number of intervalized parameters\n(``ROW#XROW#X...``). On tenants with increased intervals the id may also be a child\nworkflow id (``WFL...``) or a case-sensitive barcode. Its ``interval_id`` is what you\npass to the property_data endpoints to read or write results for that specific\ncondition.",
      "properties": {
        "interval": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The interval ID this combination is associated with. A ``ROW#`` chain of any length, a child workflow id (``WFL...``), a 9-character barcode, or ``\"default\"``. This is the same value [`get_interval_id`][albert.resources.workflows.Workflow.get_interval_id] returns for ROW-chain combinations.",
          "title": "Interval"
        },
        "intervalParams": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The parameters participating in the interval.",
          "title": "Intervalparams"
        },
        "intervalString": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A human-readable representation of the combination, of the form ``\"[Parameter Name]: [Parameter Value] [Parameter Unit]\"`` for each parameter.",
          "title": "Intervalstring"
        },
        "intervalDetails": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/IntervalDetail"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Per-parameter breakdown of the combination. Each entry has ``name`` (parameter name) and ``value`` (display string, e.g. ``\"C191778 || Pipette ...\"``). See Also --------",
          "title": "Intervaldetails"
        }
      },
      "title": "IntervalCombination",
      "type": "object"
    },
    "IntervalCombinationItem": {
      "description": "One child-workflow interval combination on a task block (\ud83e\uddea Beta).\n\nReturned by\n[`get_block_combinations`][albert.collections.tasks.TaskCollection.get_block_combinations].\nUse that method rather than any combinations array embedded on a task or block:\nthe embedded array is empty once the block has 500 or more combinations.\n\n!!! warning \"Beta Feature!\"\n    Increased intervals combination support is currently in beta and behind a platform\n    feature flag. Please do not use in production or without explicit guidance from\n    Albert. You might otherwise have a bad experience. This feature currently falls\n    outside of the Albert support contract, but we'd love your feedback!\n\n!!! example\n    ```python\n    from albert import Albert\n\n    client = Albert()\n    combo = next(\n        client.tasks.get_block_combinations(task_id=\"TASFOR1\", block_id=\"BLK1\", max_items=1)\n    )\n    combo.id\n    # 'WFL999'\n    combo.interval_barcode\n    # 'OhI8ap0HY'\n    ```",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The child workflow id for this combination (format ``WFL...``).",
          "title": "Id"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Display name of the combination (parameter names and values).",
          "title": "Name"
        },
        "intervalBarcode": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Case-sensitive barcode for the combination. Serialized as ``intervalBarcode``.",
          "title": "Intervalbarcode"
        },
        "intervalRowKey": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Legacy ROW-chain key (e.g. ``ROW3XROW7``). Serialized as ``intervalRowKey``.",
          "title": "Intervalrowkey"
        }
      },
      "title": "IntervalCombinationItem",
      "type": "object"
    },
    "IntervalDetail": {
      "description": "A single parameter's contribution to an interval combination.\n\nThis appears inside [`IntervalCombination`][albert.resources.workflows.IntervalCombination] (as its ``interval_details``) to\nbreak a combination down into the individual parameters that make it up. It is\nread from the workflow endpoint; you do not construct it directly.",
      "properties": {
        "name": {
          "description": "The parameter name (e.g. ``\"Equipment\"``).",
          "title": "Name",
          "type": "string"
        },
        "value": {
          "description": "The display value for this interval (e.g. ``\"C191778 || Pipette 0.01 -0.1 ml\"``). See Also --------",
          "title": "Value",
          "type": "string"
        }
      },
      "required": [
        "name",
        "value"
      ],
      "title": "IntervalDetail",
      "type": "object"
    },
    "InventoryCategory": {
      "description": "The kind of material an [`InventoryItem`][albert.resources.inventory.InventoryItem] represents.\n\nEvery inventory item belongs to exactly one category, which determines how it\nis used across the platform and which fields are relevant to it.\n\nAttributes\n----------\nRAW_MATERIALS : str\n    A purchased substance used as an ingredient (e.g. a solvent or pigment).\n    Typically linked to a manufacturing ``company`` and one or more CAS numbers.\nCONSUMABLES : str\n    Lab supplies consumed during work (e.g. gloves, vials, filters).\nEQUIPMENT : str\n    Instruments and apparatus (e.g. a balance or spectrometer).\nFORMULAS : str\n    A mixture designed in Albert under a Project. Creating a Formula item\n    requires ``project_id`` set to the parent Project's ID.",
      "enum": [
        "RawMaterials",
        "Consumables",
        "Equipment",
        "Formulas"
      ],
      "title": "InventoryCategory",
      "type": "string"
    },
    "InventoryDensity": {
      "description": "The density of an inventory item or lot measured by volume.\n\nDensity is expressed in grams per milliliter (g/mL) and locked at creation.\nWhen creating a volume-based item or lot, supply either a bare numeric value\n(float, int, or string) or an [`InventoryDensity`][albert.resources.inventory.InventoryDensity]\ninstance. Metadata fields (attribute ID, unit ID, unit name, locked flag)\nare populated by the server and are read-only.\n\n!!! example\n    ```python\n    from albert.resources.inventory import InventoryDensity\n\n    density = InventoryDensity(value=1.05)\n    ```",
      "properties": {
        "value": {
          "description": "The density value in g/mL.",
          "title": "Value",
          "type": "number"
        },
        "atrId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the density attribute definition. Read-only.",
          "title": "Atrid"
        },
        "unitId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the density measurement unit. Read-only.",
          "title": "Unitid"
        },
        "unitName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display name of the density measurement unit (e.g. ``g/mL``). Read-only.",
          "title": "Unitname"
        },
        "lockedAtCreation": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the density was locked when the parent entity was created. Read-only.",
          "title": "Lockedatcreation"
        }
      },
      "required": [
        "value"
      ],
      "title": "InventoryDensity",
      "type": "object"
    },
    "InventoryItem": {
      "description": "A catalog entry for a material tracked in Albert.\n\nAn ``InventoryItem`` is the canonical record for a raw material, consumable,\npiece of equipment, or formula. Its [`InventoryCategory`][albert.resources.inventory.InventoryCategory] determines how it\nis used across the platform, and once saved it is referenced everywhere by its\nInventory ID (format ``INV...``, e.g. ``\"INVA9999999\"``). Raw materials are typically\nlinked to a manufacturing ``company`` and a compositional breakdown of CAS\namounts. A Formula item represents a mixture designed in a Project; creating\none requires ``project_id`` set to the parent Project's ID.\n\nItems are managed through\n[`InventoryCollection`][albert.collections.inventory.InventoryCollection] (``client.inventory``).\n\n!!! example\n    ```python\n    from albert.resources.inventory import (\n        InventoryCategory,\n        InventoryDensity,\n        InventoryItem,\n        InventoryUnitCategory,\n    )\n\n    # Mass-based inventory item\n    item = InventoryItem(\n        name=\"Titanium Dioxide\",\n        category=InventoryCategory.RAW_MATERIALS,\n        company=\"Acme Chemicals\",\n    )\n\n    # Volume-based inventory item\n    volume_item = InventoryItem(\n        name=\"Isopropyl Alcohol\",\n        category=InventoryCategory.RAW_MATERIALS,\n        unit_category=InventoryUnitCategory.VOLUME,\n        density=InventoryDensity(value=0.785),\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "Tags": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/Tag"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A list of Tag objects or strings representing tags.",
          "title": "Tags"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The name of the item.",
          "title": "Name"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert Inventory ID (format ``INV...``). Set when the item is retrieved from or created in Albert. Serialized as ``albertId``.",
          "title": "Albertid"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A free-text description of the item.",
          "title": "Description"
        },
        "category": {
          "$ref": "#/$defs/InventoryCategory",
          "description": "The kind of material this item represents. Required. One of ``RawMaterials``, ``Consumables``, ``Equipment``, or ``Formulas``."
        },
        "unitCategory": {
          "anyOf": [
            {
              "$ref": "#/$defs/InventoryUnitCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The dimension the item is measured in (mass, volume, length, pressure, or units). If not supplied, it defaults from ``category``: mass for raw materials and formulas, units for equipment and consumables."
        },
        "density": {
          "anyOf": [
            {
              "$ref": "#/$defs/InventoryDensity"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The density in g/mL for volume-based inventory items. Required at creation when ``unit_category`` is volume. Locked at creation and cannot be changed."
        },
        "class": {
          "anyOf": [
            {
              "$ref": "#/$defs/SecurityClass"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The access/security class of the item (e.g. confidential, shared, restricted)."
        },
        "Company": {
          "anyOf": [
            {
              "$ref": "#/$defs/Company"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The manufacturing Company associated with the item (links to the Company collection). Accepts a [`Company`][albert.resources.companies.Company] or a name string; a string is turned into a Company that is first-or-created on save.",
          "title": "Company"
        },
        "minimum": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/InventoryMinimum"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Per-Location reorder thresholds for the item. See [`InventoryMinimum`][albert.resources.inventory.InventoryMinimum].",
          "title": "Minimum"
        },
        "alias": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "An alternate name for the item.",
          "title": "Alias"
        },
        "Cas": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/CasAmount"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The item's compositional breakdown as CAS amounts. See [`CasAmount`][albert.resources.inventory.CasAmount].",
          "title": "Cas"
        },
        "isFormulaOverride": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the substance/CAS-level breakdown for this formula has been overridden from the auto-calculated value; commonly set to indicate the formula is not a non-reactive homogeneous mixture.",
          "title": "Isformulaoverride"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom metadata fields. Allowed keys are defined by the workspace's CustomFields configuration.",
          "title": "Metadata"
        },
        "parentId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The parent Project ID. Required for Formulas. Serialized as ``parentId``.",
          "title": "Parentid"
        },
        "ACL": {
          "description": "Access-control entries governing who can act on the item.",
          "items": {
            "$ref": "#/$defs/ACL"
          },
          "title": "Acl",
          "type": "array"
        },
        "onHand": {
          "default": 0.0,
          "description": "Total amount currently on hand across all lots. Read-only.",
          "title": "Onhand",
          "type": "number"
        },
        "onHandL": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Total amount currently on hand across all lots in litres for volume-based items. Read-only.",
          "title": "Onhandl"
        },
        "TaskConfig": {
          "anyOf": [
            {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Task configuration associated with the item. Read-only.",
          "title": "Taskconfig"
        },
        "formulaId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The formula ID for a formula item. Read-only.",
          "title": "Formulaid"
        },
        "Symbols": {
          "anyOf": [
            {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard/pictogram symbols associated with the item. Read-only.",
          "title": "Symbols"
        },
        "unNumber": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The UN hazardous-material number, when applicable. Read-only.",
          "title": "Unnumber"
        },
        "recentAttachmentId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the most recent attachment on the item. Read-only. See Also --------",
          "title": "Recentattachmentid"
        }
      },
      "required": [
        "category"
      ],
      "title": "InventoryItem",
      "type": "object"
    },
    "InventoryMinimum": {
      "description": "A reorder threshold: the minimum stock of an [`InventoryItem`][albert.resources.inventory.InventoryItem] to keep at a Location.\n\nEach entry pairs one Location with the minimum quantity of an item that must be\nkept on hand there. An [`InventoryItem`][albert.resources.inventory.InventoryItem] may carry several of these, one per\nLocation. Identify the Location either by passing a full\n[`Location`][albert.resources.locations.Location] object as ``location`` (its ``id`` is\nthen copied onto ``id``), or by passing the location ``id`` string directly. Provide\none or the other, not both.\n\n!!! example\n    ```python\n    from albert.resources.inventory import InventoryMinimum\n\n    minimum = InventoryMinimum(id=\"LOC9999999\", minimum=500)\n    ```",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the Location this minimum applies to. Provide either a ``location`` or an ``id``; when ``location`` is given, this is set from it.",
          "title": "Id"
        },
        "location": {
          "anyOf": [
            {
              "$ref": "#/$defs/Location"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Location object this minimum applies to. Excluded from serialization. Provide either a ``location`` or an ``id``."
        },
        "minimum": {
          "description": "The minimum amount of the item that must be kept in stock at the Location. Must be between 0 and 1e15. See Also --------",
          "maximum": 1000000000000000,
          "minimum": 0,
          "title": "Minimum",
          "type": "number"
        }
      },
      "required": [
        "minimum"
      ],
      "title": "InventoryMinimum",
      "type": "object"
    },
    "InventoryUnitCategory": {
      "description": "The dimension of the unit an [`InventoryItem`][albert.resources.inventory.InventoryItem] is measured and stocked in.\n\nDetermines how quantities on hand and in formulas are interpreted. When not\nsupplied, the category defaults based on [`InventoryCategory`][albert.resources.inventory.InventoryCategory]: ``MASS``\nfor raw materials and formulas, ``UNITS`` for equipment and consumables.\n\nAttributes\n----------\nMASS : str\n    Measured by mass (e.g. grams, kilograms).\nVOLUME : str\n    Measured by volume (e.g. milliliters, liters). Supported for RawMaterials\n    and Consumables; requires ``density`` at creation.\nLENGTH : str\n    Measured by length (e.g. meters).\nPRESSURE : str\n    Measured by pressure.\nUNITS : str\n    Counted as discrete units (e.g. each item).",
      "enum": [
        "mass",
        "volume",
        "length",
        "pressure",
        "units"
      ],
      "title": "InventoryUnitCategory",
      "type": "string"
    },
    "JobSummary": {
      "description": "A brief summary of a background processing job.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The job identifier.",
          "title": "Id"
        },
        "state": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The current state of the job.",
          "title": "State"
        }
      },
      "title": "JobSummary",
      "type": "object"
    },
    "ListItem": {
      "description": "A single allowed value in a configurable list of options.\n\nList items back the choices offered by ``list``-type custom fields (e.g.\ndropdown options) and other fixed option sets in Albert. A\n[`CustomField`][albert.resources.custom_fields.CustomField] with\n[`LIST`][albert.resources.custom_fields.FieldType.LIST] defines a list (keyed\nby ``list_type``, typically the field's name); its selectable options are\n``ListItem`` records with a matching ``list_type``. Managed through\n[`ListsCollection`][albert.collections.lists.ListsCollection] (``client.lists``).\n\n!!! example\n    ```python\n    from albert.resources.lists import ListItem, ListItemCategory\n    item = ListItem(name=\"In Progress\", category=ListItemCategory.USER_DEFINED)\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The display name of the list item (the option value).",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the list item. Set when the item is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/ListItemCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The category of the list item. Allowed values are ``businessDefined``, ``userDefined``, ``projects``, ``extensions``, and ``inventory``."
        },
        "listType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The list this item belongs to. For a list-type custom field this is typically the field's name (see [`CustomField`][albert.resources.custom_fields.CustomField]). For built-in categories the allowed values are ``projectState`` for ``projects``, ``extensions`` for ``extensions``, and ``casCategory`` or ``inventoryFunction`` for ``inventory``.",
          "title": "Listtype"
        }
      },
      "required": [
        "name"
      ],
      "title": "ListItem",
      "type": "object"
    },
    "ListItemCategory": {
      "description": "The category a list item belongs to, which governs its allowed list types.\n\nAttributes\n----------\nBUSINESS_DEFINED : str\n    Predefined values managed at the business/organization level.\nUSER_DEFINED : str\n    Custom values defined by users.\nPROJECTS : str\n    Values used by projects (e.g. project states).\nEXTENSIONS : str\n    Values used by extensions.\nINVENTORY : str\n    Values used by inventory (e.g. CAS categories or inventory functions).",
      "enum": [
        "businessDefined",
        "userDefined",
        "projects",
        "extensions",
        "inventory"
      ],
      "title": "ListItemCategory",
      "type": "string"
    },
    "Location": {
      "description": "A physical lab or site location in Albert.\n\nLocations are referenced by Tasks and Inventory Items to record where an\nactivity is performed or where a material lives, and each Location can hold\none or more Storage Locations\n([`StorageLocation`][albert.resources.storage_locations.StorageLocation]). Managed\nthrough [`LocationCollection`][albert.collections.locations.LocationCollection].\n\n!!! example\n    ```python\n    from albert.resources.locations import Location\n    location = Location(\n        name=\"Boston Lab\",\n        latitude=42.3601,\n        longitude=-71.0589,\n        address=\"1 Main St\",\n        country=\"US\",\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The human-readable name of the location.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the location. Assigned by Albert and populated once the location has been created or retrieved.",
          "title": "Albertid"
        },
        "latitude": {
          "description": "The latitude of the location, in decimal degrees.",
          "title": "Latitude",
          "type": "number"
        },
        "longitude": {
          "description": "The longitude of the location, in decimal degrees.",
          "title": "Longitude",
          "type": "number"
        },
        "address": {
          "description": "The street address of the location.",
          "title": "Address",
          "type": "string"
        },
        "country": {
          "anyOf": [
            {
              "maxLength": 2,
              "minLength": 2,
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The two-letter country code of the location (for example, ``\"US\"``).",
          "title": "Country"
        }
      },
      "required": [
        "name",
        "latitude",
        "longitude",
        "address"
      ],
      "title": "Location",
      "type": "object"
    },
    "Operator": {
      "description": "A comparison operator constraining a numeric parameter value.\n\nUsed by [`ValueValidation`][albert.resources.parameter_groups.ValueValidation] to bound acceptable values. ``between``\ntakes ``min`` and ``max``; every single-bound operator takes ``value`` (e.g. ``gte``\nwith ``value=\"0\"`` requires the value to be at least 0).\n\nAttributes\n----------\nBETWEEN : str\n    Value must fall between ``min`` and ``max`` (inclusive).\nLESS_THAN : str\n    Value must be less than ``value``.\nLESS_THAN_OR_EQUAL : str\n    Value must be less than or equal to ``value``.\nGREATER_THAN_OR_EQUAL : str\n    Value must be greater than or equal to ``value``.\nGREATER_THAN : str\n    Value must be greater than ``value``.\nEQUALS : str\n    Value must equal ``value``.\nNOT_EQUALS : str\n    Not accepted by the API for parameter validations.",
      "enum": [
        "between",
        "lt",
        "lte",
        "gte",
        "gt",
        "eq",
        "neq"
      ],
      "title": "Operator",
      "type": "string"
    },
    "PGType": {
      "description": "The kind of task a [`ParameterGroup`][albert.resources.parameter_groups.ParameterGroup] relates to.\n\nA Parameter Group is about making a sample and/or prepping it for measurement,\nand its type records which sort of task it is used in.\n\nAttributes\n----------\nGENERAL : str\n    A group used in a general lab task (anything that is not a batch or\n    property task).\nBATCH : str\n    A group used in a Batch Task ([`BatchTask`][albert.resources.tasks.BatchTask]),\n    e.g. a mixing step when manufacturing a batch.\nPROPERTY : str\n    A group used in a property (measurement) task to prep a sample for testing.",
      "enum": [
        "general",
        "batch",
        "property"
      ],
      "title": "PGType",
      "type": "string"
    },
    "Parameter": {
      "description": "The definition of a single experimental condition or input variable.\n\nA Parameter (ID format ``PRM...``) names an \"indirect variable\" such as\nTemperature, Spin Speed, or Instrument. The Parameter itself only defines the\nvariable; its actual value and unit are fixed to a setpoint later, inside a\n[`Workflow`][albert.resources.workflows.Workflow]. Parameters are the building\nblocks of Parameter Groups\n([`ParameterGroup`][albert.resources.parameter_groups.ParameterGroup]) and form the\nparameter side of Data Templates\n([`DataTemplate`][albert.resources.data_templates.DataTemplate]).\n\nManage parameters through\n[`ParameterCollection`][albert.collections.parameters.ParameterCollection]\n(``client.parameters``).\n\n!!! example\n    ```python\n    from albert import Albert\n    from albert.resources.parameters import Parameter\n    client = Albert()\n    param = client.parameters.create(parameter=Parameter(name=\"Temperature\"))\n    param.id\n    # 'PRM9999999'\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The name of the parameter. Names must be unique.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the parameter (format ``PRM...``). Set when the parameter is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional user-defined metadata keyed by field name.",
          "title": "Metadata"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/ParameterCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the parameter is ``Normal`` (scalar value) or ``Special`` (entity reference). Set by the platform and read-only."
        },
        "rank": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The rank of the returned parameter. Read-only.",
          "title": "Rank"
        },
        "required": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether this parameter must be filled in within a Parameter Group.",
          "title": "Required"
        }
      },
      "required": [
        "name"
      ],
      "title": "Parameter",
      "type": "object"
    },
    "ParameterCategory": {
      "description": "Whether a [`Parameter`][albert.resources.parameters.Parameter]'s value is a plain scalar or an entity reference.\n\nSet by the platform and read-only. It determines how a parameter's value is\ninterpreted when a setpoint is assigned to it inside a\n[`Workflow`][albert.resources.workflows.Workflow].\n\nAttributes\n----------\nNORMAL : str\n    A \"normal\" parameter whose value is a plain scalar (e.g. a number or text),\n    such as Temperature or Spin Speed.\nSPECIAL : str\n    A \"special\" parameter whose value references another entity (e.g. Equipment,\n    a Consumable, or a Template). The setpoint value is that entity's ID rather\n    than a plain scalar.",
      "enum": [
        "Normal",
        "Special"
      ],
      "title": "ParameterCategory",
      "type": "string"
    },
    "ParameterGroup": {
      "description": "A reusable set of parameters (PRG) for making or prepping a sample.\n\nA Parameter Group bundles [`Parameter`][albert.resources.parameters.Parameter]\nentities, along with their values, units, and validation rules, into a reusable\nunit. Whereas a Data Template's parameters relate to a given measurement, a\nParameter Group is about *making* the sample and/or *prepping* it for\nmeasurement (e.g. a mixing step or a cure schedule). Some groups drive Batch\nTasks ([`BatchTask`][albert.resources.tasks.BatchTask]); others are stacked within a\ntask. A group's parameters, together with a Data Template's parameters, are\nfixed to setpoints inside a [`Workflow`][albert.resources.workflows.Workflow].\n\nOnce saved, a group is referenced by its Parameter Group ID (format ``PRG...``,\ne.g. ``\"PRG9999999\"``). Store test standards (e.g. ASTM or ISO) under the\n``\"Standards\"`` key of ``metadata``.\n\nGroups are managed through\n[`ParameterGroupCollection`][albert.collections.parameter_groups.ParameterGroupCollection]\n(``client.parameter_groups``).\n\n!!! example\n    ```python\n    from albert.resources.parameter_groups import (\n        ParameterGroup,\n        ParameterValue,\n        PGType,\n    )\n\n    pg = ParameterGroup(\n        name=\"Mixing Step\",\n        type=PGType.BATCH,\n        parameters=[ParameterValue(id=\"PRM9999999\", value=\"500\")],\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "Tags": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/Tag"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A list of Tag objects or strings representing tags.",
          "title": "Tags"
        },
        "name": {
          "description": "The name of the parameter group. Required.",
          "title": "Name",
          "type": "string"
        },
        "type": {
          "anyOf": [
            {
              "$ref": "#/$defs/PGType"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The kind of task the group relates to (``general``, ``batch``, or ``property``)."
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert Parameter Group ID (format ``PRG...``). Set when the group is retrieved from or created in Albert. Serialized as ``albertId``.",
          "title": "Albertid"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A free-text description of the group.",
          "title": "Description"
        },
        "class": {
          "$ref": "#/$defs/SecurityClass",
          "default": "restricted",
          "description": "The access/security class of the group. Defaults to ``RESTRICTED``. Serialized as ``class``."
        },
        "ACL": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/User"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Access-control entries governing who can act on the group. Serialized as ``ACL``.",
          "title": "Acl"
        },
        "Metadata": {
          "additionalProperties": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "integer"
              },
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/EntityLinkWithName"
              },
              {
                "$ref": "#/$defs/EntityLink"
              },
              {
                "items": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/EntityLinkWithName"
                    },
                    {
                      "$ref": "#/$defs/EntityLink"
                    }
                  ]
                },
                "type": "array"
              }
            ]
          },
          "description": "Custom metadata fields. Test standards are stored under the ``\"Standards\"`` key. Serialized as ``Metadata``.",
          "title": "Metadata",
          "type": "object"
        },
        "Parameters": {
          "description": "The parameters in the group, each with its value, unit, and validation. See [`ParameterValue`][albert.resources.parameter_groups.ParameterValue]. Serialized as ``Parameters``.",
          "items": {
            "$ref": "#/$defs/ParameterValue"
          },
          "title": "Parameters",
          "type": "array"
        },
        "verified": {
          "default": false,
          "description": "Whether the group has been verified (an approval/governance state). Read-only.",
          "title": "Verified",
          "type": "boolean"
        },
        "Documents": {
          "description": "Documents (e.g. SOPs) associated with the group. Read-only. Deserialized from ``Documents``.",
          "items": {
            "$ref": "#/$defs/EntityLink"
          },
          "title": "Documents",
          "type": "array"
        }
      },
      "required": [
        "name"
      ],
      "title": "ParameterGroup",
      "type": "object"
    },
    "ParameterGroupSetpoints": {
      "description": "All parameter setpoints belonging to one Data Template or Parameter Group.\n\nA workflow is organized by group: each [`ParameterGroupSetpoints`][albert.resources.workflows.ParameterGroupSetpoints] names one\nData Template or Parameter Group (by ``id`` or by a full ``parameter_group`` object)\nand carries the [`ParameterSetpoint`][albert.resources.workflows.ParameterSetpoint] list for the parameters in it. A\n[`Workflow`][albert.resources.workflows.Workflow] holds one of these per group. Both the order of setpoints within a\ngroup and the order of groups within the workflow are part of what makes a workflow\nunique, so preserve the order you intend. Group ``sequence`` is read-only; list order\nalone defines group ordering when creating workflows. Setpoint ``sequence`` is also\nread-only (see [`ParameterSetpoint`][albert.resources.workflows.ParameterSetpoint]).\n\n!!! example\n    ```python\n    from albert.resources.workflows import (\n        ParameterGroupSetpoints,\n        ParameterSetpoint,\n    )\n\n    group = ParameterGroupSetpoints(\n        id=\"PRG9999999\",\n        parameter_setpoints=[\n            ParameterSetpoint(parameter_id=\"PRM9999999\", value=\"25\"),\n        ],\n    )\n    ```",
      "properties": {
        "parameter_group": {
          "anyOf": [
            {
              "$ref": "#/$defs/ParameterGroup"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The parameter group to set setpoints on. Provide either ``parameter_group`` or ``id``. If both are given they must refer to the same group."
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the parameter group (``PRG...``) or Data Template (``DAT...``). Provide either ``id`` or ``parameter_group``. Auto-filled from ``parameter_group`` when one is provided.",
          "title": "Id"
        },
        "name": {
          "default": "Pre-linked Parameters",
          "description": "Read-only display name of the group (defaults to ``\"Pre-linked Parameters\"``).",
          "title": "Name",
          "type": "string"
        },
        "Parameters": {
          "description": "The setpoints to apply to this group's parameters.",
          "items": {
            "$ref": "#/$defs/ParameterSetpoint"
          },
          "title": "Parameters",
          "type": "array"
        },
        "rowId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Read-only. The group's interval row ID.",
          "title": "Rowid"
        },
        "prgSequence": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Read-only. Order of this group within the workflow. Assigned from list order when creating workflows; do not set.",
          "title": "Prgsequence"
        }
      },
      "title": "ParameterGroupSetpoints",
      "type": "object"
    },
    "ParameterSetpoint": {
      "description": "The fixed value (or set of interval values) for one parameter within a workflow.\n\nA setpoint pins a single parameter to a condition. Provide either a single ``value``\n(plus ``unit`` where applicable) for a fixed setpoint, or a list of ``intervals`` to\nintervalize the parameter across several values. You must identify the parameter by\npassing either a full ``parameter`` object or its ``parameter_id``. Setpoints are\ngrouped under a [`ParameterGroupSetpoints`][albert.resources.workflows.ParameterGroupSetpoints], which is in turn placed on a\n[`Workflow`][albert.resources.workflows.Workflow].\n\nNormal parameters take exactly one of ``value`` or ``intervals``. Special parameters\n(Equipment, Consumables, Templates) take an entity ID as their value.\n\n``sequence`` is read-only: do not set it when building a workflow for\n[`create`][albert.collections.workflows.WorkflowCollection.create]. Provide the parent\ngroup's ``id`` (``PRG...`` or ``DAT...``) on\n[`ParameterGroupSetpoints`][albert.resources.workflows.ParameterGroupSetpoints]; the SDK\nresolves each setpoint's row id from that group before create.\n\n!!! example\n    ```python\n    from albert.resources.parameters import ParameterCategory\n    from albert.resources.workflows import ParameterSetpoint, Interval\n\n    # A single fixed setpoint identified by parameter ID.\n    temp = ParameterSetpoint(parameter_id=\"PRM9999999\", value=\"25\")\n\n    # The same parameter intervalized across two values.\n    temp_varied = ParameterSetpoint(\n        parameter_id=\"PRM9999999\",\n        intervals=[\n            Interval(value=\"25\", unit={\"id\": \"UNI9999999\"}),\n            Interval(value=\"60\", unit={\"id\": \"UNI9999999\"}),\n        ],\n    )\n\n    # A Special parameter (an inventory item) takes the item's id as its value;\n    # short_name is only sent for Special parameters.\n    equipment = ParameterSetpoint(\n        parameter_id=\"PRM3\",\n        category=ParameterCategory.SPECIAL,\n        value={\"id\": \"INV9999999\"},\n        short_name=\"Oven\",\n    )\n    ```",
      "properties": {
        "parameter": {
          "anyOf": [
            {
              "$ref": "#/$defs/Parameter"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The parameter to set. Provide either ``parameter`` or ``parameter_id``. If both are given they must refer to the same parameter."
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The value of the setpoint. For a Special parameter (an inventory item), provide the item's [`EntityLink`][albert.core.shared.models.base.EntityLink] (or a mapping with an ``id``). Mutually exclusive with ``intervals`` for Normal parameters.",
          "title": "Value"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit of ``value``, where applicable.",
          "title": "Unit"
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the parameter (e.g. ``\"PRM9999999\"``). Provide either ``parameter`` or ``parameter_id``.",
          "title": "Id"
        },
        "Intervals": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/Interval"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The interval values when the parameter is intervalized. Provide either ``intervals`` or ``value`` (plus ``unit``), not both.",
          "title": "Intervals"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/ParameterCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The category of the parameter: ``SPECIAL`` for an inventory item (Equipment, Consumable, Template), ``NORMAL`` for everything else."
        },
        "shortName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The short / display name of the parameter. Only sent on create for ``SPECIAL``-category parameters; the platform rejects ``shortName`` on Normal parameters, so the SDK drops it there.",
          "title": "Shortname"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The parameter name. Auto-filled from ``parameter`` when one is provided.",
          "title": "Name"
        },
        "rowId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Read-only. The row ID of this parameter with respect to its interval row.",
          "title": "Rowid"
        },
        "prgPrmRowId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Read-only. Maps this setpoint to its row in the parent Data Template or Parameter Group. Populated by the SDK during [`create`][albert.collections.workflows.WorkflowCollection.create]; do not set when building workflows.",
          "title": "Prgprmrowid"
        }
      },
      "title": "ParameterSetpoint",
      "type": "object"
    },
    "ParameterValue": {
      "description": "A single [`Parameter`][albert.resources.parameters.Parameter] and its value within a [`ParameterGroup`][albert.resources.parameter_groups.ParameterGroup].\n\nA ``ParameterValue`` binds one Parameter to the value, unit, and validation\nrules it takes inside a group. Each entry must reference an existing Parameter,\nso provide exactly one of ``id`` (the Parameter's Albert ID) or ``parameter``\n(the [`Parameter`][albert.resources.parameters.Parameter] object itself); when a\n``parameter`` is given, the ``id``, ``category``, and ``name`` are populated\nfrom it. Values are later fixed to setpoints inside a\n[`Workflow`][albert.resources.workflows.Workflow].\n\n!!! example\n    ```python\n    from albert.resources.parameter_groups import ParameterValue\n\n    # Reference the parameter by its Albert ID\n    value = ParameterValue(id=\"PRM9999999\", value=\"500\")\n    ```",
      "properties": {
        "parameter": {
          "anyOf": [
            {
              "$ref": "#/$defs/Parameter"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Parameter this value is associated with. Provide either ``id`` or ``parameter``. Excluded from serialization."
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the associated Parameter. Provide either ``id`` or ``parameter``.",
          "title": "Id"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/ParameterCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The category of the parameter (``Normal`` or ``Special``). Populated from ``parameter`` when one is provided. When only ``id`` is given, the parameter-group create API rejects the payload (``400 \"Category mismatch ... Category undefined expected\"``), so set ``category`` explicitly (``ParameterCategory.NORMAL`` for ordinary parameters) or pass the full ``parameter`` object."
        },
        "specialType": {
          "anyOf": [
            {
              "$ref": "#/$defs/SpecialParameterType"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The specific entity type for a ``Special`` parameter. ``None`` for ``Normal`` parameters. The platform does not validate this field on create the way it validates ``category``, so omitting it does not cause a 400."
        },
        "shortName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A short name for the parameter value. Serialized as ``shortName``.",
          "title": "Shortname"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/InventoryItem"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "$ref": "#/$defs/User"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The value of the parameter. Can be a plain string, an [`InventoryItem`][albert.resources.inventory.InventoryItem] (e.g. when the parameter represents an instrument choice), or a [`User`][albert.resources.users.User] (e.g. a user reference such as \"Performed By\").",
          "title": "Value"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit of measure for the value. Serialized as ``Unit``.",
          "title": "Unit"
        },
        "Added": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "required": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether this parameter is required. Defaults to False.",
          "title": "Required"
        },
        "validation": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/ValueValidation"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Validation rules applied to the value. See [`ValueValidation`][albert.resources.parameter_groups.ValueValidation].",
          "title": "Validation"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The name of the parameter. Read-only.",
          "title": "Name"
        },
        "sequence": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The sequence of the parameter within the group. Read-only.",
          "title": "Sequence"
        },
        "originalShortName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Originalshortname"
        },
        "originalName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Originalname"
        }
      },
      "title": "ParameterValue",
      "type": "object"
    },
    "PropertyData": {
      "description": "A single stored result value together with any rich-media backing data.\n\nReturned by the API as part of a [`PropertyValue`][albert.resources.property_data.PropertyValue]. For simple numeric or\ntext results only ``value`` is populated; for image and curve data columns the\nadditional fields carry the uploaded file references and processing metadata.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of this property data record (format ``PTD...``).",
          "title": "Id"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The stored result value. All values are stored as strings in Albert.",
          "title": "Value"
        },
        "valueNumeric": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The numeric form of the value, when the column is numeric. Serialized as ``valueNumeric``.",
          "title": "Valuenumeric"
        },
        "valueString": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The string form of the value, when the column is string-typed. Serialized as ``valueString``.",
          "title": "Valuestring"
        },
        "valueType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The type of the value (e.g. numeric, string, image, curve). Serialized as ``valueType``.",
          "title": "Valuetype"
        },
        "s3Key": {
          "anyOf": [
            {
              "$ref": "#/$defs/PropertyDataStorageKey"
            },
            {
              "$ref": "#/$defs/StorageKeyReference"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Storage references for uploaded media (image previews/thumbnails or curve files). Serialized as ``s3Key``.",
          "title": "S3Key"
        },
        "job": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Processing job metadata, used for curve/image ingestion.",
          "title": "Job"
        },
        "csvMapping": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Mapping from CSV headers to curve result identifiers, for curve data. Serialized as ``csvMapping``.",
          "title": "Csvmapping"
        },
        "curveRemarks": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Remarks associated with curve data. Serialized as ``curveRemarks``.",
          "title": "Curveremarks"
        },
        "athena": {
          "anyOf": [
            {
              "additionalProperties": true,
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Backing analytical store metadata for curve data. See Also --------",
          "title": "Athena"
        }
      },
      "title": "PropertyData",
      "type": "object"
    },
    "PropertyDataInventoryInformation": {
      "description": "The inventory item and lot a task's property data was measured against.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Id"
        },
        "lotId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Lotid"
        }
      },
      "title": "PropertyDataInventoryInformation",
      "type": "object"
    },
    "PropertyDataStorageKey": {
      "description": "Storage references (preview, thumbnail, original) for an uploaded media file.",
      "properties": {
        "preview": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Preview"
        },
        "thumb": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Thumb"
        },
        "original": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Original"
        }
      },
      "title": "PropertyDataStorageKey",
      "type": "object"
    },
    "PropertyValue": {
      "description": "A measured result for one data column, with its value, unit, and metadata.\n\nAppears inside a [`Trial`][albert.resources.property_data.Trial] (as one of its ``data_columns``) and represents\nthe value captured for a single data column of a data template. Both a numeric\nand a string form of the value may be present depending on the column type.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Identifier of the result within the trial.",
          "title": "Id"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The data column / result name.",
          "title": "Name"
        },
        "sequence": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Pointer to the specific data (result) column; more unique than a data column ID because a data column can be repeated within a Data Template (analogous to a parameter repeated in a Parameter Group).",
          "title": "Sequence"
        },
        "calculation": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional calculation expression used in place of a fixed value; may reference other result columns (e.g. ``=((COL3-COL1)/COL2)*100``). The result is computed and shown in the UI.",
          "title": "Calculation"
        },
        "valueNumeric": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The numeric form of the value. Serialized as ``valueNumeric``.",
          "title": "Valuenumeric"
        },
        "valueString": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The string form of the value. Serialized as ``valueString``.",
          "title": "Valuestring"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The stored value.",
          "title": "Value"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "additionalProperties": true,
              "type": "object"
            }
          ],
          "description": "The unit of measure for the value, as an entity link. Serialized as ``Unit``.",
          "title": "Unit"
        },
        "PropertyData": {
          "anyOf": [
            {
              "$ref": "#/$defs/PropertyData"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The backing stored value / media record. Serialized as ``PropertyData``."
        },
        "dataColumnUniqueId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unique ID of the data column this result captures. Serialized as ``dataColumnUniqueId``.",
          "title": "Datacolumnuniqueid"
        },
        "hidden": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": false,
          "description": "Whether the result is hidden. See Also --------",
          "title": "Hidden"
        }
      },
      "title": "PropertyValue",
      "type": "object"
    },
    "Role": {
      "description": "A named set of access permissions within a tenant.\n\nA role bundles policies that determine what a holder is allowed to do. Roles\nare assigned to users ([`User`][albert.resources.users.User]) and referenced\nby entity ACLs. Roles are typically read from Albert rather than built by\nhand.",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the role. Role IDs may contain ``#`` characters. Set once the role is retrieved from Albert.",
          "title": "Albertid"
        },
        "name": {
          "description": "The display name of the role.",
          "title": "Name",
          "type": "string"
        },
        "Policies": {
          "anyOf": [
            {
              "items": {},
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The policies (permission rules) associated with the role.",
          "title": "Policies"
        },
        "tenant": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the tenant the role belongs to. Omitted on role-only (id-filtered) responses.",
          "title": "Tenant"
        },
        "visibility": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the role is visible in the platform's role listings.",
          "title": "Visibility"
        }
      },
      "required": [
        "name"
      ],
      "title": "Role",
      "type": "object"
    },
    "SecurityClass": {
      "description": "The security (access control) class of a resource.\n\nAttributes\n----------\nSHARED : str\n    Accessible to all members of the tenant.\nRESTRICTED : str\n    Access is restricted to specific teams or users.\nCONFIDENTIAL : str\n    Access is limited to designated users only.\nPRIVATE : str\n    Visible only to the owner. Used by Projects.\nPUBLIC : str\n    Accessible publicly. Returned by Parameter Groups.",
      "enum": [
        "shared",
        "restricted",
        "confidential",
        "private",
        "public"
      ],
      "title": "SecurityClass",
      "type": "string"
    },
    "SpecialParameterType": {
      "description": "The specific entity type referenced by a Special\n[`Parameter`][albert.resources.parameters.Parameter].\n\nNot returned by the platform parameter API (use Zeus reports RET48/RET52 to\nread the subtype from experiment data). Writable on\n[`ParameterValue`][albert.resources.parameter_groups.ParameterValue] and\n[`TargetParameter`][albert.resources.targets.TargetParameter].\n\nEach member implies an id-namespace for the value column in experiment reports\n(RET48/RET52): ``RAW_MATERIALS`` values carry ``INVA...`` ids, ``CONSUMABLES``\ncarry ``INVB...`` ids, ``EQUIPMENT`` carry ``INVC...`` ids, and ``FORMULAS``\ncarry ``INVMO...`` ids.\n\nMirrors [`InventoryCategory`][albert.resources.inventory.InventoryCategory],\nthe canonical \"kind of material\" an\n[`InventoryItem`][albert.resources.inventory.InventoryItem] belongs to. A\nSpecial parameter's value is always a reference to an `InventoryItem`, so its\nsubtype is one of that enum's members.\n\nAttributes\n----------\nRAW_MATERIALS : str\n    A raw material entity. Values appear as ``INVA...`` ids in report columns.\nCONSUMABLES : str\n    A consumable entity. Values appear as ``INVB...`` ids in report columns.\nEQUIPMENT : str\n    An equipment entity. Values appear as ``INVC...`` ids in report columns.\nFORMULAS : str\n    A formula entity (a mixture designed through a Worksheet). Values appear\n    as ``INVMO...`` ids in report columns.",
      "enum": [
        "RawMaterials",
        "Consumables",
        "Equipment",
        "Formulas"
      ],
      "title": "SpecialParameterType",
      "type": "string"
    },
    "Status": {
      "description": "The status of a resource.\n\nAttributes\n----------\nACTIVE : str\n    The resource is fully operational and visible in normal operations.\nINACTIVE : str\n    The resource is hidden from normal operations and disabled from use.",
      "enum": [
        "active",
        "inactive"
      ],
      "title": "Status",
      "type": "string"
    },
    "StorageKeyReference": {
      "description": "S3 storage key references for a data column file result.",
      "properties": {
        "rawfile": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The raw file storage key.",
          "title": "Rawfile"
        },
        "s3Input": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the input file.",
          "title": "S3Input"
        },
        "s3Output": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the processed output file.",
          "title": "S3Output"
        },
        "preview": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a preview image.",
          "title": "Preview"
        },
        "thumb": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a thumbnail image.",
          "title": "Thumb"
        },
        "original": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the original file.",
          "title": "Original"
        }
      },
      "title": "StorageKeyReference",
      "type": "object"
    },
    "Tag": {
      "description": "A freeform text label used to categorize and connect entities.\n\nTags are shared by name across the platform and can be applied to inventory\nitems, companies, tasks, and other records to group and filter them. Managed\nthrough [`TagCollection`][albert.collections.tags.TagCollection] (``client.tags``);\nthe usual entry point is [`get_or_create`][albert.collections.tags.TagCollection.get_or_create].\n\n!!! example\n    ```python\n    from albert.resources.tags import Tag\n    tag = Tag(tag=\"high-priority\")\n    ```\nMethods\n-------\nfrom_string(tag) -> Tag\n    Build a Tag from its name string.",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The name of the tag (its text label).",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the tag (format ``TAG...``). Set when the tag is retrieved from or created in Albert. Methods ------- from_string(tag) -> Tag Build a Tag from its name string.",
          "title": "Albertid"
        }
      },
      "required": [
        "name"
      ],
      "title": "Tag",
      "type": "object"
    },
    "Trial": {
      "description": "One replicate measurement of a given interval combination.\n\nA trial holds the set of [`PropertyValue`][albert.resources.property_data.PropertyValue] results recorded for one row of\ndata under a [`DataInterval`][albert.resources.property_data.DataInterval]. Multiple trials under the same interval are\nrepeat measurements of the same parameter setpoints.",
      "properties": {
        "trialNo": {
          "description": "The trial (row) number. Serialized as ``trialNo``.",
          "title": "Trialno",
          "type": "integer"
        },
        "visibleTrialNo": {
          "default": 1,
          "description": "The relative row number shown to users. Serialized as ``visibleTrialNo``.",
          "title": "Visibletrialno",
          "type": "integer"
        },
        "void": {
          "default": false,
          "description": "Whether this trial has been voided.",
          "title": "Void",
          "type": "boolean"
        },
        "backEndTrialNo": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Internal trial identifier. Serialized as ``backEndTrialNo``.",
          "title": "Backendtrialno"
        },
        "DataColumns": {
          "description": "The results measured in this trial, one per data column. Serialized as ``DataColumns``. See Also --------",
          "items": {
            "$ref": "#/$defs/PropertyValue"
          },
          "title": "Datacolumns",
          "type": "array"
        }
      },
      "required": [
        "trialNo"
      ],
      "title": "Trial",
      "type": "object"
    },
    "Unit": {
      "description": "A unit of measure (e.g. ``g``, ``mL``, ``\u00b0C``).\n\nUnits qualify quantities throughout the platform: inventory amounts,\nparameter values, and property results. Managed through\n[`UnitCollection`][albert.collections.units.UnitCollection] (``client.units``).\n\n!!! example\n    ```python\n    from albert.resources.units import Unit, UnitCategory\n    unit = Unit(name=\"milliliter\", symbol=\"mL\", category=UnitCategory.LIQUID_VOLUME)\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the unit (format ``UNI...``). Set when the unit is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "name": {
          "description": "Currently this is the only field that is displayed in Albert, so use this for display purposes. Therefore, users often use the symbol for the unit here as that's the preferred display.",
          "title": "Name",
          "type": "string"
        },
        "symbol": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display symbol for the unit (e.g. ``\"g\"``).",
          "title": "Symbol"
        },
        "Synonyms": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Alternate names or spellings that also refer to this unit.",
          "title": "Synonyms"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/UnitCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The physical quantity the unit measures (e.g. ``Mass``, ``Volume``)."
        },
        "verified": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": false,
          "description": "Whether the unit has been verified in Albert. Read-only.",
          "title": "Verified"
        }
      },
      "required": [
        "name"
      ],
      "title": "Unit",
      "type": "object"
    },
    "UnitCategory": {
      "description": "The physical quantity a unit measures.\n\nAttributes\n----------\nLENGTH : str\n    Length units (e.g. m, cm).\nVOLUME : str\n    Volume units (e.g. m\u00b3).\nLIQUID_VOLUME : str\n    Liquid volume units (e.g. L, mL).\nANGLES : str\n    Angle units (e.g. degrees, radians).\nTIME : str\n    Time units (e.g. s, h).\nFREQUENCY : str\n    Frequency units (e.g. Hz).\nMASS : str\n    Mass units (e.g. g, kg).\nCURRENT : str\n    Electric current units (e.g. A).\nTEMPERATURE : str\n    Temperature units (e.g. \u00b0C, K).\nAMOUNT : str\n    Amount of substance units (e.g. mol).\nLUMINOSITY : str\n    Luminous intensity units (e.g. cd).\nFORCE : str\n    Force units (e.g. N).\nENERGY : str\n    Energy units (e.g. J).\nPOWER : str\n    Power units (e.g. W).\nPRESSURE : str\n    Pressure units (e.g. Pa, bar).\nELECTRICITY_AND_MAGNETISM : str\n    Electricity and magnetism units.\nOTHER : str\n    Units that do not fit another category.\nWEIGHT : str\n    Weight units.\nAREA : str\n    Area units (e.g. m\u00b2).\nSURFACE_AREA : str\n    Surface area units.\nBINARY : str\n    Binary/digital-information units (e.g. bytes).\nCAPACITANCE : str\n    Capacitance units (e.g. F).\nSPEED : str\n    Speed units (e.g. m/s).\nELECTRICAL_CONDUCTIVITY : str\n    Electrical conductivity units.\nELECTRICAL_PERMITTIVITY : str\n    Electrical permittivity units.\nDENSITY : str\n    Density units (e.g. g/mL).\nRESISTANCE : str\n    Electrical resistance units (e.g. \u03a9).",
      "enum": [
        "Length",
        "Volume",
        "Liquid volume",
        "Angles",
        "Time",
        "Frequency",
        "Mass",
        "Electric current",
        "Temperature",
        "Amount of substance",
        "Luminous intensity",
        "Force",
        "Energy",
        "Power",
        "Pressure",
        "Electricity and magnetism",
        "Other",
        "Weight",
        "Area",
        "Surface Area",
        "Binary",
        "Capacitance",
        "Speed",
        "Electrical conductivity",
        "Electrical permitivitty",
        "Density",
        "Resistance"
      ],
      "title": "UnitCategory",
      "type": "string"
    },
    "User": {
      "description": "An Albert user account: a person who can log in and act in the platform.\n\nA user has a name and email, an optional home\n[`Location`][albert.resources.locations.Location], and a set of\n[`Role`][albert.resources.roles.Role] objects that govern what they can do.\nThe ``user_class`` sets a broad permission tier\n([`UserClass`][albert.resources.users.UserClass]). Users are grouped into teams\n([`Team`][albert.resources.teams.Team]), and are referenced across the\nplatform, for example as the assignee of a Task or in an entity's ACL.\n\n!!! example\n    ```python\n    from albert.resources.users import User, UserClass\n    user = User(\n        name=\"Ada Lovelace\",\n        email=\"ada@example.com\",\n        user_class=UserClass.STANDARD,\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The display name of the user.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert User ID (format ``USR...``). Set once the user is registered in or retrieved from Albert.",
          "title": "Albertid"
        },
        "Location": {
          "anyOf": [
            {
              "$ref": "#/$defs/Location"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The user's home location.",
          "title": "Location"
        },
        "email": {
          "default": null,
          "description": "The user's email address.",
          "format": "email",
          "title": "Email",
          "type": "string"
        },
        "Roles": {
          "description": "The roles the user holds, which determine their permissions.",
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/Role"
              },
              {
                "$ref": "#/$defs/EntityLink"
              }
            ]
          },
          "maxItems": 1,
          "title": "Roles",
          "type": "array"
        },
        "userClass": {
          "$ref": "#/$defs/UserClass",
          "default": "standard",
          "description": "The ACL class level of the user (broad permission tier)."
        },
        "witnesser": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the user can act as a witness on tasks (only relevant when witnessing is enabled for the tenant).",
          "title": "Witnesser"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom metadata attached to the user.",
          "title": "Metadata"
        }
      },
      "required": [
        "name"
      ],
      "title": "User",
      "type": "object"
    },
    "UserClass": {
      "description": "The ACL class level of a user, setting a broad permission tier.\n\nAttributes\n----------\nGUEST : str\n    Most limited access; typically external or temporary users.\nSTANDARD : str\n    Default access level for regular users.\nTRUSTED : str\n    Elevated access above standard users.\nPRIVILEGED : str\n    High access level below full administrators.\nADMIN : str\n    Full administrative access to the tenant.",
      "enum": [
        "guest",
        "standard",
        "trusted",
        "privileged",
        "admin"
      ],
      "title": "UserClass",
      "type": "string"
    },
    "ValueValidation": {
      "description": "A validation rule constraining a [`ParameterValue`][albert.resources.parameter_groups.ParameterValue].\n\nDeclares the expected [`DataType`][albert.resources.parameter_groups.DataType] for a parameter value and, optionally,\nthe bounds or allowed options it must satisfy. Attach one or more of these to a\n[`ParameterValue`][albert.resources.parameter_groups.ParameterValue] via its ``validation`` field.\n\nWhen ``datatype`` is ``date`` or ``timestamp``, ``value``, ``min``, and ``max`` are\nstrings in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].\n\n!!! example\n    ```python\n    from albert.resources.parameter_groups import (\n        DataType,\n        Operator,\n        ValueValidation,\n    )\n\n    rule = ValueValidation(\n        datatype=DataType.NUMBER,\n        operator=Operator.BETWEEN,\n        min=\"0\",\n        max=\"100\",\n    )\n    ```",
      "properties": {
        "datatype": {
          "$ref": "#/$defs/DataType",
          "description": "The data type the value must conform to. Required."
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "items": {
                "$ref": "#/$defs/EnumValidationValue"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "For ``ENUM`` types, the list of allowed options (see [`EnumValidationValue`][albert.resources.parameter_groups.EnumValidationValue]); otherwise the bound for single-bound operators (``lt``, ``lte``, ``gt``, ``gte``, ``eq``). For ``date`` and ``timestamp`` types, a string in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].",
          "title": "Value"
        },
        "min": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The lower bound, used only with ``operator=\"between\"``. For numeric types, a numeric string; for ``date`` and ``timestamp`` types, a string in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].",
          "title": "Min"
        },
        "max": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The upper bound, used only with ``operator=\"between\"``. For numeric types, a numeric string; for ``date`` and ``timestamp`` types, a string in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].",
          "title": "Max"
        },
        "operator": {
          "anyOf": [
            {
              "$ref": "#/$defs/Operator"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The comparison operator: ``between`` uses ``min`` and ``max``; the others use ``value``."
        }
      },
      "required": [
        "datatype"
      ],
      "title": "ValueValidation",
      "type": "object"
    },
    "Workflow": {
      "description": "A specific set of parameter setpoints: the independent variables of a test.\n\nA workflow (WFL) captures only the *independent variables* of a test, the parameters and\nthe setpoints (a value, plus a unit where applicable) they are fixed to. It is built from\none or more groupings of parameters, where each grouping is either a Data Template that\nhas pre-linked parameters or a Parameter Group. A single workflow can combine several\ngroupings, for example one Data Template's pre-linked parameters together with a couple of\nParameter Groups, each contributing its own parameter setpoints. Because a Data Template\ncan carry pre-linked parameters, it is used here exactly like a Parameter Group: purely to\ndescribe a set of parameters and their setpoints.\n\nA workflow does NOT include a Data Template's Data Columns (also called Results). Those are\nthe *dependent variables*, and they are recorded only in Property Data\n([`TaskPropertyData`][albert.resources.property_data.TaskPropertyData]). In short: the Workflow holds\nthe independent variables; Property Data holds the dependent variables (the measured\nresults).\n\nA workflow is uniquely identified by its full setpoint configuration: the value and\nunit of every setpoint, the order of parameters within each Data Template / Parameter\nGroup, and the order of those groups within the workflow. For this reason workflows are\n*found-or-created* rather than blindly created: build the object you want and pass it to\n[`create`][albert.collections.workflows.WorkflowCollection.create], which returns the\nexisting match or makes a new one. IDs look like ``WFL...``.\n\nEvery tenant includes a built-in workflow ``WFL1`` (\"No Parameter Group\") with no\nparameter groups or setpoints. Use it when a task or block does not involve parameter\ngroups; it does not need to be created via\n[`create`][albert.collections.workflows.WorkflowCollection.create].\n\nWhen parameters are intervalized, the workflow acts as a *parent* that carries\nthe resulting [`IntervalCombination`][albert.resources.workflows.IntervalCombination] entries. Each combination has an interval ID of\nthe form ``ROW1`` (one intervalized parameter) or ``ROW1XROW2X...`` (product of several). Use\n[`get_interval_id`][albert.resources.workflows.Workflow.get_interval_id] to build the interval ID for a condition, then use it with the\nproperty_data endpoints to read or write that condition's results.\n\nTo construct rules and combination overrides for Property tasks using parameter names\nand values, use [`build_rule`][albert.resources.workflows.Workflow.build_rule] and\n[`build_override`][albert.resources.workflows.Workflow.build_override].\n\n!!! example\n    ```python\n    from albert import Albert\n    from albert.resources.workflows import (\n        Workflow,\n        ParameterGroupSetpoints,\n        ParameterSetpoint,\n    )\n\n    client = Albert()\n    # One workflow combining a Data Template's pre-linked parameters with two\n    # Parameter Groups. Each grouping is keyed by its DAT... or PRG... id.\n    workflow = Workflow(\n        parameter_group_setpoints=[\n            # Pre-linked parameters on a Data Template (used just like a PRG here)\n            ParameterGroupSetpoints(\n                id=\"DAT9999999\",\n                parameter_setpoints=[\n                    ParameterSetpoint(parameter_id=\"PRM9999999\", value=\"23\"),\n                    ParameterSetpoint(parameter_id=\"PRM2\", value=\"50\"),\n                ],\n            ),\n            # A Parameter Group describing sample prep\n            ParameterGroupSetpoints(\n                id=\"PRG9999999\",\n                parameter_setpoints=[\n                    ParameterSetpoint(parameter_id=\"PRM3\", value=\"24\"),\n                ],\n            ),\n            # A second Parameter Group (e.g. the mixing step)\n            ParameterGroupSetpoints(\n                id=\"PRG2\",\n                parameter_setpoints=[\n                    ParameterSetpoint(parameter_id=\"PRM4\", value=\"2000\"),\n                ],\n            ),\n        ],\n    )\n    created = client.workflows.create(workflows=[workflow])\n    created[0].id\n    # 'WFL1'\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The name of the workflow. Can be omitted on platform built-in workflows without parameter groups (such as `WFL1`).",
          "title": "Name"
        },
        "ParameterGroups": {
          "description": "The setpoints to apply, organized one entry per Data Template / Parameter Group. The order of these entries is part of the workflow's identity.",
          "items": {
            "$ref": "#/$defs/ParameterGroupSetpoints"
          },
          "title": "Parametergroups",
          "type": "array"
        },
        "IntervalCombinations": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/IntervalCombination"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The realized conditions when parameters are intervalized. Populated by the platform; present when the workflow is retrieved, not something you set when building one.",
          "title": "Intervalcombinations"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the workflow (``WFL...``). Set when a workflow is created or retrieved from the platform.",
          "title": "Albertid"
        },
        "blockMapping": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Caller-supplied correlation key on workflow bulk create, used to tie each created workflow to a block position (e.g. ``\"0\"``, ``\"1\"``). Also hydrated on read when a Workflow is returned in the context of a block.",
          "title": "Blockmapping"
        },
        "combinationsCount": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Number of child-workflow combinations on this workflow when it is a block's FINAL workflow. Always present (including ``0``) on flag-ON reads. The embedded ``combinations`` array is empty at 500 or more; use [`get_block_combinations`][albert.collections.tasks.TaskCollection.get_block_combinations] to list them.",
          "title": "Combinationscount"
        },
        "Combinations": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/IntervalCombinationItem"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Child-workflow combinations embedded on a block's FINAL workflow. Read-only; excluded from serialization. Empty at 500 or more combinations.",
          "title": "Combinations"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "title": "Workflow",
      "type": "object"
    }
  },
  "description": "The property data recorded on a task, for one block and data template.\n\nReturned by\n[`get_task_block_properties`][albert.collections.property_data.PropertyDataCollection.get_task_block_properties]\nand\n[`get_all_task_properties`][albert.collections.property_data.PropertyDataCollection.get_all_task_properties].\nCarries the interval/trial data along with the task's workflows and the\ninventory item the results apply to.",
  "properties": {
    "status": {
      "anyOf": [
        {
          "$ref": "#/$defs/Status"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The status of the resource, optional."
    },
    "Created": {
      "anyOf": [
        {
          "$ref": "#/$defs/AuditFields"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Audit fields for the creation of the resource, optional."
    },
    "Updated": {
      "anyOf": [
        {
          "$ref": "#/$defs/AuditFields"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Audit fields for the update of the resource, optional."
    },
    "entity": {
      "const": "task",
      "default": "task",
      "description": "Always [`TASK`][albert.resources.property_data.DataEntity.TASK].",
      "title": "Entity",
      "type": "string"
    },
    "parentId": {
      "description": "Governs the ACL model: associates the property data with a controlling parent (e.g. a task or inventory item). Serialized as ``parentId``.",
      "title": "Parentid",
      "type": "string"
    },
    "id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The task (format ``TAS...``). Serialized as ``id``.",
      "title": "Id"
    },
    "Inventory": {
      "anyOf": [
        {
          "$ref": "#/$defs/PropertyDataInventoryInformation"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The inventory item and lot the data applies to. Serialized as ``Inventory``."
    },
    "category": {
      "anyOf": [
        {
          "$ref": "#/$defs/DataEntity"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The data entity category."
    },
    "InitialWorkflow": {
      "anyOf": [
        {
          "$ref": "#/$defs/Workflow"
        },
        {
          "$ref": "#/$defs/EntityLink"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The workflow at the start of the task. Serialized as ``InitialWorkflow``.",
      "title": "Initialworkflow"
    },
    "FinalWorkflow": {
      "anyOf": [
        {
          "$ref": "#/$defs/Workflow"
        },
        {
          "$ref": "#/$defs/EntityLink"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The workflow at task completion. Serialized as ``FinalWorkflow``. Commonly ``None`` here: the task-scoped read does not return the workflows. Read them from the task's block, or use [`get_task_property_records`][albert.collections.property_data.PropertyDataCollection.get_task_property_records] to get the setpoints already resolved.",
      "title": "Finalworkflow"
    },
    "DataTemplate": {
      "anyOf": [
        {
          "$ref": "#/$defs/DataTemplate"
        },
        {
          "$ref": "#/$defs/EntityLink"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The data template whose columns were measured (format ``DAT...``). Serialized as ``DataTemplate``.",
      "title": "Datatemplate"
    },
    "Data": {
      "description": "The interval data recorded, one entry per interval combination. Serialized as ``Data``.",
      "items": {
        "$ref": "#/$defs/DataInterval"
      },
      "title": "Data",
      "type": "array"
    },
    "blockId": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The block the data belongs to (format ``BLK...``). Serialized as ``blockId``. See Also --------",
      "title": "Blockid"
    }
  },
  "required": [
    "parentId"
  ],
  "title": "TaskPropertyData",
  "type": "object"
}

Fields:

entity

Always TASK.

parent_id

parent_id: str

Governs the ACL model: associates the property data with a controlling parent (e.g. a task or inventory item). Serialized as parentId.

task_id

task_id: str | None = None

The task (format TAS...). Serialized as id.

inventory

inventory: PropertyDataInventoryInformation | None = None

The inventory item and lot the data applies to. Serialized as Inventory.

category

category: DataEntity | None = None

The data entity category.

initial_workflow

initial_workflow: SerializeAsEntityLink[Workflow] | None = (
    None
)

The workflow at the start of the task. Serialized as InitialWorkflow.

final_workflow

final_workflow: SerializeAsEntityLink[Workflow] | None = (
    None
)

The workflow at task completion. Serialized as FinalWorkflow. Commonly None here: the task-scoped read does not return the workflows. Read them from the task's block, or use get_task_property_records to get the setpoints already resolved.

finial_workflow

finial_workflow: SerializeAsEntityLink[Workflow] | None

Deprecated misspelling of final_workflow.

data_template

data_template: (
    SerializeAsEntityLink[DataTemplate] | None
) = None

The data template whose columns were measured (format DAT...). Serialized as DataTemplate.

data

The interval data recorded, one entry per interval combination. Serialized as Data.

block_id

block_id: str | None = None

The block the data belongs to (format BLK...). Serialized as blockId. See Also --------

BulkPropertyDataColumn

Bases: BaseAlbertModel

All row values for a single data column of a block, in row order.

A simple, tabular representation of one column's data used for bulk loading. Collected into a BulkPropertyData (one entry per column) and consumed by bulk_load_task_properties.

Show JSON schema:
{
  "description": "All row values for a single data column of a block, in row order.\n\nA simple, tabular representation of one column's data used for bulk loading.\nCollected into a [`BulkPropertyData`][albert.resources.property_data.BulkPropertyData] (one entry per column) and consumed by\n[`bulk_load_task_properties`][albert.collections.property_data.PropertyDataCollection.bulk_load_task_properties].",
  "properties": {
    "data_column_name": {
      "default": null,
      "description": "The name of the data column (case sensitive).",
      "title": "Data Column Name",
      "type": "string"
    },
    "data_series": {
      "description": "The values, in order of row number, for the data column.",
      "items": {
        "type": "string"
      },
      "title": "Data Series",
      "type": "array"
    }
  },
  "title": "BulkPropertyDataColumn",
  "type": "object"
}

Fields:

data_column_name

data_column_name: str = None

The name of the data column (case sensitive).

data_series

data_series: list[str]

The values, in order of row number, for the data column.

BulkPropertyData

Bases: BaseAlbertModel

A block's data as a set of columns, for bulk loading property values.

A simple tabular structure: one BulkPropertyDataColumn per data column, each holding that column's values in row order. Construct it directly, or from a pandas.DataFrame with from_dataframe, then pass it to bulk_load_task_properties.

Example

import pandas as pd
from albert.resources.property_data import (
    BulkPropertyData,
    BulkPropertyDataColumn,
)

# Construct directly from columns
bulk = BulkPropertyData(
    columns=[
        BulkPropertyDataColumn(
            data_column_name="Viscosity", data_series=["1.1", "1.2"]
        ),
    ]
)

# Or build from a DataFrame (values are coerced to strings)
bulk = BulkPropertyData.from_dataframe(pd.DataFrame({"Viscosity": [1.1, 1.2]}))
Show JSON schema:
{
  "$defs": {
    "BulkPropertyDataColumn": {
      "description": "All row values for a single data column of a block, in row order.\n\nA simple, tabular representation of one column's data used for bulk loading.\nCollected into a [`BulkPropertyData`][albert.resources.property_data.BulkPropertyData] (one entry per column) and consumed by\n[`bulk_load_task_properties`][albert.collections.property_data.PropertyDataCollection.bulk_load_task_properties].",
      "properties": {
        "data_column_name": {
          "default": null,
          "description": "The name of the data column (case sensitive).",
          "title": "Data Column Name",
          "type": "string"
        },
        "data_series": {
          "description": "The values, in order of row number, for the data column.",
          "items": {
            "type": "string"
          },
          "title": "Data Series",
          "type": "array"
        }
      },
      "title": "BulkPropertyDataColumn",
      "type": "object"
    }
  },
  "description": "A block's data as a set of columns, for bulk loading property values.\n\nA simple tabular structure: one [`BulkPropertyDataColumn`][albert.resources.property_data.BulkPropertyDataColumn] per data column,\neach holding that column's values in row order. Construct it directly, or from a\n`pandas.DataFrame` with [`from_dataframe`][albert.resources.property_data.BulkPropertyData.from_dataframe], then pass it to\n[`bulk_load_task_properties`][albert.collections.property_data.PropertyDataCollection.bulk_load_task_properties].\n\n!!! example\n    ```python\n    import pandas as pd\n    from albert.resources.property_data import (\n        BulkPropertyData,\n        BulkPropertyDataColumn,\n    )\n\n    # Construct directly from columns\n    bulk = BulkPropertyData(\n        columns=[\n            BulkPropertyDataColumn(\n                data_column_name=\"Viscosity\", data_series=[\"1.1\", \"1.2\"]\n            ),\n        ]\n    )\n\n    # Or build from a DataFrame (values are coerced to strings)\n    bulk = BulkPropertyData.from_dataframe(pd.DataFrame({\"Viscosity\": [1.1, 1.2]}))\n    ```",
  "properties": {
    "columns": {
      "description": "The columns of data in the block's data column.",
      "items": {
        "$ref": "#/$defs/BulkPropertyDataColumn"
      },
      "title": "Columns",
      "type": "array"
    }
  },
  "title": "BulkPropertyData",
  "type": "object"
}

Fields:

columns

The columns of data in the block's data column.

from_dataframe

from_dataframe(df: DataFrame) -> BulkPropertyData

Converts a DataFrame to a BulkPropertyData object.

Parameters:

Name Type Description Default
df DataFrame

The DataFrame to convert.

required

Returns:

Type Description
BulkPropertyData

The BulkPropertyData object that represents the data in the DataFrame.

Source code in src/albert/resources/property_data.py
@classmethod
def from_dataframe(cls, df: pd.DataFrame) -> BulkPropertyData:
    """
    Converts a DataFrame to a BulkPropertyData object.

    Parameters
    ----------
    df : pd.DataFrame
        The DataFrame to convert.

    Returns
    -------
    BulkPropertyData
        The BulkPropertyData object that represents the data in the DataFrame.
    """
    # Convert all the values to strings, since all albert values are string typed in Albert
    df = df.fillna("").astype(str)
    columns = []
    for column in df.columns:
        data_column = BulkPropertyDataColumn(
            data_column_name=column, data_series=df[column].tolist()
        )
        columns.append(data_column)
    return BulkPropertyData(columns=columns)

TaskPropertyRecord

Bases: BaseAlbertModel

One measured value on a task, flattened and paired with its parameter setpoints.

Returned by get_task_property_records. Each record is a single cell of a task's results: one data column, in one trial, of one interval combination, for one inventory item and lot. The parameter setpoints that define that interval are resolved and attached, so associating a measured result with the conditions it was measured under needs no further calls.

Example

records = client.property_data.get_task_property_records(task_id="TASFOR1")
records[0].data_column_name, records[0].value, records[0].parameter_setpoints
# ('Combing Force', '17.77', {'Condition': 'Wet'})

# Straight into pandas
df = TaskPropertyRecord.to_dataframe(records=records)
Show JSON schema:
{
  "description": "One measured value on a task, flattened and paired with its parameter setpoints.\n\nReturned by\n[`get_task_property_records`][albert.collections.property_data.PropertyDataCollection.get_task_property_records].\nEach record is a single cell of a task's results: one data column, in one trial, of\none interval combination, for one inventory item and lot. The parameter setpoints\nthat define that interval are resolved and attached, so associating a measured\nresult with the conditions it was measured under needs no further calls.\n\n!!! example\n    ```python\n    records = client.property_data.get_task_property_records(task_id=\"TASFOR1\")\n    records[0].data_column_name, records[0].value, records[0].parameter_setpoints\n    # ('Combing Force', '17.77', {'Condition': 'Wet'})\n\n    # Straight into pandas\n    df = TaskPropertyRecord.to_dataframe(records=records)\n    ```",
  "properties": {
    "task_id": {
      "description": "The task the value was measured on (format ``TAS...``).",
      "title": "Task Id",
      "type": "string"
    },
    "block_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The block the value belongs to (format ``BLK...``).",
      "title": "Block Id"
    },
    "data_template_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The data template whose columns were measured (format ``DAT...``).",
      "title": "Data Template Id"
    },
    "data_template_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The data template name.",
      "title": "Data Template Name"
    },
    "inventory_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The inventory item the value applies to (format ``INV...``).",
      "title": "Inventory Id"
    },
    "lot_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The lot the value applies to, if any (format ``LOT...``).",
      "title": "Lot Id"
    },
    "interval_combination": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The interval this value was measured under (e.g. ``\"default\"``, ``\"ROW1\"``, ``\"ROW1XROW2\"``).",
      "title": "Interval Combination"
    },
    "interval_description": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Human-readable form of the interval (e.g. ``\"Condition: Wet\"``), when the platform supplies one.",
      "title": "Interval Description"
    },
    "parameter_setpoints": {
      "additionalProperties": {
        "type": "string"
      },
      "description": "The parameter setpoints in effect for this value, as name to value (e.g. ``{\"Condition\": \"Wet\"}``). Combines the interval's varied parameters with the workflow's fixed ones. Empty when the setpoints could not be resolved.",
      "title": "Parameter Setpoints",
      "type": "object"
    },
    "trial_number": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The trial (row) number this value was recorded in.",
      "title": "Trial Number"
    },
    "visible_trial_number": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The relative row number shown to users.",
      "title": "Visible Trial Number"
    },
    "void": {
      "default": false,
      "description": "Whether this value has been voided, at either the interval or the trial level.",
      "title": "Void",
      "type": "boolean"
    },
    "data_column_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The data column measured (format ``DAC...``).",
      "title": "Data Column Id"
    },
    "data_column_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The data column / result name.",
      "title": "Data Column Name"
    },
    "sequence": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Pointer to the specific result column, which stays unique when a data column repeats within a data template.",
      "title": "Sequence"
    },
    "property_data_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The stored property data record (format ``PTD...``).",
      "title": "Property Data Id"
    },
    "value": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The stored value, as held in Albert (all values are strings).",
      "title": "Value"
    },
    "numeric_value": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The numeric form of the value, when the column is numeric.",
      "title": "Numeric Value"
    },
    "unit_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The unit of measure for the value, if any.",
      "title": "Unit Name"
    },
    "calculation": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The calculation expression behind the value, when the column is calculated (e.g. ``\"=COL1-COL2\"``).",
      "title": "Calculation"
    },
    "workflow_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The workflow whose setpoints apply (format ``WFL...``).",
      "title": "Workflow Id"
    },
    "workflow_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The workflow name.",
      "title": "Workflow Name"
    }
  },
  "required": [
    "task_id"
  ],
  "title": "TaskPropertyRecord",
  "type": "object"
}

Fields:

task_id

task_id: TaskId

The task the value was measured on (format TAS...).

block_id

block_id: BlockId | None = None

The block the value belongs to (format BLK...).

data_template_id

data_template_id: DataTemplateId | None = None

The data template whose columns were measured (format DAT...).

data_template_name

data_template_name: str | None = None

The data template name.

inventory_id

inventory_id: InventoryId | None = None

The inventory item the value applies to (format INV...).

lot_id

lot_id: LotId | None = None

The lot the value applies to, if any (format LOT...).

interval_combination

interval_combination: str | None = None

The interval this value was measured under (e.g. "default", "ROW1", "ROW1XROW2").

interval_description

interval_description: str | None = None

Human-readable form of the interval (e.g. "Condition: Wet"), when the platform supplies one.

parameter_setpoints

parameter_setpoints: dict[str, str]

The parameter setpoints in effect for this value, as name to value (e.g. {"Condition": "Wet"}). Combines the interval's varied parameters with the workflow's fixed ones. Empty when the setpoints could not be resolved.

trial_number

trial_number: int | None = None

The trial (row) number this value was recorded in.

visible_trial_number

visible_trial_number: int | None = None

The relative row number shown to users.

void

void: bool = False

Whether this value has been voided, at either the interval or the trial level.

data_column_id

data_column_id: DataColumnId | None = None

The data column measured (format DAC...).

data_column_name

data_column_name: str | None = None

The data column / result name.

sequence

sequence: str | None = None

Pointer to the specific result column, which stays unique when a data column repeats within a data template.

property_data_id

property_data_id: PropertyDataId | None = None

The stored property data record (format PTD...).

value

value: str | None = None

The stored value, as held in Albert (all values are strings).

numeric_value

numeric_value: float | None = None

The numeric form of the value, when the column is numeric.

unit_name

unit_name: str | None = None

The unit of measure for the value, if any.

calculation

calculation: str | None = None

The calculation expression behind the value, when the column is calculated (e.g. "=COL1-COL2").

workflow_id

workflow_id: WorkflowId | None = None

The workflow whose setpoints apply (format WFL...).

workflow_name

workflow_name: str | None = None

The workflow name.

to_dataframe

to_dataframe(
    *, records: list[TaskPropertyRecord]
) -> DataFrame

Convert records to a DataFrame, one row per record.

Each parameter setpoint is expanded into its own column, prefixed with setpoint., so conditions can be filtered and grouped directly.

Example

df = TaskPropertyRecord.to_dataframe(records=records)
df.columns
# [..., 'value', 'unit_name', 'setpoint.Condition']

Parameters:

Name Type Description Default
records list[TaskPropertyRecord]

The records to convert.

required

Returns:

Type Description
DataFrame

The records as a table. Empty input gives an empty DataFrame.

Source code in src/albert/resources/property_data.py
@classmethod
def to_dataframe(cls, *, records: list[TaskPropertyRecord]) -> pd.DataFrame:
    """Convert records to a DataFrame, one row per record.

    Each parameter setpoint is expanded into its own column, prefixed with
    ``setpoint.``, so conditions can be filtered and grouped directly.

    !!! example
        ```python
        df = TaskPropertyRecord.to_dataframe(records=records)
        df.columns
        # [..., 'value', 'unit_name', 'setpoint.Condition']
        ```

    Parameters
    ----------
    records : list[TaskPropertyRecord]
        The records to convert.

    Returns
    -------
    pd.DataFrame
        The records as a table. Empty input gives an empty DataFrame.
    """
    rows = []
    for record in records:
        row = record.model_dump(exclude={"parameter_setpoints"})
        for name, value in record.parameter_setpoints.items():
            row[f"setpoint.{name}"] = value
        rows.append(row)
    return pd.DataFrame(rows)

TaskCurveData

Bases: BaseAlbertModel

The curve recorded in one trial of a curve data column on a task.

Returned by get_task_curve_data. Identifies where the curve was recorded (block, inventory item, interval, trial, and data column) and carries the curve points in data.

Example

curves = client.property_data.get_task_curve_data(task_id="TASFOR1")
curve = curves[0]
curve.data_column_name, curve.trial_number
# ('Viscosity Curve', 1)
curve.data.head()
#   Temperature Count
# 0           0     6
Show JSON schema:
{
  "description": "The curve recorded in one trial of a curve data column on a task.\n\nReturned by\n[`get_task_curve_data`][albert.collections.property_data.PropertyDataCollection.get_task_curve_data].\nIdentifies where the curve was recorded (block, inventory item, interval, trial,\nand data column) and carries the curve points in ``data``.\n\n!!! example\n    ```python\n    curves = client.property_data.get_task_curve_data(task_id=\"TASFOR1\")\n    curve = curves[0]\n    curve.data_column_name, curve.trial_number\n    # ('Viscosity Curve', 1)\n    curve.data.head()\n    #   Temperature Count\n    # 0           0     6\n    ```",
  "properties": {
    "task_id": {
      "description": "The task the curve was recorded on (format ``TAS...``).",
      "title": "Task Id",
      "type": "string"
    },
    "block_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The block the curve belongs to (format ``BLK...``).",
      "title": "Block Id"
    },
    "data_template_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The data template that defines the curve column (format ``DAT...``).",
      "title": "Data Template Id"
    },
    "inventory_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The inventory item the curve was measured on (format ``INV...``).",
      "title": "Inventory Id"
    },
    "lot_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The lot the curve was measured on (format ``LOT...``), if any.",
      "title": "Lot Id"
    },
    "interval_combination": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The interval combination the curve was recorded under (e.g. ``default`` or ``ROW1``).",
      "title": "Interval Combination"
    },
    "trial_number": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The trial number the curve was recorded in.",
      "title": "Trial Number"
    },
    "void": {
      "default": false,
      "description": "Whether the trial or its interval is voided.",
      "title": "Void",
      "type": "boolean"
    },
    "data_column_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The curve data column (format ``DAC...``).",
      "title": "Data Column Id"
    },
    "data_column_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The curve data column's display name.",
      "title": "Data Column Name"
    },
    "property_data_id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The stored property data record for the curve (format ``PTD...``).",
      "title": "Property Data Id"
    },
    "file_name": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The name of the CSV file the curve was uploaded from.",
      "title": "File Name"
    },
    "data": {
      "description": "The curve points, one row per point and one column per curve result, named by the uploaded CSV headers. Values are returned as stored (typically strings).",
      "title": "Data",
      "type": "object"
    }
  },
  "required": [
    "task_id",
    "data"
  ],
  "title": "TaskCurveData",
  "type": "object"
}

Fields:

task_id

task_id: TaskId

The task the curve was recorded on (format TAS...).

block_id

block_id: BlockId | None = None

The block the curve belongs to (format BLK...).

data_template_id

data_template_id: DataTemplateId | None = None

The data template that defines the curve column (format DAT...).

inventory_id

inventory_id: InventoryId | None = None

The inventory item the curve was measured on (format INV...).

lot_id

lot_id: LotId | None = None

The lot the curve was measured on (format LOT...), if any.

interval_combination

interval_combination: str | None = None

The interval combination the curve was recorded under (e.g. default or ROW1).

trial_number

trial_number: int | None = None

The trial number the curve was recorded in.

void

void: bool = False

Whether the trial or its interval is voided.

data_column_id

data_column_id: DataColumnId | None = None

The curve data column (format DAC...).

data_column_name

data_column_name: str | None = None

The curve data column's display name.

property_data_id

property_data_id: PropertyDataId | None = None

The stored property data record for the curve (format PTD...).

file_name

file_name: str | None = None

The name of the CSV file the curve was uploaded from.

data

data: OrientTightDataFrame

The curve points, one row per point and one column per curve result, named by the uploaded CSV headers. Values are returned as stored (typically strings).

TaskPropertyValue

Bases: BaseAlbertModel

A single value wrapper for a task data column result.

Show JSON schema:
{
  "description": "A single value wrapper for a task data column result.",
  "properties": {
    "value": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Value"
    }
  },
  "title": "TaskPropertyValue",
  "type": "object"
}

Fields:

value

value: str | None = None

ImagePropertyValue

Bases: BaseAlbertModel

Image file input for an image-type data column.

Pass as the value of a TaskPropertyCreate when the target data column stores an image. The file is uploaded when the property is created.

Example

from albert.resources.property_data import ImagePropertyValue

image = ImagePropertyValue(file_path="results/sample.png")
Show JSON schema:
{
  "description": "Image file input for an image-type data column.\n\nPass as the ``value`` of a [`TaskPropertyCreate`][albert.resources.property_data.TaskPropertyCreate] when the target data\ncolumn stores an image. The file is uploaded when the property is created.\n\n!!! example\n    ```python\n    from albert.resources.property_data import ImagePropertyValue\n\n    image = ImagePropertyValue(file_path=\"results/sample.png\")\n    ```",
  "properties": {
    "file_path": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "format": "path",
          "type": "string"
        }
      ],
      "description": "Local path to the image file to upload. See Also --------",
      "title": "File Path"
    }
  },
  "required": [
    "file_path"
  ],
  "title": "ImagePropertyValue",
  "type": "object"
}

Fields:

file_path

file_path: str | Path

Local path to the image file to upload. See Also --------

CurvePropertyValue

Bases: BaseAlbertModel

Curve (CSV) file input for a curve-type data column.

Pass as the value of a TaskPropertyCreate when the target data column stores curve data. The CSV is uploaded and ingested when the property is created.

Example

from albert.resources.property_data import CurvePropertyValue

curve = CurvePropertyValue(file_path="results/dsc_curve.csv")
Show JSON schema:
{
  "$defs": {
    "ImportMode": {
      "description": "How a curve example's source CSV is ingested.\n\nAttributes\n----------\nSCRIPT\n    Run the attached column script first, then import its output (requires a script\n    attachment on the column).\nCSV\n    Ingest the CSV file directly.",
      "enum": [
        "SCRIPT",
        "CSV"
      ],
      "title": "ImportMode",
      "type": "string"
    }
  },
  "description": "Curve (CSV) file input for a curve-type data column.\n\nPass as the ``value`` of a [`TaskPropertyCreate`][albert.resources.property_data.TaskPropertyCreate] when the target data\ncolumn stores curve data. The CSV is uploaded and ingested when the property is\ncreated.\n\n!!! example\n    ```python\n    from albert.resources.property_data import CurvePropertyValue\n\n    curve = CurvePropertyValue(file_path=\"results/dsc_curve.csv\")\n    ```",
  "properties": {
    "file_path": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "format": "path",
          "type": "string"
        }
      ],
      "description": "Local path to the CSV file containing curve data.",
      "title": "File Path"
    },
    "mode": {
      "$ref": "#/$defs/ImportMode",
      "default": "CSV",
      "description": "Import mode for the curve data. Defaults to ``ImportMode.CSV``."
    },
    "field_mapping": {
      "anyOf": [
        {
          "additionalProperties": {
            "type": "string"
          },
          "type": "object"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Optional mapping from CSV headers to curve result identifiers. See Also --------",
      "title": "Field Mapping"
    }
  },
  "required": [
    "file_path"
  ],
  "title": "CurvePropertyValue",
  "type": "object"
}

Fields:

file_path

file_path: str | Path

Local path to the CSV file containing curve data.

mode

Import mode for the curve data. Defaults to ImportMode.CSV.

field_mapping

field_mapping: dict[str, str] | None = None

Optional mapping from CSV headers to curve result identifiers. See Also --------

ImagePropertyValuePayload

Bases: BaseAlbertModel

Internal upload payload for an image property value (file name + storage key).

Show JSON schema:
{
  "$defs": {
    "StorageKeyReference": {
      "description": "S3 storage key references for a data column file result.",
      "properties": {
        "rawfile": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The raw file storage key.",
          "title": "Rawfile"
        },
        "s3Input": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the input file.",
          "title": "S3Input"
        },
        "s3Output": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the processed output file.",
          "title": "S3Output"
        },
        "preview": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a preview image.",
          "title": "Preview"
        },
        "thumb": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a thumbnail image.",
          "title": "Thumb"
        },
        "original": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the original file.",
          "title": "Original"
        }
      },
      "title": "StorageKeyReference",
      "type": "object"
    }
  },
  "description": "Internal upload payload for an image property value (file name + storage key).",
  "properties": {
    "fileName": {
      "title": "Filename",
      "type": "string"
    },
    "s3Key": {
      "$ref": "#/$defs/StorageKeyReference"
    }
  },
  "required": [
    "fileName",
    "s3Key"
  ],
  "title": "ImagePropertyValuePayload",
  "type": "object"
}

Fields:

file_name

file_name: str

s3_key

CurvePropertyValuePayload

Bases: BaseAlbertModel

Internal upload payload for a curve property value (file, storage key, job, mapping).

Show JSON schema:
{
  "$defs": {
    "CurveDBMetadata": {
      "description": "Database metadata for a curve data column result.",
      "properties": {
        "tableName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Athena/database table name storing the curve data.",
          "title": "Tablename"
        },
        "partitionKey": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The partition key for the curve data table.",
          "title": "Partitionkey"
        }
      },
      "title": "CurveDBMetadata",
      "type": "object"
    },
    "StorageKeyReference": {
      "description": "S3 storage key references for a data column file result.",
      "properties": {
        "rawfile": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The raw file storage key.",
          "title": "Rawfile"
        },
        "s3Input": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the input file.",
          "title": "S3Input"
        },
        "s3Output": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the processed output file.",
          "title": "S3Output"
        },
        "preview": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a preview image.",
          "title": "Preview"
        },
        "thumb": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a thumbnail image.",
          "title": "Thumb"
        },
        "original": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the original file.",
          "title": "Original"
        }
      },
      "title": "StorageKeyReference",
      "type": "object"
    }
  },
  "description": "Internal upload payload for a curve property value (file, storage key, job, mapping).",
  "properties": {
    "fileName": {
      "title": "Filename",
      "type": "string"
    },
    "s3Key": {
      "$ref": "#/$defs/StorageKeyReference"
    },
    "jobId": {
      "title": "Jobid",
      "type": "string"
    },
    "csvMapping": {
      "additionalProperties": {
        "type": "string"
      },
      "title": "Csvmapping",
      "type": "object"
    },
    "athena": {
      "$ref": "#/$defs/CurveDBMetadata"
    }
  },
  "required": [
    "fileName",
    "s3Key",
    "jobId",
    "csvMapping",
    "athena"
  ],
  "title": "CurvePropertyValuePayload",
  "type": "object"
}

Fields:

file_name

file_name: str

s3_key

job_id

job_id: str

csv_mapping

csv_mapping: dict[str, str]

athena

TaskDataColumn

Bases: BaseAlbertModel

A reference to a data column of a task's data template.

Identifies which data column a value targets. Used inside TaskPropertyCreate to say which column of a block a value belongs to; the identifiers are typically read off an existing block returned by get_task_block_properties.

Show JSON schema:
{
  "description": "A reference to a data column of a task's data template.\n\nIdentifies which data column a value targets. Used inside\n[`TaskPropertyCreate`][albert.resources.property_data.TaskPropertyCreate] to say which column of a block a value belongs to;\nthe identifiers are typically read off an existing block returned by\n[`get_task_block_properties`][albert.collections.property_data.PropertyDataCollection.get_task_block_properties].",
  "properties": {
    "id": {
      "description": "The data column (format ``DAC...``). Serialized as ``id``.",
      "title": "Id",
      "type": "string"
    },
    "columnId": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The column's sequence identifier within the block. Serialized as ``columnId``. See Also --------",
      "title": "Columnid"
    }
  },
  "required": [
    "id"
  ],
  "title": "TaskDataColumn",
  "type": "object"
}

Fields:

data_column_id

data_column_id: DataColumnId

The data column (format DAC...). Serialized as id.

column_sequence

column_sequence: str | None = None

The column's sequence identifier within the block. Serialized as columnId. See Also --------

TaskDataColumnValue

Bases: TaskDataColumn

A task data column reference paired with its value.

Show JSON schema:
{
  "$defs": {
    "TaskPropertyValue": {
      "description": "A single value wrapper for a task data column result.",
      "properties": {
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Value"
        }
      },
      "title": "TaskPropertyValue",
      "type": "object"
    }
  },
  "description": "A task data column reference paired with its value.",
  "properties": {
    "id": {
      "description": "The data column (format ``DAC...``). Serialized as ``id``.",
      "title": "Id",
      "type": "string"
    },
    "columnId": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The column's sequence identifier within the block. Serialized as ``columnId``. See Also --------",
      "title": "Columnid"
    },
    "Value": {
      "$ref": "#/$defs/TaskPropertyValue"
    }
  },
  "required": [
    "id",
    "Value"
  ],
  "title": "TaskDataColumnValue",
  "type": "object"
}

Fields:

Validators:

value

set_string_value

set_string_value(v)

Converts a string to TaskPropertyValue if the input is a string.

Source code in src/albert/resources/property_data.py
@field_validator("value", mode="before")
def set_string_value(cls, v):
    """
    Converts a string to TaskPropertyValue if the input is a string.
    """
    if isinstance(v, str):
        return TaskPropertyValue(value=v)
    return v

TaskTrialData

Bases: BaseAlbertModel

A trial's worth of task data column values for writing to a task.

Show JSON schema:
{
  "$defs": {
    "TaskDataColumnValue": {
      "description": "A task data column reference paired with its value.",
      "properties": {
        "id": {
          "description": "The data column (format ``DAC...``). Serialized as ``id``.",
          "title": "Id",
          "type": "string"
        },
        "columnId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The column's sequence identifier within the block. Serialized as ``columnId``. See Also --------",
          "title": "Columnid"
        },
        "Value": {
          "$ref": "#/$defs/TaskPropertyValue"
        }
      },
      "required": [
        "id",
        "Value"
      ],
      "title": "TaskDataColumnValue",
      "type": "object"
    },
    "TaskPropertyValue": {
      "description": "A single value wrapper for a task data column result.",
      "properties": {
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Value"
        }
      },
      "title": "TaskPropertyValue",
      "type": "object"
    }
  },
  "description": "A trial's worth of task data column values for writing to a task.",
  "properties": {
    "trialNo": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Trialno"
    },
    "DataColumns": {
      "items": {
        "$ref": "#/$defs/TaskDataColumnValue"
      },
      "title": "Datacolumns",
      "type": "array"
    }
  },
  "title": "TaskTrialData",
  "type": "object"
}

Fields:

trial_number

trial_number: int | None = None

data_columns

data_columns: list[TaskDataColumnValue]

InventoryDataColumn

Bases: BaseAlbertModel

A data column and value to store as property data on an inventory item.

The input unit for adding or updating custom property data directly on an inventory item via add_properties_to_inventory and update_property_on_inventory. Not an Inventory Spec: for inventory reference properties use Specs (deprecated) or client.attributes.

Example

from albert.resources.property_data import InventoryDataColumn

prop = InventoryDataColumn(data_column_id="DAC9999999", value="1.2")
Show JSON schema:
{
  "description": "A data column and value to store as property data on an inventory item.\n\nThe input unit for adding or updating custom property data directly on an\ninventory item via\n[`add_properties_to_inventory`][albert.collections.property_data.PropertyDataCollection.add_properties_to_inventory]\nand\n[`update_property_on_inventory`][albert.collections.property_data.PropertyDataCollection.update_property_on_inventory].\nNot an Inventory Spec: for inventory reference properties use Specs\n(deprecated) or ``client.attributes``.\n\n!!! example\n    ```python\n    from albert.resources.property_data import InventoryDataColumn\n\n    prop = InventoryDataColumn(data_column_id=\"DAC9999999\", value=\"1.2\")\n    ```",
  "properties": {
    "id": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The data column to write to (format ``DAC...``). Serialized as ``id``.",
      "title": "Id"
    },
    "value": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The value to store. See Also --------",
      "title": "Value"
    }
  },
  "title": "InventoryDataColumn",
  "type": "object"
}

Fields:

data_column_id

data_column_id: DataColumnId | None = None

The data column to write to (format DAC...). Serialized as id.

value

value: str | None = None

The value to store. See Also --------

TaskPropertyCreate

Bases: BaseResource

Input model for writing one measured value to a task.

Targets a specific data column + interval combination + trial on a task's block, with a required link to the block's data template, and carries the value to store. Pass a list of these to add_properties_to_task or update_or_create_task_properties.

Use get_interval_id to build the interval_combination from parameter setpoints. For image data columns pass an ImagePropertyValue as value; for curve data columns pass a CurvePropertyValue; numeric values are coerced to strings.

Example

from albert.resources.property_data import TaskPropertyCreate, TaskDataColumn

# Derive the data column and template from the existing block
block = client.property_data.get_task_block_properties(
    inventory_id="INVA9999999", task_id="TASFOR1", block_id="BLK1"
)
column = block.data[0].trials[0].data_columns[0]
new_value = TaskPropertyCreate(
    interval_combination="default",
    data_column=TaskDataColumn(
        data_column_id=column.id, column_sequence=column.sequence
    ),
    value="33.3",
    data_template=block.data_template,
)
Notes
  • Use Workflow.get_interval_id(parameter_values={"name1": "value1", ...}) to find the correct interval given the parameter names and setpoints.
  • Leave trial_number blank to create a new row/trial; create new trials one at a time.
  • visible_trial_number can set the relative row number, allowing you to pass multiple rows of data at once.
See Also

TaskDataColumn : Identifies the data column a value targets. ImagePropertyValue : Value input for image data columns. CurvePropertyValue : Value input for curve data columns.

Show JSON schema:
{
  "$defs": {
    "ACL": {
      "description": "A single access rule for a user.",
      "properties": {
        "id": {
          "description": "The id of the user for which this ACL applies",
          "title": "Id",
          "type": "string"
        },
        "fgc": {
          "anyOf": [
            {
              "$ref": "#/$defs/AccessControlLevel"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Fine-Grain Control Level"
        }
      },
      "required": [
        "id"
      ],
      "title": "ACL",
      "type": "object"
    },
    "AccessControlLevel": {
      "description": "Access control levels you can grant users.",
      "enum": [
        "ProjectOwner",
        "ProjectEditor",
        "ProjectViewer",
        "ProjectAllTask",
        "ProjectStrictViewer",
        "ProjectPropertyTask",
        "InventoryOwner",
        "InventoryViewer",
        "CustomTemplateOwner",
        "CustomTemplateViewer",
        "CASFullAccess"
      ],
      "title": "AccessControlLevel",
      "type": "string"
    },
    "AuditFields": {
      "description": "The audit fields for a resource",
      "properties": {
        "by": {
          "default": null,
          "title": "By",
          "type": "string"
        },
        "byName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Byname"
        },
        "at": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "At"
        }
      },
      "title": "AuditFields",
      "type": "object"
    },
    "Axis": {
      "enum": [
        "X",
        "Y"
      ],
      "title": "Axis",
      "type": "string"
    },
    "CSVMapping": {
      "description": "A mapping between CSV column headers and data column IDs.",
      "properties": {
        "mapId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A compact mapping string (e.g. ``\"Header1:DAC2900#Header2:DAC4707\"``).",
          "examples": "Header1:DAC2900#Header2:DAC4707",
          "title": "Mapid"
        },
        "mapData": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A dictionary mapping CSV header names to data column IDs.",
          "examples": {
            "Header1": "DAC2900",
            "Header2": "DAC4707"
          },
          "title": "Mapdata"
        }
      },
      "title": "CSVMapping",
      "type": "object"
    },
    "Cas": {
      "description": "A CAS entry: a chemical substance identified by its CAS Registry Number.\n\nA ``Cas`` is Albert's dictionary record for a substance. Raw-material Inventory\nItems reference these entries to declare what they are made of, pairing each\n``Cas`` with an amount (see [`CasAmount`][albert.resources.inventory.CasAmount]).\nManage entries through\n[`CasCollection`][albert.collections.cas.CasCollection] (``client.cas``): most fields\nare populated by Albert, so you typically only build a ``Cas`` from a registry\n``number`` when creating a new entry.\n\n!!! example\n    ```python\n    from albert.resources.cas import Cas\n    # Build a CAS entry to register a new substance\n    cas = Cas(number=\"7727-37-9\")\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "number": {
          "description": "The CAS number.",
          "title": "Number",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Name of the CAS.",
          "title": "Name"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The description or name of the CAS.",
          "title": "Description"
        },
        "notes": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Notes related to the CAS.",
          "title": "Notes"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/CasCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The category of the CAS."
        },
        "casSmiles": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "CAS SMILES notation.",
          "title": "Cassmiles"
        },
        "inchiKey": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "InChIKey of the CAS.",
          "title": "Inchikey"
        },
        "iUpacName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "IUPAC name of the CAS.",
          "title": "Iupacname"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The AlbertID of the CAS.",
          "title": "Albertid"
        },
        "hazards": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/Hazard"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazards associated with the CAS.",
          "title": "Hazards"
        },
        "wgk": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "German Water Hazard Class (WGK) number.",
          "title": "Wgk"
        },
        "ecListNo": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "European Community (EC) number.",
          "title": "Eclistno"
        },
        "type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Internal classification_type reference.",
          "title": "Type"
        },
        "classificationType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Classification type of the CAS.",
          "title": "Classificationtype"
        },
        "order": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "CAS order.",
          "title": "Order"
        },
        "Metadata": {
          "additionalProperties": {
            "anyOf": [
              {
                "type": "number"
              },
              {
                "type": "integer"
              },
              {
                "type": "string"
              },
              {
                "$ref": "#/$defs/EntityLinkWithName"
              },
              {
                "$ref": "#/$defs/EntityLink"
              },
              {
                "items": {
                  "anyOf": [
                    {
                      "$ref": "#/$defs/EntityLinkWithName"
                    },
                    {
                      "$ref": "#/$defs/EntityLink"
                    }
                  ]
                },
                "type": "array"
              }
            ]
          },
          "description": "Custom metadata keyed by field. Updatable.",
          "title": "Metadata",
          "type": "object"
        }
      },
      "required": [
        "number"
      ],
      "title": "Cas",
      "type": "object"
    },
    "CasAmount": {
      "description": "A single CAS constituent and its concentration within an [`InventoryItem`][albert.resources.inventory.InventoryItem].\n\nA ``CasAmount`` links one CAS number (a chemical substance identifier) to the\namount of that substance present in an inventory item, expressed as a range\n(``min`` to ``max``) with an optional ``target``. A list of these on an\n[`InventoryItem`][albert.resources.inventory.InventoryItem] gives the item's compositional breakdown.\n\nIdentify the CAS in one of two ways: pass a full [`Cas`][albert.resources.cas.Cas]\nobject as ``cas`` (its ``id``, ``number``, and ``cas_smiles`` are then copied onto\nthis amount), or pass just the CAS resource ``id`` string. Do not pass both.\n\n!!! example\n    ```python\n    from albert.resources.inventory import CasAmount\n\n    # Reference an existing CAS resource by its Albert ID, 10-30% concentration\n    amount = CasAmount(min=10.0, max=30.0, id=\"CAS1\")\n    ```",
      "properties": {
        "min": {
          "description": "The minimum amount (concentration) of the CAS in the item.",
          "title": "Min",
          "type": "number"
        },
        "max": {
          "description": "The maximum amount (concentration) of the CAS in the item.",
          "title": "Max",
          "type": "number"
        },
        "inventoryValue": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The target amount of the CAS in the item. Serialized as ``inventoryValue``.",
          "title": "Inventoryvalue"
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the CAS resource this amount represents. Provide either a ``cas`` object or an ``id``; when ``cas`` is given, this is set from it.",
          "title": "Id"
        },
        "casCategory": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the CAS is a trade secret.",
          "title": "Cascategory"
        },
        "inventoryFunction": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/ListItem"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "type": "string"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Business-controlled functions associated with the CAS in this inventory context (e.g. what role the substance plays). Values come from a managed list.",
          "title": "Inventoryfunction"
        },
        "type": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The CAS type. Can be retrieved from the CAS collection before construction.",
          "title": "Type"
        },
        "classificationType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The EU classification source for the CAS: harmonized, notified, or REACH.",
          "title": "Classificationtype"
        },
        "substanceId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The substance ID linked to this CAS entry.",
          "title": "Substanceid"
        },
        "cas": {
          "anyOf": [
            {
              "$ref": "#/$defs/Cas"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The full CAS object associated with this amount. Read-only after init; excluded from serialization. Provide either a ``cas`` or an ``id``."
        },
        "casSmiles": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The SMILES string of the CAS resource. Read-only; set from the ``cas`` object.",
          "title": "Cassmiles"
        },
        "number": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The CAS number (e.g. ``\"7440-32-6\"``). Read-only; set from the ``cas`` object.",
          "title": "Number"
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit metadata for creation. Read-only."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/CasAuditFieldsWithEmail"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit metadata for the last update. Read-only. See Also --------"
        }
      },
      "required": [
        "min",
        "max"
      ],
      "title": "CasAmount",
      "type": "object"
    },
    "CasAuditFieldsWithEmail": {
      "description": "The audit fields for a CAS resource with email",
      "properties": {
        "by": {
          "default": null,
          "title": "By",
          "type": "string"
        },
        "byName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Byname"
        },
        "at": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "At"
        },
        "email": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Email"
        }
      },
      "title": "CasAuditFieldsWithEmail",
      "type": "object"
    },
    "CasCategory": {
      "enum": [
        "User",
        "Verisk",
        "TSCA - Public",
        "TSCA - Private",
        "not TSCA",
        "CAS linked to External Database",
        "Unknown (Trade Secret)",
        "CL_Inventory Upload"
      ],
      "title": "CasCategory",
      "type": "string"
    },
    "Company": {
      "description": "A manufacturing company or supplier tracked in Albert.\n\nA Company is the organization that makes or supplies a material. It is the\n``company`` linked on raw-material inventory items: each raw material points\nback to the Company that manufactures it (see\n[`InventoryItem`][albert.resources.inventory.InventoryItem]). Companies are managed\nthrough [`CompanyCollection`][albert.collections.companies.CompanyCollection], accessed as\n``client.companies``.\n\nCompanies are identified by a Company ID (format ``COM...``). A Company is\ntypically minimal: a name plus its assigned ID. You construct one directly\n(``Company(name=\"Acme Chemicals\")``) to create it or to attach it to an\ninventory item.\n\n!!! example\n    ```python\n    from albert.resources.companies import Company\n\n    # Build a company to create or attach to an inventory item\n    company = Company(name=\"Acme Chemicals\")\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The company's name. This is the primary identifier used when searching for or creating a company.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert Company ID (format ``COM...``). ``None`` until the company is created in or retrieved from Albert.",
          "title": "Albertid"
        },
        "distance": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Search-relevance score returned when the company comes back as a search result. Read-only; not set on companies you build yourself.",
          "title": "Distance"
        }
      },
      "required": [
        "name"
      ],
      "title": "Company",
      "type": "object"
    },
    "CurveDBMetadata": {
      "description": "Database metadata for a curve data column result.",
      "properties": {
        "tableName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Athena/database table name storing the curve data.",
          "title": "Tablename"
        },
        "partitionKey": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The partition key for the curve data table.",
          "title": "Partitionkey"
        }
      },
      "title": "CurveDBMetadata",
      "type": "object"
    },
    "CurveDataEntityLink": {
      "description": "A link to a data column that provides one axis of a curve dataset.",
      "properties": {
        "id": {
          "description": "The data column ID.",
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        },
        "axis": {
          "anyOf": [
            {
              "$ref": "#/$defs/Axis"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Which axis this column represents (X or Y)."
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit of measure for this axis.",
          "title": "Unit"
        }
      },
      "required": [
        "id"
      ],
      "title": "CurveDataEntityLink",
      "type": "object"
    },
    "CurvePropertyValue": {
      "description": "Curve (CSV) file input for a curve-type data column.\n\nPass as the ``value`` of a [`TaskPropertyCreate`][albert.resources.property_data.TaskPropertyCreate] when the target data\ncolumn stores curve data. The CSV is uploaded and ingested when the property is\ncreated.\n\n!!! example\n    ```python\n    from albert.resources.property_data import CurvePropertyValue\n\n    curve = CurvePropertyValue(file_path=\"results/dsc_curve.csv\")\n    ```",
      "properties": {
        "file_path": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "format": "path",
              "type": "string"
            }
          ],
          "description": "Local path to the CSV file containing curve data.",
          "title": "File Path"
        },
        "mode": {
          "$ref": "#/$defs/ImportMode",
          "default": "CSV",
          "description": "Import mode for the curve data. Defaults to ``ImportMode.CSV``."
        },
        "field_mapping": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional mapping from CSV headers to curve result identifiers. See Also --------",
          "title": "Field Mapping"
        }
      },
      "required": [
        "file_path"
      ],
      "title": "CurvePropertyValue",
      "type": "object"
    },
    "DataColumn": {
      "description": "The definition of a single measured result variable in Albert.\n\nA Data Column (DAC) defines one direct output variable that a task can\nmeasure, such as ``Viscosity`` or ``APHA Color``. Data columns are the\nreusable building blocks of a Data Template's results: a\n[`DataTemplate`][albert.resources.data_templates.DataTemplate] references data columns\nthrough its ``data_column_values``, and the values recorded against a data\ncolumn during experiments are stored as Property Data.\n\nData columns are identified by a Data Column ID (format ``DAC...``, e.g.\n``\"DAC9999999\"``) and are managed through\n[`DataColumnCollection`][albert.collections.data_columns.DataColumnCollection], accessed as\n``client.data_columns``.\n\n!!! example\n    ```python\n    from albert import Albert\n    from albert.resources.data_columns import DataColumn\n    client = Albert()\n    column = DataColumn(name=\"Viscosity\")\n    created = client.data_columns.create(data_column=column)\n    created.id\n    # 'DAC9999999'\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The name of the data column (e.g. ``\"Viscosity\"``).",
          "title": "Name",
          "type": "string"
        },
        "default": {
          "type": "boolean",
          "default": false,
          "description": "Whether this is a default (platform-provided) data column.",
          "title": "Default"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom metadata keyed by field name. Values may be strings, numbers, or entity links.",
          "title": "Metadata"
        },
        "albertId": {
          "default": null,
          "description": "The Data Column ID assigned by Albert (format ``DAC...``). Populated by the server on creation; leave unset when building a column to create.",
          "title": "Albertid",
          "type": "string"
        }
      },
      "required": [
        "name"
      ],
      "title": "DataColumn",
      "type": "object"
    },
    "DataColumnValue": {
      "description": "A result data column on a Data Template.\n\nA ``DataColumnValue`` binds a [`DataColumn`][albert.resources.data_columns.DataColumn] to\na Data Template as one of the results the test captures (a \"direct variable\"). Data\ncolumns can be typed numeric, text, dropdown/enum, image, curve, date, or timestamp.\nOn a Data Template the ``value`` typically holds an example value shown on the\ndetails page rather than measured data; actual measurements are stored as Property\nData. When constructing one, provide either ``data_column`` or ``data_column_id``.\n\n!!! example\n    ```python\n    from albert.resources.data_templates import DataColumnValue\n\n    column = DataColumnValue(data_column_id=\"DAC9999999\", value=\"42\")\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "data_column": {
          "anyOf": [
            {
              "$ref": "#/$defs/DataColumn"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The full DataColumn resource this value binds to. Provide this or ``data_column_id``. Not serialized."
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the bound DataColumn (format ``DAC...``). Serialized as ``id``. Provide this or ``data_column``.",
          "title": "Id"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display name of the column.",
          "title": "Name"
        },
        "originalName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The original column name as stored in Albert. Read-only.",
          "title": "Originalname"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The column's example/default value shown on the Data Template details page.",
          "title": "Value"
        },
        "hidden": {
          "default": false,
          "description": "Whether the column is hidden. Defaults to False.",
          "title": "Hidden",
          "type": "boolean"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit of measure for the column.",
          "title": "Unit"
        },
        "calculation": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A calculation expression for a computed column.",
          "title": "Calculation"
        },
        "sequence": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The column's position within the template. Assigned by Albert.",
          "title": "Sequence"
        },
        "script": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Script"
        },
        "athena": {
          "anyOf": [
            {
              "$ref": "#/$defs/CurveDBMetadata"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "s3Key": {
          "anyOf": [
            {
              "$ref": "#/$defs/StorageKeyReference"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "job": {
          "anyOf": [
            {
              "$ref": "#/$defs/JobSummary"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "csvMapping": {
          "anyOf": [
            {
              "additionalProperties": {
                "type": "string"
              },
              "type": "object"
            },
            {
              "$ref": "#/$defs/CSVMapping"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Csvmapping"
        },
        "validation": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/ValueValidation"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Validation rules applied to the column value (e.g. enum options, numeric range).",
          "title": "Validation"
        },
        "CurveData": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/CurveDataEntityLink"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "For curve columns, the linked X/Y curve result columns.",
          "title": "Curvedata"
        }
      },
      "title": "DataColumnValue",
      "type": "object"
    },
    "DataTemplate": {
      "description": "A definition of what a test captures (a DAT).\n\nA ``DataTemplate`` (Data Template, ID format ``DAT...``) describes a test in two\nparts: its ``data_column_values`` are the measured RESULTS (the data columns, or\n\"direct variables\"), and its ``parameter_values`` are the CONDITIONS under which\nthe test is run (the \"indirect variables\"). A Data Template does not itself store\nmeasured values; those are recorded as Property Data. When the template is paired\nwith a Workflow inside a Block, only its parameters (not its result columns) flow\ninto the Workflow's setpoints.\n\nTemplates are managed through\n[`DataTemplateCollection`][albert.collections.data_templates.DataTemplateCollection]\n(``client.data_templates``).\n\n!!! example\n    ```python\n    from albert.resources.data_templates import DataTemplate, DataColumnValue\n\n    template = DataTemplate(\n        name=\"Tensile Strength Test\",\n        data_column_values=[DataColumnValue(data_column_id=\"DAC9999999\")],\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "Tags": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/Tag"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A list of Tag objects or strings representing tags.",
          "title": "Tags"
        },
        "name": {
          "description": "The name of the data template. Required.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert Data Template ID (format ``DAT...``). Set when the template is retrieved from or created in Albert. Serialized as ``albertId``.",
          "title": "Albertid"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A free-text description of the template.",
          "title": "Description"
        },
        "class": {
          "anyOf": [
            {
              "$ref": "#/$defs/SecurityClass"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The access/security class of the template. Serialized as ``class``."
        },
        "verified": {
          "default": false,
          "description": "The approval/governance state of the template. Defaults to False.",
          "title": "Verified",
          "type": "boolean"
        },
        "ACL": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/User"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The access-control list of users who can access the template. Serialized as ``ACL``.",
          "title": "Acl"
        },
        "DataColumns": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/DataColumnValue"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The measured results the test captures (its data columns / direct variables). See [`DataColumnValue`][albert.resources.data_templates.DataColumnValue].",
          "title": "Datacolumns"
        },
        "Parameters": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/ParameterValue"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The conditions under which the test is run (its indirect variables). See [`ParameterValue`][albert.resources.parameter_groups.ParameterValue].",
          "title": "Parameters"
        },
        "DeletedParameters": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/ParameterValue"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Deletedparameters"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom metadata fields. Allowed keys are defined by the workspace's CustomFields configuration.",
          "title": "Metadata"
        },
        "Documents": {
          "description": "Documents registered on the template. Read-only. Only populated by\n[`get_by_id`][albert.collections.data_templates.DataTemplateCollection.get_by_id]; empty\non templates from `get_by_ids`, `get_all`, and `search`. Scripts are not documents: they\nare attachments with category `Script`, found with\n[`get_by_parent_ids`][albert.collections.attachments.AttachmentCollection.get_by_parent_ids]\nusing the template ID as the parent.",
          "items": {
            "$ref": "#/$defs/EntityLink"
          },
          "title": "Documents",
          "type": "array"
        },
        "originalName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The original template name as stored in Albert. Read-only.",
          "title": "Originalname"
        },
        "fullName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The fully qualified template name. Read-only. See Also --------",
          "title": "Fullname"
        }
      },
      "required": [
        "name"
      ],
      "title": "DataTemplate",
      "type": "object"
    },
    "DataType": {
      "description": "The data type of a parameter value, driving how it is validated.\n\nUsed by [`ValueValidation`][albert.resources.parameter_groups.ValueValidation] to declare what kind of value a parameter\naccepts.\n\nAttributes\n----------\nNUMBER : str\n    A numeric value.\nSTRING : str\n    A free-text string value.\nENUM : str\n    A value restricted to a fixed set of options (see\n    [`EnumValidationValue`][albert.resources.parameter_groups.EnumValidationValue]).\nIMAGE : str\n    An image value.\nCURVE : str\n    A curve (series) value.\nDATE : str\n    A calendar date value stored as ``YYYY-MM-DD``.\nTIMESTAMP : str\n    A date-and-time value in ISO 8601 format with a UTC offset\n    (e.g. ``2026-05-21T14:32:00+02:00``).",
      "enum": [
        "number",
        "string",
        "enum",
        "image",
        "curve",
        "date",
        "timestamp"
      ],
      "title": "DataType",
      "type": "string"
    },
    "EntityLink": {
      "properties": {
        "id": {
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "required": [
        "id"
      ],
      "title": "EntityLink",
      "type": "object"
    },
    "EntityLinkWithName": {
      "description": "EntityLink that includes the name field in serialization.",
      "properties": {
        "id": {
          "title": "Id",
          "type": "string"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Name"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Category"
        }
      },
      "required": [
        "id"
      ],
      "title": "EntityLinkWithName",
      "type": "object"
    },
    "EnumValidationValue": {
      "description": "Represents a value for an enum type validation.",
      "properties": {
        "text": {
          "description": "The text of the enum value.",
          "title": "Text",
          "type": "string"
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the enum value. If not provided, the ID will be generated upon creation.",
          "title": "Id"
        },
        "originalText": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Originaltext"
        }
      },
      "required": [
        "text"
      ],
      "title": "EnumValidationValue",
      "type": "object"
    },
    "Hazard": {
      "description": "A single GHS hazard classification associated with a CAS substance.\n\nHazards are read from the CAS record; a [`Cas`][albert.resources.cas.Cas] may carry a list of them.",
      "properties": {
        "subCategory": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard subcategory",
          "title": "Subcategory"
        },
        "hCode": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard code",
          "title": "Hcode"
        },
        "category": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard category",
          "title": "Category"
        },
        "class": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard classification",
          "title": "Class"
        },
        "hCodeText": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard code text",
          "title": "Hcodetext"
        }
      },
      "title": "Hazard",
      "type": "object"
    },
    "ImagePropertyValue": {
      "description": "Image file input for an image-type data column.\n\nPass as the ``value`` of a [`TaskPropertyCreate`][albert.resources.property_data.TaskPropertyCreate] when the target data\ncolumn stores an image. The file is uploaded when the property is created.\n\n!!! example\n    ```python\n    from albert.resources.property_data import ImagePropertyValue\n\n    image = ImagePropertyValue(file_path=\"results/sample.png\")\n    ```",
      "properties": {
        "file_path": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "format": "path",
              "type": "string"
            }
          ],
          "description": "Local path to the image file to upload. See Also --------",
          "title": "File Path"
        }
      },
      "required": [
        "file_path"
      ],
      "title": "ImagePropertyValue",
      "type": "object"
    },
    "ImportMode": {
      "description": "How a curve example's source CSV is ingested.\n\nAttributes\n----------\nSCRIPT\n    Run the attached column script first, then import its output (requires a script\n    attachment on the column).\nCSV\n    Ingest the CSV file directly.",
      "enum": [
        "SCRIPT",
        "CSV"
      ],
      "title": "ImportMode",
      "type": "string"
    },
    "InventoryCategory": {
      "description": "The kind of material an [`InventoryItem`][albert.resources.inventory.InventoryItem] represents.\n\nEvery inventory item belongs to exactly one category, which determines how it\nis used across the platform and which fields are relevant to it.\n\nAttributes\n----------\nRAW_MATERIALS : str\n    A purchased substance used as an ingredient (e.g. a solvent or pigment).\n    Typically linked to a manufacturing ``company`` and one or more CAS numbers.\nCONSUMABLES : str\n    Lab supplies consumed during work (e.g. gloves, vials, filters).\nEQUIPMENT : str\n    Instruments and apparatus (e.g. a balance or spectrometer).\nFORMULAS : str\n    A mixture designed in Albert under a Project. Creating a Formula item\n    requires ``project_id`` set to the parent Project's ID.",
      "enum": [
        "RawMaterials",
        "Consumables",
        "Equipment",
        "Formulas"
      ],
      "title": "InventoryCategory",
      "type": "string"
    },
    "InventoryDensity": {
      "description": "The density of an inventory item or lot measured by volume.\n\nDensity is expressed in grams per milliliter (g/mL) and locked at creation.\nWhen creating a volume-based item or lot, supply either a bare numeric value\n(float, int, or string) or an [`InventoryDensity`][albert.resources.inventory.InventoryDensity]\ninstance. Metadata fields (attribute ID, unit ID, unit name, locked flag)\nare populated by the server and are read-only.\n\n!!! example\n    ```python\n    from albert.resources.inventory import InventoryDensity\n\n    density = InventoryDensity(value=1.05)\n    ```",
      "properties": {
        "value": {
          "description": "The density value in g/mL.",
          "title": "Value",
          "type": "number"
        },
        "atrId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the density attribute definition. Read-only.",
          "title": "Atrid"
        },
        "unitId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the density measurement unit. Read-only.",
          "title": "Unitid"
        },
        "unitName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display name of the density measurement unit (e.g. ``g/mL``). Read-only.",
          "title": "Unitname"
        },
        "lockedAtCreation": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the density was locked when the parent entity was created. Read-only.",
          "title": "Lockedatcreation"
        }
      },
      "required": [
        "value"
      ],
      "title": "InventoryDensity",
      "type": "object"
    },
    "InventoryItem": {
      "description": "A catalog entry for a material tracked in Albert.\n\nAn ``InventoryItem`` is the canonical record for a raw material, consumable,\npiece of equipment, or formula. Its [`InventoryCategory`][albert.resources.inventory.InventoryCategory] determines how it\nis used across the platform, and once saved it is referenced everywhere by its\nInventory ID (format ``INV...``, e.g. ``\"INVA9999999\"``). Raw materials are typically\nlinked to a manufacturing ``company`` and a compositional breakdown of CAS\namounts. A Formula item represents a mixture designed in a Project; creating\none requires ``project_id`` set to the parent Project's ID.\n\nItems are managed through\n[`InventoryCollection`][albert.collections.inventory.InventoryCollection] (``client.inventory``).\n\n!!! example\n    ```python\n    from albert.resources.inventory import (\n        InventoryCategory,\n        InventoryDensity,\n        InventoryItem,\n        InventoryUnitCategory,\n    )\n\n    # Mass-based inventory item\n    item = InventoryItem(\n        name=\"Titanium Dioxide\",\n        category=InventoryCategory.RAW_MATERIALS,\n        company=\"Acme Chemicals\",\n    )\n\n    # Volume-based inventory item\n    volume_item = InventoryItem(\n        name=\"Isopropyl Alcohol\",\n        category=InventoryCategory.RAW_MATERIALS,\n        unit_category=InventoryUnitCategory.VOLUME,\n        density=InventoryDensity(value=0.785),\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "Tags": {
          "anyOf": [
            {
              "items": {
                "anyOf": [
                  {
                    "$ref": "#/$defs/Tag"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  }
                ]
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A list of Tag objects or strings representing tags.",
          "title": "Tags"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The name of the item.",
          "title": "Name"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert Inventory ID (format ``INV...``). Set when the item is retrieved from or created in Albert. Serialized as ``albertId``.",
          "title": "Albertid"
        },
        "description": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A free-text description of the item.",
          "title": "Description"
        },
        "category": {
          "$ref": "#/$defs/InventoryCategory",
          "description": "The kind of material this item represents. Required. One of ``RawMaterials``, ``Consumables``, ``Equipment``, or ``Formulas``."
        },
        "unitCategory": {
          "anyOf": [
            {
              "$ref": "#/$defs/InventoryUnitCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The dimension the item is measured in (mass, volume, length, pressure, or units). If not supplied, it defaults from ``category``: mass for raw materials and formulas, units for equipment and consumables."
        },
        "density": {
          "anyOf": [
            {
              "$ref": "#/$defs/InventoryDensity"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The density in g/mL for volume-based inventory items. Required at creation when ``unit_category`` is volume. Locked at creation and cannot be changed."
        },
        "class": {
          "anyOf": [
            {
              "$ref": "#/$defs/SecurityClass"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The access/security class of the item (e.g. confidential, shared, restricted)."
        },
        "Company": {
          "anyOf": [
            {
              "$ref": "#/$defs/Company"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The manufacturing Company associated with the item (links to the Company collection). Accepts a [`Company`][albert.resources.companies.Company] or a name string; a string is turned into a Company that is first-or-created on save.",
          "title": "Company"
        },
        "minimum": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/InventoryMinimum"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Per-Location reorder thresholds for the item. See [`InventoryMinimum`][albert.resources.inventory.InventoryMinimum].",
          "title": "Minimum"
        },
        "alias": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "An alternate name for the item.",
          "title": "Alias"
        },
        "Cas": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/CasAmount"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The item's compositional breakdown as CAS amounts. See [`CasAmount`][albert.resources.inventory.CasAmount].",
          "title": "Cas"
        },
        "isFormulaOverride": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the substance/CAS-level breakdown for this formula has been overridden from the auto-calculated value; commonly set to indicate the formula is not a non-reactive homogeneous mixture.",
          "title": "Isformulaoverride"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom metadata fields. Allowed keys are defined by the workspace's CustomFields configuration.",
          "title": "Metadata"
        },
        "parentId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The parent Project ID. Required for Formulas. Serialized as ``parentId``.",
          "title": "Parentid"
        },
        "ACL": {
          "description": "Access-control entries governing who can act on the item.",
          "items": {
            "$ref": "#/$defs/ACL"
          },
          "title": "Acl",
          "type": "array"
        },
        "onHand": {
          "default": 0.0,
          "description": "Total amount currently on hand across all lots. Read-only.",
          "title": "Onhand",
          "type": "number"
        },
        "onHandL": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Total amount currently on hand across all lots in litres for volume-based items. Read-only.",
          "title": "Onhandl"
        },
        "TaskConfig": {
          "anyOf": [
            {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Task configuration associated with the item. Read-only.",
          "title": "Taskconfig"
        },
        "formulaId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The formula ID for a formula item. Read-only.",
          "title": "Formulaid"
        },
        "Symbols": {
          "anyOf": [
            {
              "items": {
                "additionalProperties": true,
                "type": "object"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Hazard/pictogram symbols associated with the item. Read-only.",
          "title": "Symbols"
        },
        "unNumber": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The UN hazardous-material number, when applicable. Read-only.",
          "title": "Unnumber"
        },
        "recentAttachmentId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the most recent attachment on the item. Read-only. See Also --------",
          "title": "Recentattachmentid"
        }
      },
      "required": [
        "category"
      ],
      "title": "InventoryItem",
      "type": "object"
    },
    "InventoryMinimum": {
      "description": "A reorder threshold: the minimum stock of an [`InventoryItem`][albert.resources.inventory.InventoryItem] to keep at a Location.\n\nEach entry pairs one Location with the minimum quantity of an item that must be\nkept on hand there. An [`InventoryItem`][albert.resources.inventory.InventoryItem] may carry several of these, one per\nLocation. Identify the Location either by passing a full\n[`Location`][albert.resources.locations.Location] object as ``location`` (its ``id`` is\nthen copied onto ``id``), or by passing the location ``id`` string directly. Provide\none or the other, not both.\n\n!!! example\n    ```python\n    from albert.resources.inventory import InventoryMinimum\n\n    minimum = InventoryMinimum(id=\"LOC9999999\", minimum=500)\n    ```",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the Location this minimum applies to. Provide either a ``location`` or an ``id``; when ``location`` is given, this is set from it.",
          "title": "Id"
        },
        "location": {
          "anyOf": [
            {
              "$ref": "#/$defs/Location"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Location object this minimum applies to. Excluded from serialization. Provide either a ``location`` or an ``id``."
        },
        "minimum": {
          "description": "The minimum amount of the item that must be kept in stock at the Location. Must be between 0 and 1e15. See Also --------",
          "maximum": 1000000000000000,
          "minimum": 0,
          "title": "Minimum",
          "type": "number"
        }
      },
      "required": [
        "minimum"
      ],
      "title": "InventoryMinimum",
      "type": "object"
    },
    "InventoryUnitCategory": {
      "description": "The dimension of the unit an [`InventoryItem`][albert.resources.inventory.InventoryItem] is measured and stocked in.\n\nDetermines how quantities on hand and in formulas are interpreted. When not\nsupplied, the category defaults based on [`InventoryCategory`][albert.resources.inventory.InventoryCategory]: ``MASS``\nfor raw materials and formulas, ``UNITS`` for equipment and consumables.\n\nAttributes\n----------\nMASS : str\n    Measured by mass (e.g. grams, kilograms).\nVOLUME : str\n    Measured by volume (e.g. milliliters, liters). Supported for RawMaterials\n    and Consumables; requires ``density`` at creation.\nLENGTH : str\n    Measured by length (e.g. meters).\nPRESSURE : str\n    Measured by pressure.\nUNITS : str\n    Counted as discrete units (e.g. each item).",
      "enum": [
        "mass",
        "volume",
        "length",
        "pressure",
        "units"
      ],
      "title": "InventoryUnitCategory",
      "type": "string"
    },
    "JobSummary": {
      "description": "A brief summary of a background processing job.",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The job identifier.",
          "title": "Id"
        },
        "state": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The current state of the job.",
          "title": "State"
        }
      },
      "title": "JobSummary",
      "type": "object"
    },
    "ListItem": {
      "description": "A single allowed value in a configurable list of options.\n\nList items back the choices offered by ``list``-type custom fields (e.g.\ndropdown options) and other fixed option sets in Albert. A\n[`CustomField`][albert.resources.custom_fields.CustomField] with\n[`LIST`][albert.resources.custom_fields.FieldType.LIST] defines a list (keyed\nby ``list_type``, typically the field's name); its selectable options are\n``ListItem`` records with a matching ``list_type``. Managed through\n[`ListsCollection`][albert.collections.lists.ListsCollection] (``client.lists``).\n\n!!! example\n    ```python\n    from albert.resources.lists import ListItem, ListItemCategory\n    item = ListItem(name=\"In Progress\", category=ListItemCategory.USER_DEFINED)\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The display name of the list item (the option value).",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the list item. Set when the item is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/ListItemCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The category of the list item. Allowed values are ``businessDefined``, ``userDefined``, ``projects``, ``extensions``, and ``inventory``."
        },
        "listType": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The list this item belongs to. For a list-type custom field this is typically the field's name (see [`CustomField`][albert.resources.custom_fields.CustomField]). For built-in categories the allowed values are ``projectState`` for ``projects``, ``extensions`` for ``extensions``, and ``casCategory`` or ``inventoryFunction`` for ``inventory``.",
          "title": "Listtype"
        }
      },
      "required": [
        "name"
      ],
      "title": "ListItem",
      "type": "object"
    },
    "ListItemCategory": {
      "description": "The category a list item belongs to, which governs its allowed list types.\n\nAttributes\n----------\nBUSINESS_DEFINED : str\n    Predefined values managed at the business/organization level.\nUSER_DEFINED : str\n    Custom values defined by users.\nPROJECTS : str\n    Values used by projects (e.g. project states).\nEXTENSIONS : str\n    Values used by extensions.\nINVENTORY : str\n    Values used by inventory (e.g. CAS categories or inventory functions).",
      "enum": [
        "businessDefined",
        "userDefined",
        "projects",
        "extensions",
        "inventory"
      ],
      "title": "ListItemCategory",
      "type": "string"
    },
    "Location": {
      "description": "A physical lab or site location in Albert.\n\nLocations are referenced by Tasks and Inventory Items to record where an\nactivity is performed or where a material lives, and each Location can hold\none or more Storage Locations\n([`StorageLocation`][albert.resources.storage_locations.StorageLocation]). Managed\nthrough [`LocationCollection`][albert.collections.locations.LocationCollection].\n\n!!! example\n    ```python\n    from albert.resources.locations import Location\n    location = Location(\n        name=\"Boston Lab\",\n        latitude=42.3601,\n        longitude=-71.0589,\n        address=\"1 Main St\",\n        country=\"US\",\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The human-readable name of the location.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the location. Assigned by Albert and populated once the location has been created or retrieved.",
          "title": "Albertid"
        },
        "latitude": {
          "description": "The latitude of the location, in decimal degrees.",
          "title": "Latitude",
          "type": "number"
        },
        "longitude": {
          "description": "The longitude of the location, in decimal degrees.",
          "title": "Longitude",
          "type": "number"
        },
        "address": {
          "description": "The street address of the location.",
          "title": "Address",
          "type": "string"
        },
        "country": {
          "anyOf": [
            {
              "maxLength": 2,
              "minLength": 2,
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The two-letter country code of the location (for example, ``\"US\"``).",
          "title": "Country"
        }
      },
      "required": [
        "name",
        "latitude",
        "longitude",
        "address"
      ],
      "title": "Location",
      "type": "object"
    },
    "Operator": {
      "description": "A comparison operator constraining a numeric parameter value.\n\nUsed by [`ValueValidation`][albert.resources.parameter_groups.ValueValidation] to bound acceptable values. ``between``\ntakes ``min`` and ``max``; every single-bound operator takes ``value`` (e.g. ``gte``\nwith ``value=\"0\"`` requires the value to be at least 0).\n\nAttributes\n----------\nBETWEEN : str\n    Value must fall between ``min`` and ``max`` (inclusive).\nLESS_THAN : str\n    Value must be less than ``value``.\nLESS_THAN_OR_EQUAL : str\n    Value must be less than or equal to ``value``.\nGREATER_THAN_OR_EQUAL : str\n    Value must be greater than or equal to ``value``.\nGREATER_THAN : str\n    Value must be greater than ``value``.\nEQUALS : str\n    Value must equal ``value``.\nNOT_EQUALS : str\n    Not accepted by the API for parameter validations.",
      "enum": [
        "between",
        "lt",
        "lte",
        "gte",
        "gt",
        "eq",
        "neq"
      ],
      "title": "Operator",
      "type": "string"
    },
    "Parameter": {
      "description": "The definition of a single experimental condition or input variable.\n\nA Parameter (ID format ``PRM...``) names an \"indirect variable\" such as\nTemperature, Spin Speed, or Instrument. The Parameter itself only defines the\nvariable; its actual value and unit are fixed to a setpoint later, inside a\n[`Workflow`][albert.resources.workflows.Workflow]. Parameters are the building\nblocks of Parameter Groups\n([`ParameterGroup`][albert.resources.parameter_groups.ParameterGroup]) and form the\nparameter side of Data Templates\n([`DataTemplate`][albert.resources.data_templates.DataTemplate]).\n\nManage parameters through\n[`ParameterCollection`][albert.collections.parameters.ParameterCollection]\n(``client.parameters``).\n\n!!! example\n    ```python\n    from albert import Albert\n    from albert.resources.parameters import Parameter\n    client = Albert()\n    param = client.parameters.create(parameter=Parameter(name=\"Temperature\"))\n    param.id\n    # 'PRM9999999'\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The name of the parameter. Names must be unique.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the parameter (format ``PRM...``). Set when the parameter is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Optional user-defined metadata keyed by field name.",
          "title": "Metadata"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/ParameterCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the parameter is ``Normal`` (scalar value) or ``Special`` (entity reference). Set by the platform and read-only."
        },
        "rank": {
          "anyOf": [
            {
              "type": "integer"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The rank of the returned parameter. Read-only.",
          "title": "Rank"
        },
        "required": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether this parameter must be filled in within a Parameter Group.",
          "title": "Required"
        }
      },
      "required": [
        "name"
      ],
      "title": "Parameter",
      "type": "object"
    },
    "ParameterCategory": {
      "description": "Whether a [`Parameter`][albert.resources.parameters.Parameter]'s value is a plain scalar or an entity reference.\n\nSet by the platform and read-only. It determines how a parameter's value is\ninterpreted when a setpoint is assigned to it inside a\n[`Workflow`][albert.resources.workflows.Workflow].\n\nAttributes\n----------\nNORMAL : str\n    A \"normal\" parameter whose value is a plain scalar (e.g. a number or text),\n    such as Temperature or Spin Speed.\nSPECIAL : str\n    A \"special\" parameter whose value references another entity (e.g. Equipment,\n    a Consumable, or a Template). The setpoint value is that entity's ID rather\n    than a plain scalar.",
      "enum": [
        "Normal",
        "Special"
      ],
      "title": "ParameterCategory",
      "type": "string"
    },
    "ParameterValue": {
      "description": "A single [`Parameter`][albert.resources.parameters.Parameter] and its value within a [`ParameterGroup`][albert.resources.parameter_groups.ParameterGroup].\n\nA ``ParameterValue`` binds one Parameter to the value, unit, and validation\nrules it takes inside a group. Each entry must reference an existing Parameter,\nso provide exactly one of ``id`` (the Parameter's Albert ID) or ``parameter``\n(the [`Parameter`][albert.resources.parameters.Parameter] object itself); when a\n``parameter`` is given, the ``id``, ``category``, and ``name`` are populated\nfrom it. Values are later fixed to setpoints inside a\n[`Workflow`][albert.resources.workflows.Workflow].\n\n!!! example\n    ```python\n    from albert.resources.parameter_groups import ParameterValue\n\n    # Reference the parameter by its Albert ID\n    value = ParameterValue(id=\"PRM9999999\", value=\"500\")\n    ```",
      "properties": {
        "parameter": {
          "anyOf": [
            {
              "$ref": "#/$defs/Parameter"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Parameter this value is associated with. Provide either ``id`` or ``parameter``. Excluded from serialization."
        },
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the associated Parameter. Provide either ``id`` or ``parameter``.",
          "title": "Id"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/ParameterCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The category of the parameter (``Normal`` or ``Special``). Populated from ``parameter`` when one is provided. When only ``id`` is given, the parameter-group create API rejects the payload (``400 \"Category mismatch ... Category undefined expected\"``), so set ``category`` explicitly (``ParameterCategory.NORMAL`` for ordinary parameters) or pass the full ``parameter`` object."
        },
        "specialType": {
          "anyOf": [
            {
              "$ref": "#/$defs/SpecialParameterType"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The specific entity type for a ``Special`` parameter. ``None`` for ``Normal`` parameters. The platform does not validate this field on create the way it validates ``category``, so omitting it does not cause a 400."
        },
        "shortName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "A short name for the parameter value. Serialized as ``shortName``.",
          "title": "Shortname"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "$ref": "#/$defs/InventoryItem"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "$ref": "#/$defs/User"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The value of the parameter. Can be a plain string, an [`InventoryItem`][albert.resources.inventory.InventoryItem] (e.g. when the parameter represents an instrument choice), or a [`User`][albert.resources.users.User] (e.g. a user reference such as \"Performed By\").",
          "title": "Value"
        },
        "Unit": {
          "anyOf": [
            {
              "$ref": "#/$defs/Unit"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The unit of measure for the value. Serialized as ``Unit``.",
          "title": "Unit"
        },
        "Added": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null
        },
        "required": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether this parameter is required. Defaults to False.",
          "title": "Required"
        },
        "validation": {
          "anyOf": [
            {
              "items": {
                "$ref": "#/$defs/ValueValidation"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Validation rules applied to the value. See [`ValueValidation`][albert.resources.parameter_groups.ValueValidation].",
          "title": "Validation"
        },
        "name": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The name of the parameter. Read-only.",
          "title": "Name"
        },
        "sequence": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The sequence of the parameter within the group. Read-only.",
          "title": "Sequence"
        },
        "originalShortName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Originalshortname"
        },
        "originalName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Originalname"
        }
      },
      "title": "ParameterValue",
      "type": "object"
    },
    "Role": {
      "description": "A named set of access permissions within a tenant.\n\nA role bundles policies that determine what a holder is allowed to do. Roles\nare assigned to users ([`User`][albert.resources.users.User]) and referenced\nby entity ACLs. Roles are typically read from Albert rather than built by\nhand.",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the role. Role IDs may contain ``#`` characters. Set once the role is retrieved from Albert.",
          "title": "Albertid"
        },
        "name": {
          "description": "The display name of the role.",
          "title": "Name",
          "type": "string"
        },
        "Policies": {
          "anyOf": [
            {
              "items": {},
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The policies (permission rules) associated with the role.",
          "title": "Policies"
        },
        "tenant": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The ID of the tenant the role belongs to. Omitted on role-only (id-filtered) responses.",
          "title": "Tenant"
        },
        "visibility": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the role is visible in the platform's role listings.",
          "title": "Visibility"
        }
      },
      "required": [
        "name"
      ],
      "title": "Role",
      "type": "object"
    },
    "SecurityClass": {
      "description": "The security (access control) class of a resource.\n\nAttributes\n----------\nSHARED : str\n    Accessible to all members of the tenant.\nRESTRICTED : str\n    Access is restricted to specific teams or users.\nCONFIDENTIAL : str\n    Access is limited to designated users only.\nPRIVATE : str\n    Visible only to the owner. Used by Projects.\nPUBLIC : str\n    Accessible publicly. Returned by Parameter Groups.",
      "enum": [
        "shared",
        "restricted",
        "confidential",
        "private",
        "public"
      ],
      "title": "SecurityClass",
      "type": "string"
    },
    "SpecialParameterType": {
      "description": "The specific entity type referenced by a Special\n[`Parameter`][albert.resources.parameters.Parameter].\n\nNot returned by the platform parameter API (use Zeus reports RET48/RET52 to\nread the subtype from experiment data). Writable on\n[`ParameterValue`][albert.resources.parameter_groups.ParameterValue] and\n[`TargetParameter`][albert.resources.targets.TargetParameter].\n\nEach member implies an id-namespace for the value column in experiment reports\n(RET48/RET52): ``RAW_MATERIALS`` values carry ``INVA...`` ids, ``CONSUMABLES``\ncarry ``INVB...`` ids, ``EQUIPMENT`` carry ``INVC...`` ids, and ``FORMULAS``\ncarry ``INVMO...`` ids.\n\nMirrors [`InventoryCategory`][albert.resources.inventory.InventoryCategory],\nthe canonical \"kind of material\" an\n[`InventoryItem`][albert.resources.inventory.InventoryItem] belongs to. A\nSpecial parameter's value is always a reference to an `InventoryItem`, so its\nsubtype is one of that enum's members.\n\nAttributes\n----------\nRAW_MATERIALS : str\n    A raw material entity. Values appear as ``INVA...`` ids in report columns.\nCONSUMABLES : str\n    A consumable entity. Values appear as ``INVB...`` ids in report columns.\nEQUIPMENT : str\n    An equipment entity. Values appear as ``INVC...`` ids in report columns.\nFORMULAS : str\n    A formula entity (a mixture designed through a Worksheet). Values appear\n    as ``INVMO...`` ids in report columns.",
      "enum": [
        "RawMaterials",
        "Consumables",
        "Equipment",
        "Formulas"
      ],
      "title": "SpecialParameterType",
      "type": "string"
    },
    "Status": {
      "description": "The status of a resource.\n\nAttributes\n----------\nACTIVE : str\n    The resource is fully operational and visible in normal operations.\nINACTIVE : str\n    The resource is hidden from normal operations and disabled from use.",
      "enum": [
        "active",
        "inactive"
      ],
      "title": "Status",
      "type": "string"
    },
    "StorageKeyReference": {
      "description": "S3 storage key references for a data column file result.",
      "properties": {
        "rawfile": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The raw file storage key.",
          "title": "Rawfile"
        },
        "s3Input": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the input file.",
          "title": "S3Input"
        },
        "s3Output": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the processed output file.",
          "title": "S3Output"
        },
        "preview": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a preview image.",
          "title": "Preview"
        },
        "thumb": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for a thumbnail image.",
          "title": "Thumb"
        },
        "original": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The S3 key for the original file.",
          "title": "Original"
        }
      },
      "title": "StorageKeyReference",
      "type": "object"
    },
    "Tag": {
      "description": "A freeform text label used to categorize and connect entities.\n\nTags are shared by name across the platform and can be applied to inventory\nitems, companies, tasks, and other records to group and filter them. Managed\nthrough [`TagCollection`][albert.collections.tags.TagCollection] (``client.tags``);\nthe usual entry point is [`get_or_create`][albert.collections.tags.TagCollection.get_or_create].\n\n!!! example\n    ```python\n    from albert.resources.tags import Tag\n    tag = Tag(tag=\"high-priority\")\n    ```\nMethods\n-------\nfrom_string(tag) -> Tag\n    Build a Tag from its name string.",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The name of the tag (its text label).",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the tag (format ``TAG...``). Set when the tag is retrieved from or created in Albert. Methods ------- from_string(tag) -> Tag Build a Tag from its name string.",
          "title": "Albertid"
        }
      },
      "required": [
        "name"
      ],
      "title": "Tag",
      "type": "object"
    },
    "TaskDataColumn": {
      "description": "A reference to a data column of a task's data template.\n\nIdentifies which data column a value targets. Used inside\n[`TaskPropertyCreate`][albert.resources.property_data.TaskPropertyCreate] to say which column of a block a value belongs to;\nthe identifiers are typically read off an existing block returned by\n[`get_task_block_properties`][albert.collections.property_data.PropertyDataCollection.get_task_block_properties].",
      "properties": {
        "id": {
          "description": "The data column (format ``DAC...``). Serialized as ``id``.",
          "title": "Id",
          "type": "string"
        },
        "columnId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The column's sequence identifier within the block. Serialized as ``columnId``. See Also --------",
          "title": "Columnid"
        }
      },
      "required": [
        "id"
      ],
      "title": "TaskDataColumn",
      "type": "object"
    },
    "Unit": {
      "description": "A unit of measure (e.g. ``g``, ``mL``, ``\u00b0C``).\n\nUnits qualify quantities throughout the platform: inventory amounts,\nparameter values, and property results. Managed through\n[`UnitCollection`][albert.collections.units.UnitCollection] (``client.units``).\n\n!!! example\n    ```python\n    from albert.resources.units import Unit, UnitCategory\n    unit = Unit(name=\"milliliter\", symbol=\"mL\", category=UnitCategory.LIQUID_VOLUME)\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert ID of the unit (format ``UNI...``). Set when the unit is retrieved from or created in Albert.",
          "title": "Albertid"
        },
        "name": {
          "description": "Currently this is the only field that is displayed in Albert, so use this for display purposes. Therefore, users often use the symbol for the unit here as that's the preferred display.",
          "title": "Name",
          "type": "string"
        },
        "symbol": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The display symbol for the unit (e.g. ``\"g\"``).",
          "title": "Symbol"
        },
        "Synonyms": {
          "anyOf": [
            {
              "items": {
                "type": "string"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "description": "Alternate names or spellings that also refer to this unit.",
          "title": "Synonyms"
        },
        "category": {
          "anyOf": [
            {
              "$ref": "#/$defs/UnitCategory"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The physical quantity the unit measures (e.g. ``Mass``, ``Volume``)."
        },
        "verified": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": false,
          "description": "Whether the unit has been verified in Albert. Read-only.",
          "title": "Verified"
        }
      },
      "required": [
        "name"
      ],
      "title": "Unit",
      "type": "object"
    },
    "UnitCategory": {
      "description": "The physical quantity a unit measures.\n\nAttributes\n----------\nLENGTH : str\n    Length units (e.g. m, cm).\nVOLUME : str\n    Volume units (e.g. m\u00b3).\nLIQUID_VOLUME : str\n    Liquid volume units (e.g. L, mL).\nANGLES : str\n    Angle units (e.g. degrees, radians).\nTIME : str\n    Time units (e.g. s, h).\nFREQUENCY : str\n    Frequency units (e.g. Hz).\nMASS : str\n    Mass units (e.g. g, kg).\nCURRENT : str\n    Electric current units (e.g. A).\nTEMPERATURE : str\n    Temperature units (e.g. \u00b0C, K).\nAMOUNT : str\n    Amount of substance units (e.g. mol).\nLUMINOSITY : str\n    Luminous intensity units (e.g. cd).\nFORCE : str\n    Force units (e.g. N).\nENERGY : str\n    Energy units (e.g. J).\nPOWER : str\n    Power units (e.g. W).\nPRESSURE : str\n    Pressure units (e.g. Pa, bar).\nELECTRICITY_AND_MAGNETISM : str\n    Electricity and magnetism units.\nOTHER : str\n    Units that do not fit another category.\nWEIGHT : str\n    Weight units.\nAREA : str\n    Area units (e.g. m\u00b2).\nSURFACE_AREA : str\n    Surface area units.\nBINARY : str\n    Binary/digital-information units (e.g. bytes).\nCAPACITANCE : str\n    Capacitance units (e.g. F).\nSPEED : str\n    Speed units (e.g. m/s).\nELECTRICAL_CONDUCTIVITY : str\n    Electrical conductivity units.\nELECTRICAL_PERMITTIVITY : str\n    Electrical permittivity units.\nDENSITY : str\n    Density units (e.g. g/mL).\nRESISTANCE : str\n    Electrical resistance units (e.g. \u03a9).",
      "enum": [
        "Length",
        "Volume",
        "Liquid volume",
        "Angles",
        "Time",
        "Frequency",
        "Mass",
        "Electric current",
        "Temperature",
        "Amount of substance",
        "Luminous intensity",
        "Force",
        "Energy",
        "Power",
        "Pressure",
        "Electricity and magnetism",
        "Other",
        "Weight",
        "Area",
        "Surface Area",
        "Binary",
        "Capacitance",
        "Speed",
        "Electrical conductivity",
        "Electrical permitivitty",
        "Density",
        "Resistance"
      ],
      "title": "UnitCategory",
      "type": "string"
    },
    "User": {
      "description": "An Albert user account: a person who can log in and act in the platform.\n\nA user has a name and email, an optional home\n[`Location`][albert.resources.locations.Location], and a set of\n[`Role`][albert.resources.roles.Role] objects that govern what they can do.\nThe ``user_class`` sets a broad permission tier\n([`UserClass`][albert.resources.users.UserClass]). Users are grouped into teams\n([`Team`][albert.resources.teams.Team]), and are referenced across the\nplatform, for example as the assignee of a Task or in an entity's ACL.\n\n!!! example\n    ```python\n    from albert.resources.users import User, UserClass\n    user = User(\n        name=\"Ada Lovelace\",\n        email=\"ada@example.com\",\n        user_class=UserClass.STANDARD,\n    )\n    ```",
      "properties": {
        "status": {
          "anyOf": [
            {
              "$ref": "#/$defs/Status"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The status of the resource, optional."
        },
        "Created": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the creation of the resource, optional."
        },
        "Updated": {
          "anyOf": [
            {
              "$ref": "#/$defs/AuditFields"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Audit fields for the update of the resource, optional."
        },
        "name": {
          "description": "The display name of the user.",
          "title": "Name",
          "type": "string"
        },
        "albertId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The Albert User ID (format ``USR...``). Set once the user is registered in or retrieved from Albert.",
          "title": "Albertid"
        },
        "Location": {
          "anyOf": [
            {
              "$ref": "#/$defs/Location"
            },
            {
              "$ref": "#/$defs/EntityLink"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The user's home location.",
          "title": "Location"
        },
        "email": {
          "default": null,
          "description": "The user's email address.",
          "format": "email",
          "title": "Email",
          "type": "string"
        },
        "Roles": {
          "description": "The roles the user holds, which determine their permissions.",
          "items": {
            "anyOf": [
              {
                "$ref": "#/$defs/Role"
              },
              {
                "$ref": "#/$defs/EntityLink"
              }
            ]
          },
          "maxItems": 1,
          "title": "Roles",
          "type": "array"
        },
        "userClass": {
          "$ref": "#/$defs/UserClass",
          "default": "standard",
          "description": "The ACL class level of the user (broad permission tier)."
        },
        "witnesser": {
          "anyOf": [
            {
              "type": "boolean"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Whether the user can act as a witness on tasks (only relevant when witnessing is enabled for the tenant).",
          "title": "Witnesser"
        },
        "Metadata": {
          "anyOf": [
            {
              "additionalProperties": {
                "anyOf": [
                  {
                    "type": "number"
                  },
                  {
                    "type": "integer"
                  },
                  {
                    "type": "string"
                  },
                  {
                    "$ref": "#/$defs/EntityLinkWithName"
                  },
                  {
                    "$ref": "#/$defs/EntityLink"
                  },
                  {
                    "items": {
                      "anyOf": [
                        {
                          "$ref": "#/$defs/EntityLinkWithName"
                        },
                        {
                          "$ref": "#/$defs/EntityLink"
                        }
                      ]
                    },
                    "type": "array"
                  }
                ]
              },
              "type": "object"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "Custom metadata attached to the user.",
          "title": "Metadata"
        }
      },
      "required": [
        "name"
      ],
      "title": "User",
      "type": "object"
    },
    "UserClass": {
      "description": "The ACL class level of a user, setting a broad permission tier.\n\nAttributes\n----------\nGUEST : str\n    Most limited access; typically external or temporary users.\nSTANDARD : str\n    Default access level for regular users.\nTRUSTED : str\n    Elevated access above standard users.\nPRIVILEGED : str\n    High access level below full administrators.\nADMIN : str\n    Full administrative access to the tenant.",
      "enum": [
        "guest",
        "standard",
        "trusted",
        "privileged",
        "admin"
      ],
      "title": "UserClass",
      "type": "string"
    },
    "ValueValidation": {
      "description": "A validation rule constraining a [`ParameterValue`][albert.resources.parameter_groups.ParameterValue].\n\nDeclares the expected [`DataType`][albert.resources.parameter_groups.DataType] for a parameter value and, optionally,\nthe bounds or allowed options it must satisfy. Attach one or more of these to a\n[`ParameterValue`][albert.resources.parameter_groups.ParameterValue] via its ``validation`` field.\n\nWhen ``datatype`` is ``date`` or ``timestamp``, ``value``, ``min``, and ``max`` are\nstrings in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].\n\n!!! example\n    ```python\n    from albert.resources.parameter_groups import (\n        DataType,\n        Operator,\n        ValueValidation,\n    )\n\n    rule = ValueValidation(\n        datatype=DataType.NUMBER,\n        operator=Operator.BETWEEN,\n        min=\"0\",\n        max=\"100\",\n    )\n    ```",
      "properties": {
        "datatype": {
          "$ref": "#/$defs/DataType",
          "description": "The data type the value must conform to. Required."
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "items": {
                "$ref": "#/$defs/EnumValidationValue"
              },
              "type": "array"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "For ``ENUM`` types, the list of allowed options (see [`EnumValidationValue`][albert.resources.parameter_groups.EnumValidationValue]); otherwise the bound for single-bound operators (``lt``, ``lte``, ``gt``, ``gte``, ``eq``). For ``date`` and ``timestamp`` types, a string in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].",
          "title": "Value"
        },
        "min": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The lower bound, used only with ``operator=\"between\"``. For numeric types, a numeric string; for ``date`` and ``timestamp`` types, a string in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].",
          "title": "Min"
        },
        "max": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The upper bound, used only with ``operator=\"between\"``. For numeric types, a numeric string; for ``date`` and ``timestamp`` types, a string in the wire format documented on [`DataType`][albert.resources.parameter_groups.DataType].",
          "title": "Max"
        },
        "operator": {
          "anyOf": [
            {
              "$ref": "#/$defs/Operator"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The comparison operator: ``between`` uses ``min`` and ``max``; the others use ``value``."
        }
      },
      "required": [
        "datatype"
      ],
      "title": "ValueValidation",
      "type": "object"
    }
  },
  "description": "Input model for writing one measured value to a task.\n\nTargets a specific data column + interval combination + trial on a task's block,\nwith a required link to the block's data template, and carries the value to\nstore. Pass a list of these to\n[`add_properties_to_task`][albert.collections.property_data.PropertyDataCollection.add_properties_to_task]\nor\n[`update_or_create_task_properties`][albert.collections.property_data.PropertyDataCollection.update_or_create_task_properties].\n\nUse [`get_interval_id`][albert.resources.workflows.Workflow.get_interval_id] to build the\n``interval_combination`` from parameter setpoints. For image data columns pass an\n[`ImagePropertyValue`][albert.resources.property_data.ImagePropertyValue] as ``value``; for curve data columns pass a\n[`CurvePropertyValue`][albert.resources.property_data.CurvePropertyValue]; numeric values are coerced to strings.\n\n!!! example\n    ```python\n    from albert.resources.property_data import TaskPropertyCreate, TaskDataColumn\n\n    # Derive the data column and template from the existing block\n    block = client.property_data.get_task_block_properties(\n        inventory_id=\"INVA9999999\", task_id=\"TASFOR1\", block_id=\"BLK1\"\n    )\n    column = block.data[0].trials[0].data_columns[0]\n    new_value = TaskPropertyCreate(\n        interval_combination=\"default\",\n        data_column=TaskDataColumn(\n            data_column_id=column.id, column_sequence=column.sequence\n        ),\n        value=\"33.3\",\n        data_template=block.data_template,\n    )\n    ```\nNotes\n-----\n- Use ``Workflow.get_interval_id(parameter_values={\"name1\": \"value1\", ...})`` to\n  find the correct interval given the parameter names and setpoints.\n- Leave ``trial_number`` blank to create a new row/trial; create new trials one at\n  a time.\n- ``visible_trial_number`` can set the relative row number, allowing you to pass\n  multiple rows of data at once.\n\nSee Also\n--------\nTaskDataColumn : Identifies the data column a value targets.\nImagePropertyValue : Value input for image data columns.\nCurvePropertyValue : Value input for curve data columns.",
  "properties": {
    "status": {
      "anyOf": [
        {
          "$ref": "#/$defs/Status"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The status of the resource, optional."
    },
    "Created": {
      "anyOf": [
        {
          "$ref": "#/$defs/AuditFields"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Audit fields for the creation of the resource, optional."
    },
    "Updated": {
      "anyOf": [
        {
          "$ref": "#/$defs/AuditFields"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Audit fields for the update of the resource, optional."
    },
    "entity": {
      "const": "task",
      "default": "task",
      "description": "The entity type, which is always `DataEntity.TASK` for task properties.",
      "title": "Entity",
      "type": "string"
    },
    "intervalCombination": {
      "default": "default",
      "description": "The interval combination, which can be found using `Workflow.get_interval_id`.",
      "examples": [
        "default",
        "ROW4XROW2",
        "ROW2"
      ],
      "title": "Intervalcombination",
      "type": "string"
    },
    "DataColumns": {
      "$ref": "#/$defs/TaskDataColumn",
      "description": "The data column associated with the task property."
    },
    "value": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "integer"
        },
        {
          "type": "number"
        },
        {
          "$ref": "#/$defs/ImagePropertyValue"
        },
        {
          "$ref": "#/$defs/CurvePropertyValue"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The value of the task property. Use ImagePropertyValue for image data columns or CurvePropertyValue for curve data columns. Numeric values are coerced to strings.",
      "title": "Value"
    },
    "trialNo": {
      "default": null,
      "description": "The trial number/ row number. Leave blank to create a new row/trial.",
      "title": "Trialno",
      "type": "integer"
    },
    "DataTemplate": {
      "anyOf": [
        {
          "$ref": "#/$defs/DataTemplate"
        },
        {
          "$ref": "#/$defs/EntityLink"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The data template associated with the task property.",
      "title": "Datatemplate"
    },
    "visibleTrialNo": {
      "anyOf": [
        {
          "type": "integer"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Can be used to set the relative row number, allowing you to pass multiple rows of data at once.",
      "title": "Visibletrialno"
    }
  },
  "required": [
    "DataColumns"
  ],
  "title": "TaskPropertyCreate",
  "type": "object"
}

Fields:

Validators:

entity

The entity type, which is always DataEntity.TASK for task properties.

interval_combination

interval_combination: str = 'default'

The interval combination, which can be found using Workflow.get_interval_id.

data_column

data_column: TaskDataColumn

The data column associated with the task property.

value

value: (
    str
    | int
    | float
    | ImagePropertyValue
    | CurvePropertyValue
    | None
) = None

The value of the task property. Use ImagePropertyValue for image data columns or CurvePropertyValue for curve data columns. Numeric values are coerced to strings.

trial_number

trial_number: int = None

The trial number/ row number. Leave blank to create a new row/trial.

data_template

data_template: (
    SerializeAsEntityLink[DataTemplate] | None
) = None

The data template associated with the task property.

visible_trial_number

visible_trial_number: int | None = None

Can be used to set the relative row number, allowing you to pass multiple rows of data at once.

coerce_numeric_value

coerce_numeric_value(v)
Source code in src/albert/resources/property_data.py
@field_validator("value", mode="before")
@classmethod
def coerce_numeric_value(cls, v):
    if isinstance(v, bool):
        raise ValueError("Boolean values are not supported for TaskPropertyCreate.value.")
    if isinstance(v, int | float):
        return str(v)
    return v

set_visible_trial_number

set_visible_trial_number() -> TaskPropertyCreate
Source code in src/albert/resources/property_data.py
@model_validator(mode="after")
def set_visible_trial_number(self) -> TaskPropertyCreate:
    if self.visible_trial_number is None:
        if self.trial_number is not None:
            self.visible_trial_number = self.trial_number
        else:
            self.visible_trial_number = 1
    return self

PropertyDataPatchDatum

Bases: PatchDatum

A single patch operation for updating a task property value.

Extends PatchDatum with the ID of the property (or data column) to change. Pass a list of these to update_property_on_task.

Example

from albert.resources.property_data import PropertyDataPatchDatum
from albert.core.shared.models.patch import PatchOperation

patch = PropertyDataPatchDatum(
    operation=PatchOperation.UPDATE,
    id="PTD1",
    attribute="value",
    new_value="1.5",
    old_value="1.2",
)
Show JSON schema:
{
  "description": "A single patch operation for updating a task property value.\n\nExtends [`PatchDatum`][albert.core.shared.models.patch.PatchDatum] with the ID of the\nproperty (or data column) to change. Pass a list of these to\n[`update_property_on_task`][albert.collections.property_data.PropertyDataCollection.update_property_on_task].\n\n!!! example\n    ```python\n    from albert.resources.property_data import PropertyDataPatchDatum\n    from albert.core.shared.models.patch import PatchOperation\n\n    patch = PropertyDataPatchDatum(\n        operation=PatchOperation.UPDATE,\n        id=\"PTD1\",\n        attribute=\"value\",\n        new_value=\"1.5\",\n        old_value=\"1.2\",\n    )\n    ```",
  "properties": {
    "operation": {
      "title": "Operation",
      "type": "string"
    },
    "attribute": {
      "title": "Attribute",
      "type": "string"
    },
    "newValue": {
      "anyOf": [
        {},
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Newvalue"
    },
    "oldValue": {
      "anyOf": [
        {},
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Oldvalue"
    },
    "id": {
      "description": "The property data record (``PTD...``) or data column (``DAC...``) to patch. Serialized as ``id``.",
      "title": "Id",
      "type": "string"
    }
  },
  "required": [
    "operation",
    "attribute",
    "id"
  ],
  "title": "PropertyDataPatchDatum",
  "type": "object"
}

Fields:

property_column_id

property_column_id: DataColumnId | PropertyDataId

The property data record (PTD...) or data column (DAC...) to patch. Serialized as id.

InventoryPropertyDataCreate

Bases: BaseResource

Request/response body for writing custom property data to an inventory item.

Built internally by add_properties_to_inventory (one data column per request) and returned to report the registered value. Most users pass InventoryDataColumn objects to that method rather than constructing this directly.

Show JSON schema:
{
  "$defs": {
    "AuditFields": {
      "description": "The audit fields for a resource",
      "properties": {
        "by": {
          "default": null,
          "title": "By",
          "type": "string"
        },
        "byName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Byname"
        },
        "at": {
          "anyOf": [
            {
              "format": "date-time",
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "At"
        }
      },
      "title": "AuditFields",
      "type": "object"
    },
    "InventoryDataColumn": {
      "description": "A data column and value to store as property data on an inventory item.\n\nThe input unit for adding or updating custom property data directly on an\ninventory item via\n[`add_properties_to_inventory`][albert.collections.property_data.PropertyDataCollection.add_properties_to_inventory]\nand\n[`update_property_on_inventory`][albert.collections.property_data.PropertyDataCollection.update_property_on_inventory].\nNot an Inventory Spec: for inventory reference properties use Specs\n(deprecated) or ``client.attributes``.\n\n!!! example\n    ```python\n    from albert.resources.property_data import InventoryDataColumn\n\n    prop = InventoryDataColumn(data_column_id=\"DAC9999999\", value=\"1.2\")\n    ```",
      "properties": {
        "id": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The data column to write to (format ``DAC...``). Serialized as ``id``.",
          "title": "Id"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The value to store. See Also --------",
          "title": "Value"
        }
      },
      "title": "InventoryDataColumn",
      "type": "object"
    },
    "PropertyDataStatus": {
      "description": "Outcome status of a property data write operation.\n\nReported by the API on create/update responses (for example on\n[`InventoryPropertyDataCreate`][albert.resources.property_data.InventoryPropertyDataCreate]) to indicate whether the values were\npersisted.\n\nAttributes\n----------\nSUCCESS : str\n    The property data was written successfully.\nFAILURE : str\n    The property data write failed. Serialized as ``\"Failed\"``.",
      "enum": [
        "Success",
        "Failed"
      ],
      "title": "PropertyDataStatus",
      "type": "string"
    }
  },
  "description": "Request/response body for writing custom property data to an inventory item.\n\nBuilt internally by\n[`add_properties_to_inventory`][albert.collections.property_data.PropertyDataCollection.add_properties_to_inventory]\n(one data column per request) and returned to report the registered value. Most\nusers pass [`InventoryDataColumn`][albert.resources.property_data.InventoryDataColumn] objects to that method rather than\nconstructing this directly.",
  "properties": {
    "status": {
      "anyOf": [
        {
          "$ref": "#/$defs/PropertyDataStatus"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The outcome status reported by the API. See Also --------"
    },
    "Created": {
      "anyOf": [
        {
          "$ref": "#/$defs/AuditFields"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Audit fields for the creation of the resource, optional."
    },
    "Updated": {
      "anyOf": [
        {
          "$ref": "#/$defs/AuditFields"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "Audit fields for the update of the resource, optional."
    },
    "entity": {
      "const": "inventory",
      "default": "inventory",
      "description": "Always [`INVENTORY`][albert.resources.property_data.DataEntity.INVENTORY].",
      "title": "Entity",
      "type": "string"
    },
    "parentId": {
      "description": "The inventory item (format ``INV...``). Serialized as ``parentId``.",
      "title": "Parentid",
      "type": "string"
    },
    "DataColumn": {
      "description": "The property to write. At most one column per request. Serialized as ``DataColumn``.",
      "items": {
        "$ref": "#/$defs/InventoryDataColumn"
      },
      "maxItems": 1,
      "title": "Datacolumn",
      "type": "array"
    }
  },
  "required": [
    "parentId"
  ],
  "title": "InventoryPropertyDataCreate",
  "type": "object"
}

Fields:

entity

Always INVENTORY.

inventory_id

inventory_id: InventoryId

The inventory item (format INV...). Serialized as parentId.

data_columns

data_columns: list[InventoryDataColumn]

The property to write. At most one column per request. Serialized as DataColumn.

status

status: PropertyDataStatus | None = None

The outcome status reported by the API. See Also --------

WorkflowItem

Bases: BaseAlbertModel

One parameter setpoint captured in a property data search result's workflow.

Show JSON schema:
{
  "description": "One parameter setpoint captured in a property data search result's workflow.",
  "properties": {
    "name": {
      "title": "Name",
      "type": "string"
    },
    "id": {
      "title": "Id",
      "type": "string"
    },
    "value": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Value"
    },
    "parameterGroupId": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The parameter group or data template ID (format ``PRG...`` or ``DAT...``).",
      "title": "Parametergroupid"
    },
    "valueNumeric": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Valuenumeric"
    },
    "unitName": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Unitname"
    },
    "unitId": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Unitid"
    }
  },
  "required": [
    "name",
    "id"
  ],
  "title": "WorkflowItem",
  "type": "object"
}

Fields:

name

name: str

id

value

value: str | None = None

parameter_group_id

parameter_group_id: str | None = None

The parameter group or data template ID (format PRG... or DAT...).

value_numeric

value_numeric: float | None = None

unit_name

unit_name: str | None = None

unit_id

unit_id: UnitId | None = None

PropertyDataResult

Bases: BaseAlbertModel

The single measured result carried by a PropertyDataSearchItem.

Show JSON schema:
{
  "description": "The single measured result carried by a [`PropertyDataSearchItem`][albert.resources.property_data.PropertyDataSearchItem].",
  "properties": {
    "valueNumeric": {
      "anyOf": [
        {
          "type": "number"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Valuenumeric"
    },
    "name": {
      "title": "Name",
      "type": "string"
    },
    "id": {
      "title": "Id",
      "type": "string"
    },
    "value": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Value"
    },
    "trial": {
      "default": null,
      "title": "Trial"
    },
    "valueString": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "title": "Valuestring"
    }
  },
  "required": [
    "name",
    "id"
  ],
  "title": "PropertyDataResult",
  "type": "object"
}

Fields:

value_numeric

value_numeric: float | None = None

name

name: str

data_column_id

data_column_id: DataColumnId

value

value: str | None = None

trial

trial: Any = None

value_string

value_string: str | None = None

PropertyDataSearchItem

Bases: BaseAlbertModel

One property data record returned by a property data search.

Yielded by search. Flattens a single measured result together with the workflow setpoints, data template, and the task/inventory/project it belongs to.

Show JSON schema:
{
  "$defs": {
    "PropertyDataResult": {
      "description": "The single measured result carried by a [`PropertyDataSearchItem`][albert.resources.property_data.PropertyDataSearchItem].",
      "properties": {
        "valueNumeric": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Valuenumeric"
        },
        "name": {
          "title": "Name",
          "type": "string"
        },
        "id": {
          "title": "Id",
          "type": "string"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Value"
        },
        "trial": {
          "default": null,
          "title": "Trial"
        },
        "valueString": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Valuestring"
        }
      },
      "required": [
        "name",
        "id"
      ],
      "title": "PropertyDataResult",
      "type": "object"
    },
    "WorkflowItem": {
      "description": "One parameter setpoint captured in a property data search result's workflow.",
      "properties": {
        "name": {
          "title": "Name",
          "type": "string"
        },
        "id": {
          "title": "Id",
          "type": "string"
        },
        "value": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Value"
        },
        "parameterGroupId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "description": "The parameter group or data template ID (format ``PRG...`` or ``DAT...``).",
          "title": "Parametergroupid"
        },
        "valueNumeric": {
          "anyOf": [
            {
              "type": "number"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Valuenumeric"
        },
        "unitName": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Unitname"
        },
        "unitId": {
          "anyOf": [
            {
              "type": "string"
            },
            {
              "type": "null"
            }
          ],
          "default": null,
          "title": "Unitid"
        }
      },
      "required": [
        "name",
        "id"
      ],
      "title": "WorkflowItem",
      "type": "object"
    }
  },
  "description": "One property data record returned by a property data search.\n\nYielded by\n[`search`][albert.collections.property_data.PropertyDataCollection.search]. Flattens\na single measured result together with the workflow setpoints, data template, and\nthe task/inventory/project it belongs to.",
  "properties": {
    "id": {
      "description": "The property data record ID (format ``PTD...``).",
      "title": "Id",
      "type": "string"
    },
    "category": {
      "description": "The data entity category (e.g. task or inventory).",
      "title": "Category",
      "type": "string"
    },
    "workflow": {
      "description": "The parameter setpoints in effect for this result.",
      "items": {
        "$ref": "#/$defs/WorkflowItem"
      },
      "title": "Workflow",
      "type": "array"
    },
    "result": {
      "$ref": "#/$defs/PropertyDataResult",
      "description": "The measured result value."
    },
    "dataTemplateId": {
      "description": "The data template (format ``DAT...``). Serialized as ``dataTemplateId``.",
      "title": "Datatemplateid",
      "type": "string"
    },
    "workflowName": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The workflow name. Serialized as ``workflowName``.",
      "title": "Workflowname"
    },
    "parentId": {
      "description": "The entity the data was recorded on. Serialized as ``parentId``.",
      "title": "Parentid",
      "type": "string"
    },
    "dataTemplateName": {
      "description": "The data template name. Serialized as ``dataTemplateName``.",
      "title": "Datatemplatename",
      "type": "string"
    },
    "createdBy": {
      "description": "The user who created the record. Serialized as ``createdBy``.",
      "title": "Createdby",
      "type": "string"
    },
    "inventoryId": {
      "description": "The inventory item the result applies to (format ``INV...``). Serialized as ``inventoryId``.",
      "title": "Inventoryid",
      "type": "string"
    },
    "projectId": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The project the data belongs to (format ``PRO...``). Serialized as ``projectId``. ``None`` for records with no project association (tenant-global data).",
      "title": "Projectid"
    },
    "workflowId": {
      "description": "The workflow (format ``WFL...``). Serialized as ``workflowId``.",
      "title": "Workflowid",
      "type": "string"
    },
    "taskId": {
      "anyOf": [
        {
          "type": "string"
        },
        {
          "type": "null"
        }
      ],
      "default": null,
      "description": "The task the result was measured on, if any (format ``TAS...``). Serialized as ``taskId``. See Also --------",
      "title": "Taskid"
    }
  },
  "required": [
    "id",
    "category",
    "workflow",
    "result",
    "dataTemplateId",
    "parentId",
    "dataTemplateName",
    "createdBy",
    "inventoryId",
    "workflowId"
  ],
  "title": "PropertyDataSearchItem",
  "type": "object"
}

Fields:

id

The property data record ID (format PTD...).

category

category: str

The data entity category (e.g. task or inventory).

workflow

workflow: list[WorkflowItem]

The parameter setpoints in effect for this result.

result

The measured result value.

data_template_id

data_template_id: DataTemplateId

The data template (format DAT...). Serialized as dataTemplateId.

workflow_name

workflow_name: str | None = None

The workflow name. Serialized as workflowName.

parent_id

parent_id: TaskId | InventoryId

The entity the data was recorded on. Serialized as parentId.

data_template_name

data_template_name: str

The data template name. Serialized as dataTemplateName.

created_by

created_by: str

The user who created the record. Serialized as createdBy.

inventory_id

inventory_id: InventoryId

The inventory item the result applies to (format INV...). Serialized as inventoryId.

project_id

project_id: ProjectId | None = None

The project the data belongs to (format PRO...). Serialized as projectId. None for records with no project association (tenant-global data).

workflow_id

workflow_id: WorkflowId

The workflow (format WFL...). Serialized as workflowId.

task_id

task_id: TaskId | None = None

The task the result was measured on, if any (format TAS...). Serialized as taskId. See Also --------