Ubicaciones
Las ubicaciones son de lectura principalmente a través de la API:- El endpoint de listado limita
limita 10 (la mayoría de los listados permiten 25). Planifica los bucles de paginación en consecuencia. multiple/{ids}toma ids separados por coma y omite silenciosamente cualquier id sobre el que no tengas permiso de lectura; verifica qué ids llegaron en lugar de asumir que llegaron todos.- La única escritura es
PATCH /v1/buyer/location/locations/{id}, y lee sololocationTypeDetailsdel cuerpo (valores de campos personalizados del tipo de ubicación). Todos los demás campos se ignoran.
GET /v1/buyer/location/regions y GET /v1/buyer/location/regions/{id}.
Tipos de activos
Los tipos de activos clasifican el equipamiento (“Walk-in cooler”, “Rooftop unit”) y llevan valores por defecto a nivel de clase, incluidas las configuraciones de refrigerante.namees el único campo obligatorio.buyerCompanyIdse deriva de tu clave y no se puede establecer.applianceCategory,refrigerantTypeCodeyfullChargeLbaceptan unnullexplícito para borrar el valor por defecto a nivel de clase.fullChargeLbdebe ser positivo cuando se suministra.- Pasar un
idhace upsert sobre un tipo existente.
GET /v1/buyer/asset/asset_types y GET /v1/buyer/asset/asset_types/{id}.
Activos
Crea un activo conPOST /v1/buyer/asset/assets. Obligatorios: name, assetTypeId, locationId, isActive, isLeased.
buyerFacilityIdybuyerCompanyIdse derivan de la ubicación, nunca se leen del cuerpo.- Los overrides de refrigerante se pueden borrar.
refrigerantTypeCode,fullChargeLb,applianceCategoryyrefrigerantRequiresProcessShutdownson overrides por unidad de los valores por defecto del tipo de activo. Omitir la clave mantiene el valor almacenado; unnullexplícito (o cadena vacía) lo borra y vuelve a heredar del tipo.isRefrigerantTrackedse comporta de forma similar: omitido onullmantiene el valor almacenado, y la inscripción solo se desactiva con unfalseexplícito. - Subactivos.
parentIdconvierte esto en un subactivo. Requiere que los subactivos estén habilitados para tu empresa, y el hijo debe estar en la misma ubicación que el padre. - Pasar un
idhace upsert sobre un activo existente.
asset_lite es la forma económica de sincronizar un selector de activos: cuando no pasas parámetros de paginación devuelve el conjunto completo sin paginar, con count igual al número de elementos devueltos. La lectura de un solo activo hidrata los medidores (el type de la envoltura es ApiAssetWithMeter).
Etiquetas de activos
Las etiquetas de activos son marcadores ligeros que tu equipo define en la app de OpenWrench (un nombre más un color opcional), útiles para segmentar el listado de activos de formas que los campos integrados no cubren. A través de la API puedes leer el catálogo y reemplazar las etiquetas aplicadas a un activo. La creación y edición de las etiquetas en sí permanece en la app. Explora el catálogo conGET /v1/buyer/asset/asset_labels, u obtén una con GET /v1/buyer/asset/asset_labels/{id}. El listado está limitado a las etiquetas de tu empresa y paginado a 10 por página por defecto. Acepta filtros search y label sobre el texto de la etiqueta. Pasa no_pagination=true para traer el catálogo completo en una sola llamada (el ordenamiento sigue aplicando).
PUT /v1/buyer/asset/assets/{assetId}/labels. El cuerpo es { "ids": [...] } y es un reemplazo completo: las etiquetas no listadas se eliminan, y un array vacío las borra todas. La respuesta lista las etiquetas ahora activas en el activo.
- Un
idsausente o que no sea un array, o un id que no sea un número entero, se rechaza con400. - Cada id debe ser una etiqueta viva del catálogo de tu empresa. Los ids desconocidos o de otro inquilino responden
400con los ids problemáticos listados. - La escritura requiere permiso de escritura de activos. Un id de activo desconocido, eliminado o ajeno responde el mismo
400que una escritura denegada, no un404.
Modelos de activos
Los modelos estandarizan especificaciones y manuales por tipo.POST /v1/buyer/asset/asset_models requiere modelName y assetTypeId, con manuals y specs opcionales como adjuntos.
El comparador difuso es útil durante importaciones, cuando tus datos de origen tienen nombres de modelo en texto libre:
GET /v1/buyer/asset/asset_models/fuzzy/{name}/{assetTypeId} devuelve el modelo más cercano dentro del tipo de activo, o 404 cuando nada es suficientemente parecido. Ante un 404, cae al plan B de crear el modelo.
Medidores y lecturas
Los medidores adjuntan una serie medible a un activo (temperatura, horas de funcionamiento, conteo de ciclos). Crea el medidor una vez y luego registra lecturas contra él:valueType,valueUnitylocationIdno se leen del cuerpo al crear el medidor: se derivan en el servidor a partir del activo y el tipo de medidor referenciados, así que enviarlos no tiene efecto.readingMode(renombrado desdeseriesType) es uno dedirect_reading,change_from_baselineocompare_to_target; por defecto esdirect_readingcuando se omite.- Los endpoints de listado y conteo de lecturas no están limitados a un solo medidor: abarcan todas las lecturas de tu empresa compradora a menos que filtres por
meterId. - Cuando el
readingModede un medidor eschange_from_baseline, ellastBaselineValuede una lectura obtenida se calcula a partir de la lectura anterior más reciente marcada comoisBaselineen ese medidor, segúnrecordedAt; para los demás modos esnull.
Estrategia de sincronización
Para una sincronización nocturna de activos: paginaasset_lite por el conjunto de ids, compara contra tu sistema y luego obtén los registros completos por id solo para los activos modificados. Eso te mantiene dentro del límite de tasa (10 solicitudes por ventana de 20 segundos) con mucho más margen que paginar el listado completo a 25 por llamada.