Acciones
#Partes de trabajo
La API pública permite listar, consultar, crear, actualizar, validar, rechazar y eliminar partes de trabajo. No incluye exportaciones ni operaciones masivas.
#Scopes
daily-reports:readpermite consultar partes, empleados, tipos de hora, compras, descompuestos estimados, campos personalizados y medios.daily-reports:writepermite crear, actualizar, cambiar el estado, eliminar y subir medios.daily-reports:costs:readañadecostPerHourytotalCosta las respuestas. Sin este scope, las propiedades no aparecen.
all:read incluye la lectura de costes. all:write incluye las mutaciones.
#Operaciones y filtros
GET /api/public/v1/daily-reports
GET /api/public/v1/daily-reports/{id}
POST /api/public/v1/daily-reports
PUT /api/public/v1/daily-reports/{id}
PUT /api/public/v1/daily-reports/{id}/state
DELETE /api/public/v1/daily-reports/{id}
El listado admite from, to, projectId, clientId, employeeId, purchaseId, workType, state, numberingLineId, number, operatingCost, hourTypeIds y modifiedSince, además de los parámetros comunes de paginación. Si informas number, el filtro numberingLineId no se aplica.
Para crear o actualizar se envían employeeId, date, projectId, timeInHours, hourTypeId, workType y los demás campos del parte. El alta devuelve 201; la actualización devuelve la ficha resultante y el borrado responde 204.
#Empleados y tipos de hora
Usa GET /api/public/v1/daily-reports/employees para obtener los empleados del tenant. El identificador público es employeeId, un GUID distinto del identificador numérico interno. El listado devuelve empleados activos por defecto y admite el filtro active.
Consulta GET /api/public/v1/daily-reports/hour-types y envía el campo id elegido como hourTypeId. La respuesta también incluye systemId como dato informativo: 1 Normal, 2 Extra, 3 Nocturno, 4 Sábado y 5 Festivo.
Para aceptar un parte debe existir una asignación activa entre el empleado, el tipo de hora y la fecha indicados. Si no existe, la API devuelve Errors:PublicApi:DailyReportHourTypeConfigurationInvalid.
#Numeración
La numeración aplica esta prioridad:
numberinformado manualmente.numberingLineIdde una serie activa conscope=daily-report.- Serie predeterminada de partes.
Consultar GET /api/public/v1/numbering-lines?scope=daily-report no reserva números. La reserva se hace al guardar el parte.
#Estados
Los valores admitidos son pending, validated y rejected. Un alta siempre empieza en pending.
PUT /api/public/v1/daily-reports/{id}/state responde 204. Si el parte ya tiene el estado solicitado, no añade otra entrada al historial.
#Campos personalizados y medios
GET /api/public/v1/daily-reports/custom-fields devuelve las definiciones de solo lectura. Los valores se envían en customFields al crear o actualizar el parte.
Las imágenes y firmas se suben antes mediante POST /api/public/v1/daily-report-media como multipart/form-data. Se admiten JPEG, PNG y WebP hasta 50 MB. La respuesta devuelve el id que se envía como documentId en el valor personalizado. La descarga usa GET /api/public/v1/daily-report-media/{id} y comprueba el tenant.
#Catálogos vinculados
GET /api/public/v1/daily-reports/purchases?projectId={projectId}devuelve compras seleccionables.GET /api/public/v1/daily-reports/purchases/{purchaseId}/estimated-batchesdevuelve descompuestos estimados.
Los estados y tipos de trabajo no tienen catálogo. Los tipos de trabajo se envían como byMeasurement o byAdministration.
#Errores propios
El campo code del error permite distinguir estos casos sin depender del texto del mensaje:
Errors:PublicApi:DailyReportEmployeeNotFound: el empleado no existe, no está activo o no puede usarse en ese proyecto con la configuración actual.Errors:PublicApi:DailyReportHourTypeConfigurationInvalid: no existe una asignación activa para elhourTypeId, el empleado y la fecha indicados.ProjectNotFound,Errors:PublicApi:DailyReportPurchaseNotFound,Errors:PublicApi:DailyReportEstimatedBatchNotFoundyNumberingLineNotFound: una relación indicada no existe dentro del tenant.Errors:PublicApi:DailyReportProjectClosed: el proyecto está cerrado.Errors:PublicApi:DailyReportNumberAlreadyExists: el número manual ya está en uso.Errors:PublicApi:DailyReportInvalidStateyErrors:PublicApi:DailyReportInvalidWorkType: el enumerado no es válido.Errors:PublicApi:DailyReportCustomFieldInvalidyErrors:PublicApi:DailyReportMediaInvalid: el campo, el documento, el formato o el tamaño no son válidos.Errors:PublicApi:DailyReportNotFound: el parte no existe dentro del tenant.
