fmea-api-mcp-server 1.1.66 → 1.1.67

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"PUT:/api/v2/template/action-status":{"path":"/api/v2/template/action-status","method":"PUT","operationId":"saveSnapshot_4","summary":"Save action status snapshot","description":"Saves the full snapshot for action statuses and returns the latest full list. This is the main JSON save path and omitted items are deleted.","tags":["Template"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"required":["items"],"type":"object","properties":{"items":{"type":"array","items":{"required":["title"],"type":"object","properties":{"id":{"type":"string"},"title":{"maxLength":30,"minLength":0,"type":"string"}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"DELETE:/api/v2/additional-info/attributes/{attrId}":{"path":"/api/v2/additional-info/attributes/{attrId}","method":"DELETE","operationId":"deleteAttribute","summary":"Delete additional info attribute","description":"Deletes the specified additional information attribute and all associated items and data.","tags":["Additional Info Template"],"parameters":[{"name":"attrId","in":"path","description":"Additional info attribute ID to delete","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"DELETE:/api/v2/additional-info/attributes/{attrId}/items/{itemId}":{"path":"/api/v2/additional-info/attributes/{attrId}/items/{itemId}","method":"DELETE","operationId":"deleteItem","summary":"Delete additional info item","description":"Deletes the specified item from the additional information attribute.","tags":["Additional Info Template"],"parameters":[{"name":"attrId","in":"path","description":"Additional info attribute ID owning the item","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"itemId","in":"path","description":"Additional info item ID to delete","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"DELETE:/api/v2/additional-info/fields/{fieldId}":{"path":"/api/v2/additional-info/fields/{fieldId}","method":"DELETE","operationId":"deleteField","summary":"Delete additional info field","description":"Deletes the specified additional information field and all associated data.","tags":["Additional Info Template"],"parameters":[{"name":"fieldId","in":"path","description":"Additional info field ID to delete","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/additional-info/attributes":{"path":"/api/v2/additional-info/attributes","method":"GET","operationId":"getAttributesByFmeaType","summary":"List attributes by FMEA type","description":"Returns all additional information attributes (with items) for the given FMEA type. Supports optional keyword search on attribute label or item label.","tags":["Additional Info Template"],"parameters":[{"name":"fmeaType","in":"query","description":"FMEA project type","schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"q","in":"query","description":"Keyword filter applied to attribute label or item label (max 100 chars)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"GET:/api/v2/additional-info/attributes/{attrId}":{"path":"/api/v2/additional-info/attributes/{attrId}","method":"GET","operationId":"getAttributeById","summary":"Get attribute by ID","description":"Returns a single additional information attribute including its items.","tags":["Additional Info Template"],"parameters":[{"name":"attrId","in":"path","description":"Additional info attribute ID to retrieve","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"fmeaType":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"label":{"type":"string"},"typeId":{"type":"integer"},"type":{"type":"string","enum":["TEXT","DATE","SELECT","LIST"]},"typeAlias":{"type":"string"},"displayOrder":{"type":"integer"},"options":{"type":"object"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"label":{"type":"string"},"itemType":{"type":"string"},"displayOrder":{"type":"integer"},"options":{"type":"object"}}}}}}}}}}},"GET:/api/v2/additional-info/fields":{"path":"/api/v2/additional-info/fields","method":"GET","operationId":"getFieldsByFmeaType","summary":"List fields by FMEA type","description":"Returns all additional information fields for the given FMEA type. Supports optional keyword search on field label.","tags":["Additional Info Template"],"parameters":[{"name":"fmeaType","in":"query","description":"FMEA project type","schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"q","in":"query","description":"Keyword filter applied to field label (max 100 chars)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"GET:/api/v2/additional-info/form":{"path":"/api/v2/additional-info/form","method":"GET","operationId":"getForm","summary":"Get form with project data","description":"Returns form structure with template fields and project-specific values overlaid.","tags":["Additional Info Template"],"parameters":[{"name":"fmeaType","in":"query","description":"FMEA project type","schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"projectId","in":"query","description":"Project ID to overlay project-specific values","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"fmeaType":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"label":{"type":"string"},"typeId":{"type":"integer"},"type":{"type":"string","enum":["TEXT","DATE","SELECT","LIST"]},"typeAlias":{"type":"string"},"displayOrder":{"type":"integer"},"attributeId":{"type":"integer"},"attributeLabel":{"type":"string"},"options":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"integer"},"name":{"type":"string"},"value":{"type":"string"},"attributeId":{"type":"integer"},"itemId":{"type":"integer"}}}}}}}}}}}},"GET:/api/v2/additional-info/projects/{projectId}":{"path":"/api/v2/additional-info/projects/{projectId}","method":"GET","operationId":"getProjectData","summary":"Get project additional info","description":"Returns all additional information data for the specified project.","tags":["Additional Info Template"],"parameters":[{"name":"projectId","in":"path","description":"Project ID to retrieve additional info for","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"projectId":{"type":"string"},"fieldId":{"type":"integer"},"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"displayOrder":{"type":"integer"},"columns":{"type":"array","items":{"type":"object","properties":{"attributeId":{"type":"integer"},"itemId":{"type":"integer"},"value":{"type":"string"}}}}}}}}}}}}}}},"GET:/api/v2/additional-info/types":{"path":"/api/v2/additional-info/types","method":"GET","operationId":"getTypes","summary":"List additional info types","description":"Returns all available additional information type modes.","tags":["Additional Info Template"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string","enum":["TEXT","DATE","SELECT","LIST","LIST_PMS"]}}}}}}},"POST:/api/v2/additional-info/attributes":{"path":"/api/v2/additional-info/attributes","method":"POST","operationId":"createAttribute","summary":"Create additional info attribute","description":"Creates a new additional information attribute for the specified FMEA type.","tags":["Additional Info Template"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fmeaType":{"type":"string"},"label":{"type":"string"},"typeId":{"type":"integer","format":"int32"},"options":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"fmeaType":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"label":{"type":"string"},"typeId":{"type":"integer"},"type":{"type":"string","enum":["TEXT","DATE","SELECT","LIST"]},"typeAlias":{"type":"string"},"displayOrder":{"type":"integer"},"options":{"type":"object"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"label":{"type":"string"},"itemType":{"type":"string"},"displayOrder":{"type":"integer"},"options":{"type":"object"}}}}}}}}}}},"POST:/api/v2/additional-info/attributes/{attrId}/items":{"path":"/api/v2/additional-info/attributes/{attrId}/items","method":"POST","operationId":"createItem","summary":"Create additional info item","description":"Creates a new item under the specified additional information attribute.","tags":["Additional Info Template"],"parameters":[{"name":"attrId","in":"path","description":"Additional info attribute ID to add item to","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string"},"itemType":{"type":"string"},"options":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"label":{"type":"string"},"itemType":{"type":"string"},"displayOrder":{"type":"integer"},"options":{"type":"object"}}}}}}}},"POST:/api/v2/additional-info/fields":{"path":"/api/v2/additional-info/fields","method":"POST","operationId":"createField","summary":"Create additional info field","description":"Creates a new additional information field for the specified FMEA type.","tags":["Additional Info Template"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fmeaType":{"type":"string"},"label":{"type":"string"},"typeId":{"type":"integer","format":"int32"},"attributeId":{"type":"integer","format":"int32"},"options":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"integer","format":"int32"},"name":{"type":"string"},"value":{"type":"string"},"attributeId":{"type":"integer","format":"int32"},"itemId":{"type":"integer","format":"int32"}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"fmeaType":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"label":{"type":"string"},"typeId":{"type":"integer"},"type":{"type":"string","enum":["TEXT","DATE","SELECT","LIST"]},"typeAlias":{"type":"string"},"displayOrder":{"type":"integer"},"attributeId":{"type":"integer"},"attributeLabel":{"type":"string"},"options":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"integer"},"name":{"type":"string"},"value":{"type":"string"},"attributeId":{"type":"integer"},"itemId":{"type":"integer"}}}}}}}}}}},"PUT:/api/v2/additional-info/attributes/{attrId}":{"path":"/api/v2/additional-info/attributes/{attrId}","method":"PUT","operationId":"updateAttribute","summary":"Update additional info attribute","description":"Updates the label, type, and options of the specified additional information attribute.","tags":["Additional Info Template"],"parameters":[{"name":"attrId","in":"path","description":"Additional info attribute ID to update","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string"},"typeId":{"type":"integer","format":"int32"},"options":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"PUT:/api/v2/additional-info/attributes/{attrId}/items/{itemId}":{"path":"/api/v2/additional-info/attributes/{attrId}/items/{itemId}","method":"PUT","operationId":"updateItem","summary":"Update additional info item","description":"Updates the label and type of the specified additional information item.","tags":["Additional Info Template"],"parameters":[{"name":"attrId","in":"path","description":"Additional info attribute ID owning the item","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"itemId","in":"path","description":"Additional info item ID to update","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string"},"itemType":{"type":"string"},"options":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"PUT:/api/v2/additional-info/fields/order":{"path":"/api/v2/additional-info/fields/order","method":"PUT","operationId":"reorderFields","summary":"Reorder additional info fields","description":"Reorders the additional information fields for the given FMEA type.","tags":["Additional Info Template"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fmeaType":{"type":"string"},"fieldIds":{"type":"array","items":{"type":"integer","format":"int32"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"PUT:/api/v2/additional-info/fields/{fieldId}":{"path":"/api/v2/additional-info/fields/{fieldId}","method":"PUT","operationId":"updateField","summary":"Update additional info field","description":"Updates the label, type, and options of the specified additional information field.","tags":["Additional Info Template"],"parameters":[{"name":"fieldId","in":"path","description":"Additional info field ID to update","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string"},"typeId":{"type":"integer","format":"int32"},"attributeId":{"type":"integer","format":"int32"},"options":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"integer","format":"int32"},"name":{"type":"string"},"value":{"type":"string"},"attributeId":{"type":"integer","format":"int32"},"itemId":{"type":"integer","format":"int32"}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"PUT:/api/v2/additional-info/projects/{projectId}":{"path":"/api/v2/additional-info/projects/{projectId}","method":"PUT","operationId":"saveProjectData","summary":"Save project additional info","description":"Saves all additional information data for the specified project (full replace).","tags":["Additional Info Template"],"parameters":[{"name":"projectId","in":"path","description":"Project ID to save additional info for","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"projectId":{"type":"string"},"fieldId":{"type":"integer","format":"int32"},"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"displayOrder":{"type":"integer","format":"int32"},"columns":{"type":"array","items":{"type":"object","properties":{"attributeId":{"type":"integer","format":"int32"},"itemId":{"type":"integer","format":"int32"},"value":{"type":"string"}}}}}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/additional-info-excel/export":{"path":"/api/v2/additional-info-excel/export","method":"GET","operationId":"export","summary":"Export additional info fields to Excel","description":"Exports additional information fields to an XLSX file and returns a download URI. Supports optional FMEA type filter and keyword search on field label. Requires admin permission.","tags":["AdditionalInfoExcel"],"parameters":[{"name":"fmeaType","in":"query","description":"FMEA type filter (e.g. stress|design|process). Required.","schema":{"type":"string"}},{"name":"q","in":"query","description":"Keyword filter for exported rows (max 100 chars)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"GET:/api/v2/admin/api-key-excel/export":{"path":"/api/v2/admin/api-key-excel/export","method":"GET","operationId":"export_1","summary":"Export all API keys to Excel","description":"Exports all API keys to an XLSX file and returns a download URI. Supports filtering by user ID, active status, expiry state, and keyword search. Only accessible via session (JWT) authentication; API key auth is rejected. Requires admin permission.","tags":["Admin - API Key Excel"],"parameters":[{"name":"userid","in":"query","description":"Filter by user ID (optional, exact match)","schema":{"type":"string"}},{"name":"isActive","in":"query","description":"Filter by active status: true=active only, false=inactive only","schema":{"type":"boolean"}},{"name":"expiredOnly","in":"query","description":"If true, return only expired keys","schema":{"type":"boolean"}},{"name":"q","in":"query","description":"Keyword search on key name or key prefix (max 100 characters)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"downloadUri":{"type":"string"}}}}}}}},"DELETE:/api/v2/admin/api-keys/{id}":{"path":"/api/v2/admin/api-keys/{id}","method":"DELETE","operationId":"deactivate","summary":"Force-deactivate an API key by ID","description":"Immediately deactivates the specified API key regardless of its owner. Only accessible via session (JWT) authentication; API key auth is rejected. Returns 204 No Content on success.","tags":["Admin - API Keys"],"parameters":[{"name":"id","in":"path","description":"API key ID to deactivate","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"DELETE:/api/v2/admin/api-keys/user/{userid}":{"path":"/api/v2/admin/api-keys/user/{userid}","method":"DELETE","operationId":"deactivateByUserId","summary":"Deactivate all API keys for a specific user","description":"Bulk-deactivates all active API keys belonging to the specified user. Only accessible via session (JWT) authentication; API key auth is rejected. Returns the count of deactivated keys in the response body.","tags":["Admin - API Keys"],"parameters":[{"name":"userid","in":"path","description":"User ID whose API keys will be deactivated","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/admin/api-keys/stats":{"path":"/api/v2/admin/api-keys/stats","method":"GET","operationId":"getStats","summary":"Get API key statistics","description":"Returns aggregate statistics for all API keys in the system, including total count, active/inactive counts, and expiry distribution. Only accessible via session (JWT) authentication; API key auth is rejected.","tags":["Admin - API Keys"],"parameters":[],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"totalKeys":{"type":"integer"},"activeKeys":{"type":"integer"},"expiredKeys":{"type":"integer"},"deactivatedKeys":{"type":"integer"},"userStats":{"type":"array","items":{"type":"object","properties":{"userid":{"type":"string"},"totalKeys":{"type":"integer"},"activeKeys":{"type":"integer"}}}},"levelStats":{"type":"object"}}}}}}}},"GET:/api/v2/admin/api-keys":{"path":"/api/v2/admin/api-keys","method":"GET","operationId":"list_3","summary":"List all API keys across all users","description":"Returns a paged list of API keys for all users. Supports filtering by user ID, active status, and expiry state. Only accessible via session (JWT) authentication; API key auth is rejected. Page size is capped at 100.","tags":["Admin - API Keys"],"parameters":[{"name":"userid","in":"query","description":"Filter by user ID (optional, exact match)","schema":{"type":"string"}},{"name":"isActive","in":"query","description":"Filter by active status: true=active only, false=inactive only","schema":{"type":"boolean"}},{"name":"expiredOnly","in":"query","description":"If true, return only expired keys","schema":{"type":"boolean"}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 20, max: 100)","schema":{"type":"integer","default":20,"format":"int32"}},{"name":"q","in":"query","description":"Keyword search on key name or key prefix (max 100 characters)","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"userId":{"type":"string"},"apiKey":{"type":"string"},"keyPrefix":{"type":"string"},"keyName":{"type":"string"},"userLevel":{"type":"string","enum":["ADMIN","NORMAL","READER"]},"createdAt":{"type":"string","format":"date-time"},"expiryDate":{"type":"string","format":"date-time"},"lastUsedAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"}}}}}}}},"GET:/api/v2/admin/apikeys/logs":{"path":"/api/v2/admin/apikeys/logs","method":"GET","operationId":"getAuditLogs","summary":"Query API key audit logs","description":"Returns a paged list of API key admin actions (create, deactivate, etc.). Supports filtering by admin user ID, target user ID, action type, and date range. Dates must be in ISO-8601 format (YYYY-MM-DD). Only accessible via session (JWT) authentication; API key auth is rejected. Page size is capped at 100.","tags":["Admin - API Key Audit Logs"],"parameters":[{"name":"adminUserid","in":"query","description":"Filter by the admin who performed the action (optional, exact match)","schema":{"type":"string"}},{"name":"targetUserid","in":"query","description":"Filter by the user whose key was affected (optional, exact match)","schema":{"type":"string"}},{"name":"action","in":"query","description":"Filter by action type","schema":{"type":"string","enum":["ADD","DELETE","UPDATE"]}},{"name":"startDate","in":"query","description":"Start date for the log query range (ISO-8601, YYYY-MM-DD, inclusive)","schema":{"type":"string"}},{"name":"endDate","in":"query","description":"End date for the log query range (ISO-8601, YYYY-MM-DD, inclusive)","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 20, max: 100)","schema":{"type":"integer","default":20,"format":"int32"}},{"name":"q","in":"query","description":"Keyword search on reason field (max 100 characters)","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"adminUserid":{"type":"string"},"action":{"type":"string"},"targetApiKeyId":{"type":"integer","format":"int64"},"targetUserid":{"type":"string"},"reason":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"}}}}}}}},"GET:/api/v2/api-keys":{"path":"/api/v2/api-keys","method":"GET","operationId":"list_4","summary":"List all API keys for the authenticated user","description":"Returns all API keys belonging to the currently authenticated user, including active and inactive keys. Key values are masked in the response.","tags":["API Keys"],"parameters":[],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"userId":{"type":"string"},"apiKey":{"type":"string"},"keyPrefix":{"type":"string"},"keyName":{"type":"string"},"userLevel":{"type":"string","enum":["ADMIN","NORMAL","READER"]},"createdAt":{"type":"string","format":"date-time"},"expiryDate":{"type":"string","format":"date-time"},"lastUsedAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"}}}},"total":{"type":"integer"}}}}}}}},"POST:/api/v2/api-keys":{"path":"/api/v2/api-keys","method":"POST","operationId":"create_1","summary":"Issue a new API key for the authenticated user","description":"Creates and returns a new API key for the currently authenticated user. The key is returned in full only at creation time; subsequent list calls return only the masked key. Returns 201 Created on success.","tags":["API Keys"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"keyName":{"type":"string"},"expiryDays":{"type":"integer","format":"int32"},"userLevel":{"type":"string","enum":["ADMIN","NORMAL","READER"]}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"userId":{"type":"string"},"apiKey":{"type":"string"},"keyPrefix":{"type":"string"},"keyName":{"type":"string"},"userLevel":{"type":"string","enum":["ADMIN","NORMAL","READER"]},"createdAt":{"type":"string","format":"date-time"},"expiryDate":{"type":"string","format":"date-time"},"lastUsedAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"}}}}}}}},"DELETE:/api/v2/api-keys/{id}":{"path":"/api/v2/api-keys/{id}","method":"DELETE","operationId":"delete_1","summary":"Delete an API key owned by the authenticated user","description":"Permanently deletes the specified API key. The key must belong to the currently authenticated user. Returns 204 No Content on success.","tags":["API Keys"],"parameters":[{"name":"id","in":"path","description":"API key ID to delete","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"GET:/api/v2/api-keys/{id}/logs":{"path":"/api/v2/api-keys/{id}/logs","method":"GET","operationId":"getLogs","summary":"Get usage logs for an API key","description":"Returns paged usage logs for the specified API key owned by the authenticated user. Supports filtering by date range, endpoint path, and HTTP status code. Dates must be in ISO-8601 format (YYYY-MM-DD). Page size is capped at 100.","tags":["API Keys"],"parameters":[{"name":"id","in":"path","description":"API key ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"startDate","in":"query","description":"Start date for the log range (ISO-8601, YYYY-MM-DD, inclusive)","schema":{"type":"string"}},{"name":"endDate","in":"query","description":"End date for the log range (ISO-8601, YYYY-MM-DD, inclusive)","schema":{"type":"string"}},{"name":"endpoint","in":"query","description":"Filter by called endpoint path (optional, partial match)","schema":{"type":"string"}},{"name":"statusCode","in":"query","description":"Filter by HTTP status code (optional, e.g., 200, 401, 500)","schema":{"type":"integer","format":"int32"}},{"name":"page","in":"query","description":"Page number (default: 0)","schema":{"type":"integer","default":0,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 20, max: 100)","schema":{"type":"integer","default":20,"format":"int32"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/api-keys/{id}/logs/summary":{"path":"/api/v2/api-keys/{id}/logs/summary","method":"GET","operationId":"getLogsSummary","summary":"Get usage log summary for an API key","description":"Returns aggregated usage statistics for the specified API key owned by the authenticated user. Supports filtering by date range (ISO-8601 YYYY-MM-DD). Includes total request counts grouped by status code and endpoint.","tags":["API Keys"],"parameters":[{"name":"id","in":"path","description":"API key ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"startDate","in":"query","description":"Start date for the summary range (ISO-8601, YYYY-MM-DD, inclusive)","schema":{"type":"string"}},{"name":"endDate","in":"query","description":"End date for the summary range (ISO-8601, YYYY-MM-DD, inclusive)","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"totalRequests":{"type":"integer","format":"int64"},"successCount":{"type":"integer","format":"int64"},"errorCount":{"type":"integer","format":"int64"},"avgResponseTimeMs":{"type":"integer"},"topEndpoints":{"type":"array","items":{"type":"object","properties":{"endpoint":{"type":"string"},"count":{"type":"integer","format":"int64"}}}},"dailyStats":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"count":{"type":"integer","format":"int64"}}}}}}}}}}},"POST:/api/v2/api-keys/{id}/regenerate":{"path":"/api/v2/api-keys/{id}/regenerate","method":"POST","operationId":"regenerate","summary":"Regenerate an API key","description":"Replaces the secret value of an existing API key with a newly generated one. An optional new expiry date may be specified in the request body. The new key value is returned in full only in this response.","tags":["API Keys"],"parameters":[{"name":"id","in":"path","description":"API key ID to regenerate","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"expiryDate":{"type":"string","format":"date"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"userId":{"type":"string"},"apiKey":{"type":"string"},"keyPrefix":{"type":"string"},"keyName":{"type":"string"},"userLevel":{"type":"string","enum":["ADMIN","NORMAL","READER"]},"createdAt":{"type":"string","format":"date-time"},"expiryDate":{"type":"string","format":"date-time"},"lastUsedAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"}}}}}}}},"GET:/api/v2/admin/apikey-log-excel/export":{"path":"/api/v2/admin/apikey-log-excel/export","method":"GET","operationId":"export_2","summary":"Export API key audit logs to Excel","description":"Exports API key admin audit logs to an XLSX file and returns a download URI. Supports filtering by admin user ID, target user ID, action type, date range, and keyword search. Only accessible via session (JWT) authentication; API key auth is rejected. Requires admin permission.","tags":["Admin - API Key Log Excel"],"parameters":[{"name":"adminUserid","in":"query","description":"Filter by the admin who performed the action (optional, exact match)","schema":{"type":"string"}},{"name":"targetUserid","in":"query","description":"Filter by the user whose key was affected (optional, exact match)","schema":{"type":"string"}},{"name":"action","in":"query","description":"Filter by action type (e.g. CREATE, DEACTIVATE, BULK_DEACTIVATE)","schema":{"type":"string"}},{"name":"startDate","in":"query","description":"Start date for the log query range (YYYYMMDD, inclusive)","schema":{"type":"string"}},{"name":"endDate","in":"query","description":"End date for the log query range (YYYYMMDD, inclusive)","schema":{"type":"string"}},{"name":"q","in":"query","description":"Keyword search on admin user ID or target user ID (max 100 characters)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"downloadUri":{"type":"string"}}}}}}}},"GET:/api/v2/approvals/board":{"path":"/api/v2/approvals/board","method":"GET","operationId":"getBoard","summary":"Get approval board","description":"Returns approval progress and board items for a project. Includes progress status, step participants, and opinion list. Optional step filter narrows opinions by type (e.g., REVIEW_OPINION, APPROVAL_OPINION).","tags":["Approval"],"parameters":[{"name":"projectId","in":"query","description":"Project ID (required)","schema":{"type":"string"}},{"name":"step","in":"query","description":"Step filter (optional): REVIEW_OPINION|APPROVAL_OPINION|APPROVAL_DECISION|REVIEW_REFUSAL|SCORE_PASS|SCORE_FAIL|SCORE_REFUSAL","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"progress":{"type":"object","properties":{"isModifyRequest":{"type":"boolean"},"useScore":{"type":"boolean"},"doApproval":{"type":"boolean"},"approvalRound":{"type":"integer"},"refusedStep":{"type":"string"},"steps":{"type":"array","items":{"type":"object","properties":{"step":{"type":"string","enum":["WRITE","REVIEW","APPROVE","SCORE"]},"status":{"type":"string","enum":["PENDING","ACTIVE","COMPLETED","REFUSED"]},"participants":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"},"name":{"type":"string"},"isAuthorizer":{"type":"boolean"},"boardStatus":{"type":"string","enum":["REVIEW","ASK_MODIFY","REVIEWED","APPROVE","ASK_MODIFY_REVIEWED","APPROVED","SCORE","ASK_MODIFY_APPROVED","REFUSED","SCORE_PASS","SCORE_FAIL","COMPLETED","CONFIRM_VALIDITY","DATE_EXPIRED"]},"isAdditionalReviewer":{"type":"boolean"},"isModifyReviewer":{"type":"boolean"}}}}}}}}},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"stepLabel":{"type":"string"},"stepItem":{"type":"string"},"title":{"type":"string"},"content":{"type":"string"},"userId":{"type":"string"},"writerName":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"score":{"type":"integer"},"status":{"type":"string","enum":["REVIEW","ASK_MODIFY","REVIEWED","APPROVE","ASK_MODIFY_REVIEWED","APPROVED","SCORE","ASK_MODIFY_APPROVED","REFUSED","SCORE_PASS","SCORE_FAIL","COMPLETED","CONFIRM_VALIDITY","DATE_EXPIRED"]},"statusDisplay":{"type":"string"},"department":{"type":"string"},"fileUrl":{"type":"string"},"parentId":{"type":"integer","format":"int64"},"indentLevel":{"type":"integer"},"replies":{"type":"array","items":{"type":"object","description":"(circular: ApprovalBoardDTO)"}}}}}}}}}}}},"POST:/api/v2/approvals/decisions":{"path":"/api/v2/approvals/decisions","method":"POST","operationId":"postDecisions","summary":"Process approval decisions","description":"Processes a batch of approval decisions (approve/refuse/accept/reject). Each decision is processed independently. Returns per-item success/failure results. Partial success is supported - failed items don't affect successful ones.","tags":["Approval"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"decisions":{"type":"array","items":{"type":"object","properties":{"projectId":{"type":"string"},"action":{"type":"string","enum":["APPROVE","REFUSE","ACCEPT","REJECT"]},"comment":{"type":"string"},"score":{"type":"integer","format":"int32"}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"projectId":{"type":"string"},"success":{"type":"boolean"},"message":{"type":"string"}}}}}}}}},"POST:/api/v2/approvals/requests":{"path":"/api/v2/approvals/requests","method":"POST","operationId":"postRequests","summary":"Request approval","description":"Submits a project for approval review. Project must be in In-Progress or CanModify status. Sets reviewers, approver, and transitions to Review status.","tags":["Approval"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string"},"reviewerIds":{"type":"array","items":{"type":"string"}},"approverId":{"type":"string"},"targetDate":{"type":"string"},"requestType":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"POST:/api/v2/auth/change-password":{"path":"/api/v2/auth/change-password","method":"POST","operationId":"changePassword_1","summary":"Change password","description":"Changes a user password and returns the current legacy placeholder response (null).","tags":["Auth"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"POST:/api/v2/auth/login":{"path":"/api/v2/auth/login","method":"POST","operationId":"login_1","summary":"Login","description":"Authenticates credentials and returns access/refresh tokens with user details.","tags":["Auth"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"required":["password","userId"],"type":"object","properties":{"userId":{"type":"string"},"password":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"tokenType":{"type":"string","enum":["BASIC","BEARER"]},"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"englishName":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"division":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"}}},"userLevel":{"type":"string","enum":["ADMIN","NORMAL","READER"]},"activeYN":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"lastPasswordChangeDate":{"type":"string","format":"date-time"},"useAccessibleDivisions":{"type":"integer"},"accessibleDivisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"}}}}}}}}}}}}},"POST:/api/v2/auth/logout":{"path":"/api/v2/auth/logout","method":"POST","operationId":"logout_1","summary":"Logout","description":"Invalidates the refresh token for the current user session and returns the legacy result.","tags":["Auth"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"required":["refreshToken"],"type":"object","properties":{"refreshToken":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"string"}}}}}},"POST:/api/v2/auth/password-reset-request":{"path":"/api/v2/auth/password-reset-request","method":"POST","operationId":"passwordResetRequest_1","summary":"Request password reset","description":"Submits a password reset request and returns the current legacy placeholder response (null).","tags":["Auth"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"POST:/api/v2/auth/refresh":{"path":"/api/v2/auth/refresh","method":"POST","operationId":"refresh_1","summary":"Refresh access token","description":"Validates a refresh token and issues a new token response with access/refresh tokens.","tags":["Auth"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"required":["refreshToken"],"type":"object","properties":{"refreshToken":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"tokenType":{"type":"string","enum":["BASIC","BEARER"]},"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"englishName":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"division":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"}}},"userLevel":{"type":"string","enum":["ADMIN","NORMAL","READER"]},"activeYN":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"lastPasswordChangeDate":{"type":"string","format":"date-time"},"useAccessibleDivisions":{"type":"integer"},"accessibleDivisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"}}}}}}}}}}}}},"GET:/api/v2/projects/{projectId}/block-diagrams":{"path":"/api/v2/projects/{projectId}/block-diagrams","method":"GET","operationId":"list_5","summary":"List block diagrams","description":"Returns block diagrams in the project. When search is provided, keyword matching is applied across block diagram fields.","tags":["Block Diagram"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Block diagram keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["FUNCTION","STRUCTURE","FUNCTION_STRUCTURE","STRUCTURE_FUNCTION","PROCESS","SUPER_SYSTEM","FUNCTION_ANALYSIS"]},"alias":{"type":"string"},"order":{"type":"integer"},"description":{"type":"string"},"numberFormat":{"type":"string"}}}}}}}}},"GET:/api/v2/projects/{projectId}/block-diagrams/{blockId}/nodes":{"path":"/api/v2/projects/{projectId}/block-diagrams/{blockId}/nodes","method":"GET","operationId":"getNodes","summary":"Get block nodes","description":"Returns block nodes in list view.","tags":["Block Diagram"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"blockId","in":"path","description":"Block diagram ID","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Block node keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string"},"referencedId":{"type":"string"},"function":{"type":"string"},"item":{"type":"string"},"requirement":{"type":"string"},"type":{"type":"string","enum":["FUNCTION","PART","SUB_FUNCTION","ASSEMBLY","NEW_CHANGE_ASSEMBLY","NEW_CHANGE_PART","NEW_CHANGE_PROCESS","SUPER_SYSTEM","TARGET"]},"order":{"type":"integer"},"processNumber":{"type":"string"},"processFlowChartName":{"type":"string"},"processFlowChartSymbol":{"type":"string"}}}}}}}}},"PUT:/api/v2/projects/{projectId}/block-diagrams/{blockId}/nodes":{"path":"/api/v2/projects/{projectId}/block-diagrams/{blockId}/nodes","method":"PUT","operationId":"saveNodes_1","summary":"Save block nodes","description":"Creates, updates, and deletes block nodes in a single request.","tags":["Block Diagram"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"blockId","in":"path","description":"Block diagram ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"clientId":{"type":"string"},"parentId":{"type":"string"},"clientParentId":{"type":"string"},"referencedId":{"type":"string"},"function":{"type":"string"},"item":{"type":"string"},"requirement":{"type":"string"},"type":{"type":"string","enum":["FUNCTION","PART","SUB_FUNCTION","ASSEMBLY","NEW_CHANGE_ASSEMBLY","NEW_CHANGE_PART","NEW_CHANGE_PROCESS","SUPER_SYSTEM","TARGET"]},"order":{"type":"integer","format":"int32"},"processNumber":{"type":"string"},"processFlowChartName":{"type":"string"},"processFlowChartSymbol":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string"},"id":{"type":"string"},"target":{"type":"string","enum":["WORKSHEET_ID","FAILURE_MODE_WORKSHEET_ID","WORKSHEET_ROW_ID","BLOCK_NODE_ID","BLOCK_REFERENCED_ID","FMM_OBJECT_ID"]}}}}}}}}},"GET:/api/v2/projects/{projectId}/block-diagrams/{blockId}/nodes/tree":{"path":"/api/v2/projects/{projectId}/block-diagrams/{blockId}/nodes/tree","method":"GET","operationId":"getNodesTree","summary":"Get block nodes tree","description":"Returns block nodes in tree view.","tags":["Block Diagram"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"blockId","in":"path","description":"Block diagram ID","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Block node keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string"},"referencedId":{"type":"string"},"function":{"type":"string"},"item":{"type":"string"},"requirement":{"type":"string"},"type":{"type":"string","enum":["FUNCTION","PART","SUB_FUNCTION","ASSEMBLY","NEW_CHANGE_ASSEMBLY","NEW_CHANGE_PART","NEW_CHANGE_PROCESS","SUPER_SYSTEM","TARGET"]},"order":{"type":"integer"},"processNumber":{"type":"string"},"processFlowChartName":{"type":"string"},"processFlowChartSymbol":{"type":"string"},"failureModes":{"type":"array","items":{"type":"object","properties":{"blockNodeId":{"type":"string"},"referencedBlockNodeId":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"fmmDiagramType":{"type":"string","enum":["UNUSED","NOT_SELECTED","TYPE_A","TYPE_C"]},"rank":{"type":"string"},"complete":{"type":"string"},"transferFmmObject":{"type":"integer"},"linked":{"type":"boolean"},"revisionSummary":{"type":"object","properties":{"created":{"type":"object","properties":{"userName":{"type":"string"},"updatedDateTime":{"type":"string","format":"date-time"}}},"updated":{"type":"object","properties":{"userName":{"type":"string"},"updatedDateTime":{"type":"string","format":"date-time"}}}}}}}},"children":{"type":"array","items":{"type":"object","description":"(circular: BlockNodeTreeDTO)"}}}}}}}},"deprecated":true},"GET:/api/v2/projects/{projectId}/block-diagrams-excel/{blockId}":{"path":"/api/v2/projects/{projectId}/block-diagrams-excel/{blockId}","method":"GET","operationId":"getDownloadLink","summary":"Get excel export download link","description":"Returns a downloadable URI for block diagram Excel export.","tags":["Block Diagram Excel"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"blockId","in":"path","description":"Block diagram ID","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"downloadUri":{"type":"string"}}}}}}}},"GET:/api/v2/projects/{projectId}/block-diagrams-excel/{uuid}/data":{"path":"/api/v2/projects/{projectId}/block-diagrams-excel/{uuid}/data","method":"GET","operationId":"getData","x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file ID returned by the upload endpoint.","summary":"Get parsed excel data","description":"Returns parsed block node data by upload UUID.","tags":["Block Diagram Excel"],"parameters":[{"name":"uuid","in":"path","description":"Upload UUID","required":true,"schema":{"type":"string"}},{"name":"startRowNumber","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"level","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"item","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"function","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"requirement","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"type","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"processNumber","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"processFlowChartSymbol","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"processFlowChartName","in":"query","schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"rowNumber":{"type":"integer"},"level":{"type":"integer"},"function":{"type":"string"},"item":{"type":"string"},"requirement":{"type":"string"},"type":{"type":"string","enum":["FUNCTION","PART","SUB_FUNCTION","ASSEMBLY","NEW_CHANGE_ASSEMBLY","NEW_CHANGE_PART","NEW_CHANGE_PROCESS","SUPER_SYSTEM","TARGET"]},"order":{"type":"string"},"processNumber":{"type":"string"},"processFlowChartName":{"type":"string"},"processFlowChartSymbol":{"type":"string"}}}}}}}}},"GET:/api/v2/projects/{projectId}/block-diagrams/{blockDiagramId}/failure-modes/{failureModeId}":{"path":"/api/v2/projects/{projectId}/block-diagrams/{blockDiagramId}/failure-modes/{failureModeId}","method":"GET","operationId":"get","summary":"Get failure mode details","description":"Returns a failure mode by ID.","tags":["Failure Mode"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"blockDiagramId","in":"path","description":"Block diagram ID","required":true,"schema":{"type":"string"}},{"name":"failureModeId","in":"path","description":"Failure mode ID","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"DELETE:/api/v2/projects/{projectId}/block-diagrams/{blockDiagramId}/failure-modes/{failureModeId}":{"path":"/api/v2/projects/{projectId}/block-diagrams/{blockDiagramId}/failure-modes/{failureModeId}","method":"DELETE","operationId":"deleteFailureMode","summary":"Delete failure mode","description":"Deletes a predefined failure mode from a specific block diagram within a project. This destructive operation permanently removes the failure mode and any associated FMM diagram structural data from the component. Use this endpoint to clean up incorrect entries, remove obsolete failure definitions, or restructure the block diagram's failure analysis. Since this action is irreversible, it should be called only after user confirmation. It is essential for maintaining accurate and up-to-date Failure Mode and Effects Analysis (FMEA) records.","tags":["Failure Mode"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"blockDiagramId","in":"path","description":"Block diagram ID","required":true,"schema":{"type":"string"}},{"name":"failureModeId","in":"path","description":"Failure mode ID","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"GET:/api/v2/template/block-diagrams/{blockDiagramType}/sheet-headers":{"path":"/api/v2/template/block-diagrams/{blockDiagramType}/sheet-headers","method":"GET","operationId":"getBlockDiagramSheetHeaders","summary":"Get block diagram Excel sheet headers for a given diagram type","description":"Returns the ordered list of column headers used in the Excel import/export sheet for the specified block diagram type. Valid values for blockDiagramType: P-DIAGRAM, BOUNDARY-DIAGRAM.","tags":["Template"],"parameters":[{"name":"blockDiagramType","in":"path","description":"Block diagram type","required":true,"schema":{"type":"string","enum":["FUNCTION","STRUCTURE","FUNCTION_STRUCTURE","STRUCTURE_FUNCTION","PROCESS","SUPER_SYSTEM","FUNCTION_ANALYSIS"]}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"POST:/api/v2/projects/{projectId}/block-diagrams/{blockDiagramId}/failure-modes":{"path":"/api/v2/projects/{projectId}/block-diagrams/{blockDiagramId}/failure-modes","method":"POST","summary":"Create failure modes","description":"Creates one or more failure modes for the target block diagram.","tags":["Failure Mode"],"operationId":"create_2","parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"blockDiagramId","in":"path","description":"Block diagram ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"nodeId":{"type":"string"},"name":{"type":"string"},"id":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/projects/{projectId}/block-diagrams/{blockDiagramId}/failure-modes":{"path":"/api/v2/projects/{projectId}/block-diagrams/{blockDiagramId}/failure-modes","method":"GET","operationId":"list_6","summary":"List block diagram failure modes","description":"Returns failure modes visible in the target block diagram. Optional search applies keyword filtering.","tags":["Failure Mode"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"blockDiagramId","in":"path","description":"Block diagram ID","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Failure mode keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/board":{"path":"/api/v2/board","method":"GET","operationId":"listBoards","summary":"List board comments","description":"Returns board comments for a project and category. Supports optional step filter for comment type. Category determines the domain: approval, BlockDiagram, FmmDiagram, Worksheet, FTA, controlplan, info.","tags":["Board"],"parameters":[{"name":"projectId","in":"query","description":"Project ID (required)","schema":{"type":"string"}},{"name":"category","in":"query","description":"Board category filter","schema":{"type":"string"}},{"name":"step","in":"query","description":"Step label filter for comment type (optional)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/board/{boardId}":{"path":"/api/v2/board/{boardId}","method":"GET","operationId":"getBoard_1","summary":"Get board comment detail","description":"Returns a single board comment with its replies. Replies are nested in the replies field, sorted by depth.","tags":["Board"],"parameters":[{"name":"boardId","in":"path","description":"Board comment ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"POST:/api/v2/board":{"path":"/api/v2/board","method":"POST","operationId":"createBoard","summary":"Create board comment","description":"Creates a new board comment. Sets author from authentication context. projectId, category, title, and content are required.","tags":["Board"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string"},"category":{"type":"string","enum":["APPROVAL","BLOCK_DIAGRAM","FMM_DIAGRAM","WORKSHEET","FTA","CONTROL_PLAN","INFO"]},"stepLabel":{"type":"string"},"title":{"type":"string"},"content":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"POST:/api/v2/board/{boardId}/replies":{"path":"/api/v2/board/{boardId}/replies","method":"POST","operationId":"createReply","summary":"Create reply to board comment","description":"Creates a reply to an existing board comment. Inherits category, projectId, stepLabel, and approvalRound from parent. Title is prefixed with 'Re: '.","tags":["Board"],"parameters":[{"name":"boardId","in":"path","description":"Parent board comment ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/classification-excel/export":{"path":"/api/v2/classification-excel/export","method":"GET","operationId":"export_3","summary":"Export classification groups and items to Excel","description":"Helper export that writes classification groups and items to an XLSX file and returns a download URI. The main admin snapshot source remains GET /api/v2/classifications. Supports optional keyword search filter on group title or item title. Requires admin permission.","tags":["ClassificationExcel"],"parameters":[{"name":"q","in":"query","description":"Keyword filter for exported rows (max 100 chars)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"DELETE:/api/v2/classifications/items/{itemId}/image":{"path":"/api/v2/classifications/items/{itemId}/image","method":"DELETE","operationId":"deleteItemImage","summary":"Delete classification item image","description":"Deletes the image file for a classification item as a helper endpoint. Use PUT /api/v2/classifications for the main grouped snapshot save, and use this endpoint only to remove the binary asset and clear the image reference.","tags":["Classification"],"parameters":[{"name":"itemId","in":"path","description":"Classification item ID to delete image from","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"symbol":{"type":"string"},"symbolType":{"type":"string","enum":["TEXT","IMAGE"]},"symbolImageUrl":{"type":"string"},"groupId":{"type":"string"}}}}}}}},"GET:/api/v2/classifications":{"path":"/api/v2/classifications","method":"GET","operationId":"getAllGroups","summary":"List all classification groups","description":"Returns the main admin snapshot source for classifications. Each group includes its nested items, the group isDefault flag, and per-item symbol metadata including symbolType and symbolImageUrl. Supports optional keyword search on group title or item title.","tags":["Classification"],"parameters":[{"name":"q","in":"query","description":"Keyword filter applied to group title or item title (max 100 chars)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"isDefault":{"type":"boolean"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"symbol":{"type":"string"},"symbolType":{"type":"string","enum":["TEXT","IMAGE"]},"symbolImageUrl":{"type":"string"},"groupId":{"type":"string"}}}}}}}}}}}},"GET:/api/v2/classifications/by-project/{projectId}":{"path":"/api/v2/classifications/by-project/{projectId}","method":"GET","operationId":"getItemsByProject","summary":"Get classification items by project","description":"Runtime helper read that returns classification items associated with the specified project. Falls back to the default group items if the project has no project_class configured. This is not the main admin snapshot source.","tags":["Classification"],"parameters":[{"name":"projectId","in":"path","description":"Project ID to resolve classification group","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"symbol":{"type":"string"},"symbolType":{"type":"string","enum":["TEXT","IMAGE"]},"symbolImageUrl":{"type":"string"},"groupId":{"type":"string"}}}}}}}}},"GET:/api/v2/classifications/default":{"path":"/api/v2/classifications/default","method":"GET","operationId":"getDefaultItems","summary":"Get default classification items","description":"Helper read that returns items from the current default classification group (the group with setdefault='Y'). This is not the main admin snapshot source.","tags":["Classification"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"symbol":{"type":"string"},"symbolType":{"type":"string","enum":["TEXT","IMAGE"]},"symbolImageUrl":{"type":"string"},"groupId":{"type":"string"}}}}}}}}},"GET:/api/v2/classifications/items":{"path":"/api/v2/classifications/items","method":"GET","operationId":"getItemsByGroup","summary":"Get items by group","description":"Helper read that returns classification items belonging to one group. This is not the main admin snapshot source. The groupId parameter is required. Returns 404 if the group does not exist.","tags":["Classification"],"parameters":[{"name":"groupId","in":"query","description":"Classification group ID (required)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"symbol":{"type":"string"},"symbolType":{"type":"string","enum":["TEXT","IMAGE"]},"symbolImageUrl":{"type":"string"},"groupId":{"type":"string"}}}}}}}}},"POST:/api/v2/classifications/items/{itemId}/image":{"path":"/api/v2/classifications/items/{itemId}/image","method":"POST","operationId":"uploadItemImage","summary":"Upload classification item image","description":"Uploads image binary for a classification item as a helper endpoint. Use PUT /api/v2/classifications for the main grouped snapshot save, and use this endpoint only to create or replace the referenced image file. The image is resized to 22x22 pixels. Accepted formats: gif, jpg, png, bmp.","tags":["Classification"],"parameters":[{"name":"itemId","in":"path","description":"Classification item ID to upload image for","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"object","properties":{"contentDisposition":{"type":"object","properties":{"type":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"fileName":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"modificationDate":{"type":"string","format":"date-time"},"readDate":{"type":"string","format":"date-time"},"size":{"type":"integer","format":"int64"}}},"entity":{"type":"object"},"headers":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"mediaType":{"type":"object","properties":{"type":{"type":"string"},"subtype":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"wildcardSubtype":{"type":"boolean"},"wildcardType":{"type":"boolean"}}},"messageBodyWorkers":{"type":"object"},"parent":{"type":"object","properties":{"contentDisposition":{"type":"object","properties":{"type":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"fileName":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"modificationDate":{"type":"string","format":"date-time"},"readDate":{"type":"string","format":"date-time"},"size":{"type":"integer","format":"int64"}}},"entity":{"type":"object"},"headers":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"mediaType":{"type":"object","properties":{"type":{"type":"string"},"subtype":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"wildcardSubtype":{"type":"boolean"},"wildcardType":{"type":"boolean"}}},"messageBodyWorkers":{"type":"object"},"parent":{"type":"object"},"providers":{"type":"object"},"bodyParts":{"type":"array","items":{"type":"object","properties":{"contentDisposition":{"type":"object","properties":{"type":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"fileName":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"modificationDate":{"type":"string","format":"date-time"},"readDate":{"type":"string","format":"date-time"},"size":{"type":"integer","format":"int64"}}},"entity":{"type":"object"},"headers":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"mediaType":{"type":"object","properties":{"type":{"type":"string"},"subtype":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"wildcardSubtype":{"type":"boolean"},"wildcardType":{"type":"boolean"}}},"messageBodyWorkers":{"type":"object"},"parent":{"type":"object"},"providers":{"type":"object"},"parameterizedHeaders":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}},"parameterizedHeaders":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}}}}}}}},"providers":{"type":"object"},"simple":{"type":"boolean"},"formDataContentDisposition":{"type":"object","properties":{"type":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"fileName":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"modificationDate":{"type":"string","format":"date-time"},"readDate":{"type":"string","format":"date-time"},"size":{"type":"integer","format":"int64"},"name":{"type":"string"}}},"name":{"type":"string"},"value":{"type":"string"},"parameterizedHeaders":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"symbol":{"type":"string"},"symbolType":{"type":"string","enum":["TEXT","IMAGE"]},"symbolImageUrl":{"type":"string"},"groupId":{"type":"string"}}}}}}}},"PUT:/api/v2/classifications":{"path":"/api/v2/classifications","method":"PUT","operationId":"saveSnapshot","summary":"Save classification snapshot","description":"Saves the full snapshot for classifications using the grouped read shape. The payload carries groups, items, and the single default group in one request. This is a full snapshot replace, so omitted groups and items are deleted. Image binary upload remains a helper flow on /items/{itemId}/image.","tags":["Classification"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["groups"],"properties":{"groups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"defaultGroup":{"type":"boolean"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"symbol":{"type":"string"},"symbolType":{"type":"string","enum":["TEXT","IMAGE"]},"symbolImageUrl":{"type":"string"},"groupId":{"type":"string"}}}}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"isDefault":{"type":"boolean"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"symbol":{"type":"string"},"symbolType":{"type":"string","enum":["TEXT","IMAGE"]},"symbolImageUrl":{"type":"string"},"groupId":{"type":"string"}}}}}}}}}}}},"GET:/api/v2/condition-library":{"path":"/api/v2/condition-library","method":"GET","operationId":"getConditionLibrary","summary":"Get condition library nodes (flat)","description":"Returns condition library nodes in flat list form. Optional search matches library text fields. When type is omitted, returns all types.","tags":["Condition Library"],"parameters":[{"name":"type","in":"query","description":"Condition library type. If omitted, returns all types.","schema":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]}},{"name":"q","in":"query","description":"Keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 50, max: 1000)","schema":{"type":"integer","default":50,"format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"serial":{"type":"integer"},"type":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]},"title":{"type":"string"},"id":{"type":"string"},"parentId":{"type":"string"},"depth":{"type":"integer"},"rank":{"type":"integer"},"children":{"type":"array","items":{"type":"object","description":"(circular: ConditionLibraryTreeDTO)"}}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"}}}}}}}},"GET:/api/v2/condition-library/tree":{"path":"/api/v2/condition-library/tree","method":"GET","operationId":"getConditionLibraryTree","summary":"Get condition library tree","description":"Returns condition library nodes as a tree. Type is required by service contract. page/size are accepted only to return explicit validation errors.","tags":["Condition Library"],"parameters":[{"name":"type","in":"query","description":"Condition library type","schema":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]}},{"name":"q","in":"query","description":"Keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}},{"name":"page","in":"query","description":"Rejected for tree endpoint. If supplied, returns 400.","schema":{"type":"integer","format":"int32"}},{"name":"size","in":"query","description":"Rejected for tree endpoint. If supplied, returns 400.","schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"serial":{"type":"integer"},"type":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]},"title":{"type":"string"},"id":{"type":"string"},"parentId":{"type":"string"},"depth":{"type":"integer"},"rank":{"type":"integer"},"children":{"type":"array","items":{"type":"object","description":"(circular: ConditionLibraryTreeDTO)"}}}}}}}}},"PUT:/api/v2/condition-library/{type}/children":{"path":"/api/v2/condition-library/{type}/children","method":"PUT","operationId":"saveConditionLibraryChildren","summary":"Save condition library children","description":"Replaces the entire condition library tree for the requested type. The request contains a recursive tree starting from ROOT's direct children. Server diffs each level: deletes omitted nodes (with subtrees), updates changed titles, creates new nodes, and reorders by array position. Nodes with null children field keep their existing subtree; nodes with an empty children array have their subtree deleted.","tags":["Condition Library"],"parameters":[{"name":"type","in":"path","description":"Condition library type","required":true,"schema":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"children":{"type":"array","items":{"type":"object","properties":{"serial":{"type":"integer","format":"int32"},"title":{"type":"string"},"children":{"type":"array","items":{"type":"object","description":"(circular: ConditionLibraryChildItemDTO)"}}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"POST:/api/v2/condition-library-excel/{type}/{uuid}":{"path":"/api/v2/condition-library-excel/{type}/{uuid}","method":"POST","operationId":"importConditionLibraryFromExcel","summary":"Import condition library nodes from Excel","description":"Imports condition titles from an uploaded Excel file into the requested type and parent node. Blank titles and duplicate sibling titles are ignored.","tags":["Condition Library Excel"],"parameters":[{"name":"type","in":"path","description":"Condition library type","required":true,"schema":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]}},{"name":"uuid","in":"path","description":"Upload UUID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sheetIndex":{"type":"integer","format":"int32"},"titleColumnIndex":{"type":"integer","format":"int32"},"startRowNumber":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}},"x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file identifier returned by the upload endpoint."},"GET:/api/v2/condition-library-excel/export":{"path":"/api/v2/condition-library-excel/export","method":"GET","operationId":"export_12","summary":"Export condition library to Excel","description":"Exports condition library of specified type to an XLSX file.","tags":["Condition Library Excel"],"parameters":[{"name":"type","in":"query","description":"Condition library type","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"POST:/api/v2/condition-library-excel/{type}/{uuid}/read":{"path":"/api/v2/condition-library-excel/{type}/{uuid}/read","method":"POST","operationId":"readFlatPreview_1","summary":"Preview condition library nodes from Excel","description":"Parses an uploaded Excel file into condition library nodes and returns the flat preview list without writing to the database.","tags":["Condition Library Excel"],"parameters":[{"name":"type","in":"path","description":"Condition library type","required":true,"schema":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]}},{"name":"uuid","in":"path","description":"Upload UUID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sheetIndex":{"type":"integer","format":"int32"},"titleColumnIndex":{"type":"integer","format":"int32"},"startRowNumber":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"serial":{"type":"integer"},"type":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]},"title":{"type":"string"},"id":{"type":"string"},"parentId":{"type":"string"},"depth":{"type":"integer"},"rank":{"type":"integer"},"children":{"type":"array","items":{"type":"object","description":"(circular: ConditionLibraryTreeDTO)"}}}}}}}}},"x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file identifier returned by the upload endpoint."},"POST:/api/v2/condition-library-excel/{type}/{uuid}/read/tree":{"path":"/api/v2/condition-library-excel/{type}/{uuid}/read/tree","method":"POST","operationId":"readTreePreview_1","summary":"Preview condition library tree from Excel","description":"Parses an uploaded Excel file into condition library nodes and returns the tree preview list without writing to the database.","tags":["Condition Library Excel"],"parameters":[{"name":"type","in":"path","description":"Condition library type","required":true,"schema":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]}},{"name":"uuid","in":"path","description":"Upload UUID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sheetIndex":{"type":"integer","format":"int32"},"titleColumnIndex":{"type":"integer","format":"int32"},"startRowNumber":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"serial":{"type":"integer"},"type":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]},"title":{"type":"string"},"id":{"type":"string"},"parentId":{"type":"string"},"depth":{"type":"integer"},"rank":{"type":"integer"},"children":{"type":"array","items":{"type":"object","description":"(circular: ConditionLibraryTreeDTO)"}}}}}}}}},"x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file identifier returned by the upload endpoint."},"GET:/api/v2/dashboard/all":{"path":"/api/v2/dashboard/all","method":"GET","operationId":"getAllDashboard","summary":"Get all projects dashboard","description":"Returns dashboard summary for all projects across all divisions. Requires ADMIN privileges.","tags":["Dashboard"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"object","properties":{"highRiskNoAction":{"type":"integer"},"criticalSeverityNoAction":{"type":"integer"},"worsenedCount":{"type":"integer"},"overdueProjects":{"type":"integer"},"pendingApprovals":{"type":"integer"}}},"status":{"type":"object","properties":{"projectDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"rpnDistribution":{"type":"object","properties":{"before":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"after":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}}}},"coverage":{"type":"object","properties":{"totalFailureModes":{"type":"integer"},"totalCauses":{"type":"integer"},"ratedCauses":{"type":"integer"},"coverageRate":{"type":"number","format":"double"}}},"fmeaTypeDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"improvementRate":{"type":"number","format":"double"},"failureModeAnalysis":{"type":"object","properties":{"topFailureModes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"},"avgRpnBefore":{"type":"number","format":"double"},"avgRpnAfter":{"type":"number","format":"double"},"topCauses":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"},"avgS":{"type":"number","format":"double"},"avgO":{"type":"number","format":"double"},"avgD":{"type":"number","format":"double"}}}},"topActions":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"},"avgS":{"type":"number","format":"double"},"avgO":{"type":"number","format":"double"},"avgD":{"type":"number","format":"double"}}}}}}},"severityDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"topUnactionedCauses":{"type":"array","items":{"type":"object","properties":{"causeName":{"type":"string"},"failureModeName":{"type":"string"},"rpn":{"type":"integer"},"severity":{"type":"integer"},"occurrence":{"type":"integer"},"detection":{"type":"integer"}}}},"classificationDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}}}}}},"trends":{"type":"object","properties":{"monthlyProjectCreation":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"zombieProjects":{"type":"integer"}}},"meta":{"type":"object","properties":{"lastUpdated":{"type":"object"},"warming":{"type":"boolean"},"stale":{"type":"boolean"}}}}}}}}}},"GET:/api/v2/dashboard/division":{"path":"/api/v2/dashboard/division","method":"GET","operationId":"getDivisionDashboard","summary":"Get division dashboard","description":"Returns dashboard summary for the current user's division and accessible divisions.","tags":["Dashboard"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"object","properties":{"highRiskNoAction":{"type":"integer"},"criticalSeverityNoAction":{"type":"integer"},"worsenedCount":{"type":"integer"},"overdueProjects":{"type":"integer"},"pendingApprovals":{"type":"integer"}}},"status":{"type":"object","properties":{"projectDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"rpnDistribution":{"type":"object","properties":{"before":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"after":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}}}},"coverage":{"type":"object","properties":{"totalFailureModes":{"type":"integer"},"totalCauses":{"type":"integer"},"ratedCauses":{"type":"integer"},"coverageRate":{"type":"number","format":"double"}}},"fmeaTypeDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"improvementRate":{"type":"number","format":"double"},"failureModeAnalysis":{"type":"object","properties":{"topFailureModes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"},"avgRpnBefore":{"type":"number","format":"double"},"avgRpnAfter":{"type":"number","format":"double"},"topCauses":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"},"avgS":{"type":"number","format":"double"},"avgO":{"type":"number","format":"double"},"avgD":{"type":"number","format":"double"}}}},"topActions":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"},"avgS":{"type":"number","format":"double"},"avgO":{"type":"number","format":"double"},"avgD":{"type":"number","format":"double"}}}}}}},"severityDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"topUnactionedCauses":{"type":"array","items":{"type":"object","properties":{"causeName":{"type":"string"},"failureModeName":{"type":"string"},"rpn":{"type":"integer"},"severity":{"type":"integer"},"occurrence":{"type":"integer"},"detection":{"type":"integer"}}}},"classificationDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}}}}}},"trends":{"type":"object","properties":{"monthlyProjectCreation":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"zombieProjects":{"type":"integer"}}},"meta":{"type":"object","properties":{"lastUpdated":{"type":"object"},"warming":{"type":"boolean"},"stale":{"type":"boolean"}}}}}}}}}},"GET:/api/v2/dashboard/my":{"path":"/api/v2/dashboard/my","method":"GET","operationId":"getMyDashboard","summary":"Get my projects dashboard","description":"Returns dashboard summary for projects the current user participates in. ADMIN users automatically see all projects.","tags":["Dashboard"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"object","properties":{"highRiskNoAction":{"type":"integer"},"criticalSeverityNoAction":{"type":"integer"},"worsenedCount":{"type":"integer"},"overdueProjects":{"type":"integer"},"pendingApprovals":{"type":"integer"}}},"status":{"type":"object","properties":{"projectDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"rpnDistribution":{"type":"object","properties":{"before":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"after":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}}}},"coverage":{"type":"object","properties":{"totalFailureModes":{"type":"integer"},"totalCauses":{"type":"integer"},"ratedCauses":{"type":"integer"},"coverageRate":{"type":"number","format":"double"}}},"fmeaTypeDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"improvementRate":{"type":"number","format":"double"},"failureModeAnalysis":{"type":"object","properties":{"topFailureModes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"},"avgRpnBefore":{"type":"number","format":"double"},"avgRpnAfter":{"type":"number","format":"double"},"topCauses":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"},"avgS":{"type":"number","format":"double"},"avgO":{"type":"number","format":"double"},"avgD":{"type":"number","format":"double"}}}},"topActions":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"},"avgS":{"type":"number","format":"double"},"avgO":{"type":"number","format":"double"},"avgD":{"type":"number","format":"double"}}}}}}},"severityDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"topUnactionedCauses":{"type":"array","items":{"type":"object","properties":{"causeName":{"type":"string"},"failureModeName":{"type":"string"},"rpn":{"type":"integer"},"severity":{"type":"integer"},"occurrence":{"type":"integer"},"detection":{"type":"integer"}}}},"classificationDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}}}}}},"trends":{"type":"object","properties":{"monthlyProjectCreation":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"zombieProjects":{"type":"integer"}}},"meta":{"type":"object","properties":{"lastUpdated":{"type":"object"},"warming":{"type":"boolean"},"stale":{"type":"boolean"}}}}}}}}}},"GET:/api/v2/division-excel/export":{"path":"/api/v2/division-excel/export","method":"GET","operationId":"export_4","summary":"Export divisions to Excel","description":"Exports division rows to an XLSX file and returns a download URI. This is a helper export surface separate from the main relation-tree snapshot read at GET /api/v2/divisions. Supports an optional helper search filter.","tags":["DivisionExcel"],"parameters":[{"name":"q","in":"query","description":"Division name keyword filter for exported rows","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"GET:/api/v2/divisions":{"path":"/api/v2/divisions","method":"GET","summary":"List division relation tree","operationId":"list_7","description":"Returns the full admin snapshot-source relation tree for divisions. Each root division includes id, name, code, aliases, and relatedDivisions so the toolbar can render the two-level business-division tree without calling helper reads.","tags":["Division"],"parameters":[{"name":"q","in":"query","description":"Division name keyword","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 50, max: 1000)","schema":{"type":"integer","default":50,"format":"int32"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"code":{"type":"string"},"relatedDivisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}},"properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"}}}}}}}},"GET:/api/v2/divisions/{divisionId}":{"path":"/api/v2/divisions/{divisionId}","method":"GET","summary":"Get division details","operationId":"get_1","description":"Returns a single division in the same snapshot-source shape used by the main relation-tree read, including aliases and relatedDivisions.","tags":["Division"],"parameters":[{"name":"divisionId","in":"path","description":"Division ID to retrieve","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"code":{"type":"string"},"relatedDivisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}},"description":"(circular: DivisionDTO)"}}}}}}}}},"GET:/api/v2/divisions/{divisionId}/authorized-divisions":{"path":"/api/v2/divisions/{divisionId}/authorized-divisions","method":"GET","operationId":"getAuthorizedDivisions","summary":"Get authorized divisions helper","description":"Returns the helper child-division list for a single root division. The main toolbar snapshot source is GET /api/v2/divisions; this helper read exists for focused inspection or auxiliary tooling.","tags":["Division"],"parameters":[{"name":"divisionId","in":"path","description":"Division ID to query authorized child divisions for","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}}},"GET:/api/v2/divisions/search":{"path":"/api/v2/divisions/search","method":"GET","operationId":"search_1","summary":"Search divisions helper","description":"Returns helper paged search results for divisions. This helper read is separate from the main admin snapshot-source relation-tree read at GET /api/v2/divisions.","tags":["Division"],"parameters":[{"name":"q","in":"query","description":"Division name keyword for helper search","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number for helper search (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size for helper search (default: 50, max: 1000)","schema":{"type":"integer","default":50,"format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"}}}}}}}},"PUT:/api/v2/divisions":{"path":"/api/v2/divisions","method":"PUT","operationId":"saveSnapshot_1","summary":"Save division composite snapshot","description":"Replaces the full division admin snapshot in one payload. Each root item includes division basic fields plus authorizedDivisionIds. Omitted divisions are deleted, authorized mappings are rebuilt in the same transaction, and the latest relation-tree snapshot is returned.","tags":["Division"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"required":["divisions"],"type":"object","properties":{"divisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"authorizedDivisionIds":{"type":"array","items":{"type":"integer","format":"int32"}}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"code":{"type":"string"},"relatedDivisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}}}}}},"GET:/api/v2/projects/{projectId}/documents/categories/{documentCategory}":{"path":"/api/v2/projects/{projectId}/documents/categories/{documentCategory}","method":"GET","operationId":"listByCategory_1","summary":"List documents by category for a project","description":"Returns documents in the specified category for the given project. Document categories group related files (e.g., FMEA reports, reference materials).","tags":["Documents"],"parameters":[{"name":"projectId","in":"path","description":"Project ID whose documents to list","required":true,"schema":{"type":"string"}},{"name":"documentCategory","in":"path","description":"Document category","required":true,"schema":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM","GENERAL"]}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string","enum":["UPLOAD","URL"]},"value":{"type":"string"},"path":{"type":"string"},"context":{"type":"object"},"fileSize":{"type":"string"},"uploadDate":{"type":"string","format":"date"},"category":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM","GENERAL"]}}}}}}}}},"POST:/api/v2/projects/{projectId}/documents/categories/{documentCategory}":{"path":"/api/v2/projects/{projectId}/documents/categories/{documentCategory}","method":"POST","operationId":"add_1","summary":"Add a document to a project category","description":"Adds a new document entry to the specified category within the project. The document file must be uploaded separately via POST /api/v2/files. Requires project membership.","tags":["Documents"],"parameters":[{"name":"projectId","in":"path","description":"Project ID to add the document to","required":true,"schema":{"type":"string"}},{"name":"documentCategory","in":"path","description":"Document category to add to","required":true,"schema":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM","GENERAL"]}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"uuid":{"type":"string"},"value":{"type":"string"},"path":{"type":"string"},"type":{"type":"string","enum":["UPLOAD","URL"]}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string","enum":["UPLOAD","URL"]},"value":{"type":"string"},"path":{"type":"string"},"context":{"type":"object"},"fileSize":{"type":"string"},"uploadDate":{"type":"string","format":"date"},"category":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM","GENERAL"]}}}}}}}},"GET:/api/v2/projects/{projectId}/documents/{documentId}":{"path":"/api/v2/projects/{projectId}/documents/{documentId}","method":"GET","operationId":"get_8","summary":"Get a project document by ID","description":"Returns a single project document by its numeric ID. The document must belong to the specified project.","tags":["Documents"],"parameters":[{"name":"projectId","in":"path","description":"Project ID that owns the document","required":true,"schema":{"type":"string"}},{"name":"documentId","in":"path","description":"Document ID (numeric)","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string","enum":["UPLOAD","URL"]},"value":{"type":"string"},"path":{"type":"string"},"context":{"type":"object"},"fileSize":{"type":"string"},"uploadDate":{"type":"string","format":"date"},"category":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM","GENERAL"]}}}}}}}},"DELETE:/api/v2/projects/{projectId}/documents/{documentId}":{"path":"/api/v2/projects/{projectId}/documents/{documentId}","method":"DELETE","operationId":"delete_5","summary":"Delete a project document","description":"Permanently deletes the specified document from the project. Returns 204 No Content on success. Requires project membership.","tags":["Documents"],"parameters":[{"name":"projectId","in":"path","description":"Project ID that owns the document","required":true,"schema":{"type":"string"}},{"name":"documentId","in":"path","description":"Document ID to delete (numeric)","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"GET:/api/v2/projects/{projectId}/documents/{documentId}/download":{"path":"/api/v2/projects/{projectId}/documents/{documentId}/download","method":"GET","operationId":"getDownloadLink_2","summary":"Get download link for a project document","description":"Generates and returns a download link (FileDownloadResponseDTO) for the specified document. Use GET /api/v1/files/{uuid} with the returned URI to download the actual file.","tags":["Documents"],"parameters":[{"name":"projectId","in":"path","description":"Project ID that owns the document","required":true,"schema":{"type":"string"}},{"name":"documentId","in":"path","description":"Document ID to download (numeric)","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"downloadUri":{"type":"string"}}}}}}}},"GET:/api/v2/projects/{projectId}/documents":{"path":"/api/v2/projects/{projectId}/documents","method":"GET","operationId":"list_14","summary":"List all documents for a project","description":"Returns all documents associated with the specified project, across all categories.","tags":["Documents"],"parameters":[{"name":"projectId","in":"path","description":"Project ID whose documents to list","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string","enum":["UPLOAD","URL"]},"value":{"type":"string"},"path":{"type":"string"},"context":{"type":"object"},"fileSize":{"type":"string"},"uploadDate":{"type":"string","format":"date"},"category":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM","GENERAL"]}}}}}}}}},"GET:/api/v2/projects/{projectId}/documents/categories/{documentCategory}/path/{documentPath}":{"path":"/api/v2/projects/{projectId}/documents/categories/{documentCategory}/path/{documentPath}","method":"GET","operationId":"listByCategoryAndPath","summary":"List documents by category and path for a project","description":"Returns documents that match both the specified category and virtual path prefix. Supports hierarchical document organization within a category.","tags":["Documents"],"parameters":[{"name":"projectId","in":"path","description":"Project ID whose documents to list","required":true,"schema":{"type":"string"}},{"name":"documentCategory","in":"path","description":"Document category","required":true,"schema":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM","GENERAL"]}},{"name":"documentPath","in":"path","description":"Virtual document path prefix for filtering","required":true,"schema":{"pattern":".+","type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string","enum":["UPLOAD","URL"]},"value":{"type":"string"},"path":{"type":"string"},"fileSize":{"type":"string"},"uploadDate":{"type":"string","format":"date"},"category":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM"]}}}}}}}}},"GET:/api/v2/projects/{projectId}/documents/categories":{"path":"/api/v2/projects/{projectId}/documents/categories","method":"GET","operationId":"listByCategory","summary":"List documents across all categories","description":"Returns all project documents when category selection is omitted. This is an alias of GET /projects/{projectId}/documents for category-optional clients.","tags":["Documents"],"parameters":[{"name":"projectId","in":"path","description":"Project ID whose documents to list","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string","enum":["UPLOAD","URL"]},"value":{"type":"string"},"path":{"type":"string"},"context":{"type":"object"},"fileSize":{"type":"string"},"uploadDate":{"type":"string","format":"date"},"category":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM","GENERAL"]}}}}}}}}},"PATCH:/api/v2/projects/{projectId}/documents/{documentId}":{"path":"/api/v2/projects/{projectId}/documents/{documentId}","method":"PATCH","operationId":"rename","summary":"Rename a project document","description":"Updates the stored URL or uploaded file name of the specified project document. Upload documents rename the physical file in place, while URL documents update only the database value.","tags":["Documents"],"parameters":[{"name":"projectId","in":"path","description":"Project ID that owns the document","required":true,"schema":{"type":"string"}},{"name":"documentId","in":"path","description":"Document ID to rename (numeric)","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"required":["value"],"type":"object","properties":{"value":{"type":"string"}}}}},"required":true},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string","enum":["UPLOAD","URL"]},"value":{"type":"string"},"path":{"type":"string"},"context":{"type":"object"},"fileSize":{"type":"string"},"uploadDate":{"type":"string","format":"date"},"category":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM","GENERAL"]}}}}}}}},"GET:/api/v2/evaluation":{"path":"/api/v2/evaluation","method":"GET","operationId":"getAllEvaluation","summary":"Get all evaluation criteria by FMEA type","description":"Returns the grouped snapshot-source payload for all FMEA types. Each criteria entry already includes ratings and significance, so FE does not need extra read calls. Supports optional keyword search on criteria name or description.","tags":["Evaluation Criteria"],"parameters":[{"name":"q","in":"query","description":"Keyword filter applied to criteria name and description (max 100 chars)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"fmeaType":{"type":"string"},"criteria":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"defaultSelected":{"type":"boolean"},"displayed":{"type":"boolean"},"ratings":{"type":"object","properties":{"severity":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}},"occurrence":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}},"detection":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}}}},"significance":{"type":"object","properties":{"rpn":{"type":"integer"},"s":{"type":"integer"},"o":{"type":"integer"},"d":{"type":"integer"},"rpnRating":{"type":"string"},"limitType":{"type":"string"}}}}}}}}}}}}}},"GET:/api/v2/evaluation/{fmeaType}":{"path":"/api/v2/evaluation/{fmeaType}","method":"GET","operationId":"getCriteriaByFmeaType","summary":"Get grouped evaluation payload for a specific FMEA type","description":"Returns the same grouped snapshot-source payload as GET /api/v2/evaluation but scoped to one FMEA type. Each criteria entry already includes ratings and significance. Supports optional keyword search on criteria name or description.","tags":["Evaluation Criteria"],"parameters":[{"name":"fmeaType","in":"path","description":"FMEA type","required":true,"schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"q","in":"query","description":"Keyword filter applied to criteria name and description (max 100 chars)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fmeaType":{"type":"string"},"criteria":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"defaultSelected":{"type":"boolean"},"displayed":{"type":"boolean"},"ratings":{"type":"object","properties":{"severity":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}},"occurrence":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}},"detection":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}}}},"significance":{"type":"object","properties":{"rpn":{"type":"integer"},"s":{"type":"integer"},"o":{"type":"integer"},"d":{"type":"integer"},"rpnRating":{"type":"string"},"limitType":{"type":"string"}}}}}}}}}}}}},"GET:/api/v2/evaluation/{fmeaType}/{criteriaId}":{"path":"/api/v2/evaluation/{fmeaType}/{criteriaId}","method":"GET","operationId":"getRatingsByCriteria","summary":"Get S/O/D ratings for a criteria","description":"Helper read that returns severity, occurrence, and detection rating items for a single criteria. The main grouped snapshot-source reads are GET /api/v2/evaluation and GET /api/v2/evaluation/{fmeaType}.","tags":["Evaluation Criteria"],"parameters":[{"name":"fmeaType","in":"path","description":"FMEA type","required":true,"schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"criteriaId","in":"path","description":"Unique ID of the evaluation criteria","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"severity":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}},"occurrence":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}},"detection":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}}}}}}}}},"GET:/api/v2/evaluation/{fmeaType}/{criteriaId}/significance":{"path":"/api/v2/evaluation/{fmeaType}/{criteriaId}/significance","method":"GET","operationId":"getSignificanceByCriteria","summary":"Get significance criteria for a criteria","description":"Helper read that returns significance criteria for a single evaluation criteria. The main grouped snapshot-source reads are GET /api/v2/evaluation and GET /api/v2/evaluation/{fmeaType}.","tags":["Evaluation Criteria"],"parameters":[{"name":"fmeaType","in":"path","description":"FMEA type","required":true,"schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"criteriaId","in":"path","description":"Unique ID of the evaluation criteria","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"rpn":{"type":"integer"},"s":{"type":"integer"},"o":{"type":"integer"},"d":{"type":"integer"},"rpnRating":{"type":"string"},"limitType":{"type":"string"}}}}}}}},"GET:/api/v2/evaluation/{fmeaType}/{criteriaId}/{category}":{"path":"/api/v2/evaluation/{fmeaType}/{criteriaId}/{category}","method":"GET","operationId":"getRatingsByCategory","summary":"Get ratings for a specific S/O/D category","description":"Helper read that returns one rating category for a single criteria. The main grouped snapshot-source reads are GET /api/v2/evaluation and GET /api/v2/evaluation/{fmeaType}.","tags":["Evaluation Criteria"],"parameters":[{"name":"fmeaType","in":"path","description":"FMEA type","required":true,"schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"criteriaId","in":"path","description":"Unique ID of the evaluation criteria","required":true,"schema":{"type":"string"}},{"name":"category","in":"path","description":"Rating category","required":true,"schema":{"type":"string","enum":["SEVERITY","OCCURRENCE","DETECTION"]}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}}}}}}},"PUT:/api/v2/evaluation/{fmeaType}":{"path":"/api/v2/evaluation/{fmeaType}","method":"PUT","operationId":"saveSnapshot_2","summary":"Save evaluation snapshot for a specific FMEA type","description":"Saves a full snapshot scoped to the requested fmeaType. The payload must follow the grouped read shape, including criteria, ratings, significance, defaultSelected, and displayed. This is a full snapshot replace within one fmeaType, so omitted criteria and rating items are deleted.","tags":["Evaluation Criteria"],"parameters":[{"name":"fmeaType","in":"path","description":"FMEA type","required":true,"schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}}],"requestBody":{"content":{"application/json":{"schema":{"required":["criteria"],"type":"object","properties":{"criteria":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"defaultSelected":{"type":"boolean"},"displayed":{"type":"boolean"},"ratings":{"type":"object","properties":{"severity":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer","format":"int32"}}}},"occurrence":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer","format":"int32"}}}},"detection":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer","format":"int32"}}}}}},"significance":{"type":"object","properties":{"rpn":{"type":"integer","format":"int32"},"s":{"type":"integer","format":"int32"},"o":{"type":"integer","format":"int32"},"d":{"type":"integer","format":"int32"},"rpnRating":{"type":"string"},"limitType":{"type":"string"}}}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fmeaType":{"type":"string"},"criteria":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"defaultSelected":{"type":"boolean"},"displayed":{"type":"boolean"},"ratings":{"type":"object","properties":{"severity":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}},"occurrence":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}},"detection":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}}}},"significance":{"type":"object","properties":{"rpn":{"type":"integer"},"s":{"type":"integer"},"o":{"type":"integer"},"d":{"type":"integer"},"rpnRating":{"type":"string"},"limitType":{"type":"string"}}}}}}}}}}}}},"GET:/api/v2/evaluation-excel/export":{"path":"/api/v2/evaluation-excel/export","method":"GET","operationId":"export_5","summary":"Export evaluation criteria to Excel","description":"Exports evaluation criteria to an XLSX file as a helper route. The main grouped snapshot-source reads are GET /api/v2/evaluation and GET /api/v2/evaluation/{fmeaType}. Supports optional FMEA type filter and keyword search on criteria name or description. Requires admin permission.","tags":["EvaluationExcel"],"parameters":[{"name":"fmeaType","in":"query","description":"FMEA type filter (e.g. stress|design|process). Required.","schema":{"type":"string"}},{"name":"q","in":"query","description":"Keyword filter for exported rows (max 100 chars)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"GET:/api/v2/excel/{uuid}":{"path":"/api/v2/excel/{uuid}","method":"GET","summary":"Parse all sheets from an uploaded Excel file","description":"Parses all sheets from a previously uploaded Excel file and returns them as a list of POISheet objects. Requires a prior file upload via POST /api/v2/files. The uuid is the file identifier returned by the upload endpoint. startRowNumber specifies which row to begin parsing (1-based). reindexFromZero resets row indices to start from 0.","tags":["Excel"],"operationId":"parseAll","x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file ID returned by the upload endpoint.","parameters":[{"name":"uuid","in":"path","description":"UUID of the uploaded Excel file (returned by POST /api/v2/files)","required":true,"schema":{"type":"string"}},{"name":"startRowNumber","in":"query","description":"Row number to start parsing from (1-based, optional)","schema":{"type":"integer","format":"int32"}},{"name":"reindexFromZero","in":"query","description":"Whether to reindex row numbers to start from 0 (default: true)","schema":{"type":"boolean","default":true}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}}}},"GET:/api/v2/excel/{uuid}/sheets/{sheetIndex}":{"path":"/api/v2/excel/{uuid}/sheets/{sheetIndex}","method":"GET","summary":"Parse a specific sheet from an uploaded Excel file","description":"Parses a single sheet from a previously uploaded Excel file by its index. Requires a prior file upload via POST /api/v2/files. The uuid is the file identifier returned by the upload endpoint. startRowNumber specifies which row to begin parsing (1-based). reindexFromZero resets row indices to start from 0.","tags":["Excel"],"operationId":"parseSheet","x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file ID returned by the upload endpoint.","parameters":[{"name":"uuid","in":"path","description":"UUID of the uploaded Excel file (returned by POST /api/v2/files)","required":true,"schema":{"type":"string"}},{"name":"sheetIndex","in":"path","description":"Zero-based index of the sheet to parse","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"startRowNumber","in":"query","description":"Row number to start parsing from (1-based, optional)","schema":{"type":"integer","format":"int32"}},{"name":"reindexFromZero","in":"query","description":"Whether to reindex row numbers to start from 0 (default: true)","schema":{"type":"boolean","default":true}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"POST:/api/v2/excel/generate":{"path":"/api/v2/excel/generate","method":"POST","summary":"Generate an Excel file from spreadsheet data","description":"Converts myspreadsheet worksheet data to an Excel (.xlsx) file. Returns a download URI (FileDownloadResponseDTO) for the generated file. Download the file using the returned URI via GET /api/v1/files/{uuid}.","tags":["Excel"],"operationId":"generate","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"worksheetName":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"width":{"type":"integer","format":"int32"},"type":{"type":"string"}}}},"rowsMeta":{"type":"object","additionalProperties":{"type":"object"}},"data":{"type":"array","items":{"type":"array","items":{"type":"object"}}},"mergeCells":{"type":"object","additionalProperties":{"type":"array","items":{"type":"integer","format":"int32"}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"downloadUri":{"type":"string"}}}}}}}},"GET:/api/v2/failure-mode-library":{"path":"/api/v2/failure-mode-library","method":"GET","operationId":"getFlat","summary":"Get failure mode library nodes (flat)","description":"Returns persisted failure mode library nodes as a flat list for admin and tooling use. The response reflects only stored rows, unlike /tree which also materializes missing ProjectType categories.","tags":["Failure Mode Library"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["ROOT","CATEGORY","GROUP","ITEM"]},"order":{"type":"integer"}}}}}}}}},"GET:/api/v2/failure-mode-library/tree":{"path":"/api/v2/failure-mode-library/tree","method":"GET","operationId":"getTree","summary":"Get failure mode library tree","description":"Returns the full tree structure of failure mode library items. Returned as a recursive children structure from ROOT down to ITEM leaf nodes. Used to display the library tree in the setup page.","tags":["Failure Mode Library"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["ROOT","CATEGORY","GROUP","ITEM"]},"order":{"type":"integer"},"children":{"type":"array","items":{"type":"object","description":"(circular: FailureModeLibraryTreeNodeDTO)"}}}}}}}}},"PUT:/api/v2/failure-mode-library/{projectType}/children":{"path":"/api/v2/failure-mode-library/{projectType}/children","method":"PUT","operationId":"saveChildren","summary":"Save failure mode library children","description":"Replaces the entire editable subtree under the requested ProjectType category. The request body contains only descendants below the resolved top-level category. Server performs full-snapshot sync by stable id: omitted nodes are deleted, retained nodes are updated and reordered by array position, and null-id nodes are created. Returns 204 when the subtree is synchronized successfully.","tags":["Failure Mode Library"],"parameters":[{"name":"projectType","in":"path","description":"Project type scope: DESIGN|PROCESS|EQUIPMENT|FA|FTA|CPLAN","required":true,"schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["children"],"properties":{"children":{"type":"array","items":{"type":"object","required":["title"],"properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"children":{"type":"array","items":{"type":"object","description":"(circular: FailureModeLibraryChildItemDTO)"}}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/failure-mode-library-excel/export":{"path":"/api/v2/failure-mode-library-excel/export","method":"GET","operationId":"export_6","summary":"Export failure mode library scope to Excel","description":"Exports the requested projectType subtree to an XLSX file and returns a download URI. Rows use fixed Group/Item columns so the same sheet can be imported back with full-snapshot semantics, including group-only rows.","tags":["Failure Mode Library Excel"],"parameters":[{"name":"projectType","in":"query","description":"Project type scope to export","schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"GET:/api/v2/failure-mode-library-excel/{projectType}/{uuid}/read":{"path":"/api/v2/failure-mode-library-excel/{projectType}/{uuid}/read","method":"GET","operationId":"readFlatPreview","summary":"Preview failure mode library scope from Excel","description":"Parses an uploaded Excel file for the requested projectType scope and returns the validated flat preview without writing to the database.","tags":["Failure Mode Library Excel"],"parameters":[{"name":"projectType","in":"path","description":"Project type scope to preview from Excel","required":true,"schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"uuid","in":"path","description":"Upload UUID","required":true,"schema":{"type":"string"}},{"name":"rowStart","in":"query","description":"Data start row (1-based, default: 2 to skip header)","schema":{"type":"integer","default":2,"format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["ROOT","CATEGORY","GROUP","ITEM"]},"order":{"type":"integer"}}}}}}}},"x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} path parameter is the uploaded Excel file identifier."},"GET:/api/v2/failure-mode-library-excel/{projectType}/{uuid}/read/tree":{"path":"/api/v2/failure-mode-library-excel/{projectType}/{uuid}/read/tree","method":"GET","operationId":"readTreePreview","summary":"Preview failure mode library scope tree from Excel","description":"Parses an uploaded Excel file for the requested projectType scope and returns the validated tree preview without writing to the database.","tags":["Failure Mode Library Excel"],"parameters":[{"name":"projectType","in":"path","description":"Project type scope to preview from Excel","required":true,"schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"uuid","in":"path","description":"Upload UUID","required":true,"schema":{"type":"string"}},{"name":"rowStart","in":"query","description":"Data start row (1-based, default: 2 to skip header)","schema":{"type":"integer","default":2,"format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["ROOT","CATEGORY","GROUP","ITEM"]},"order":{"type":"integer"},"children":{"type":"array","items":{"type":"object","description":"(circular: FailureModeLibraryTreeNodeDTO)"}}}}}}}}},"x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} path parameter is the uploaded Excel file identifier."},"POST:/api/v2/failure-mode-library-excel/{projectType}/{uuid}":{"path":"/api/v2/failure-mode-library-excel/{projectType}/{uuid}","method":"POST","operationId":"importExcel","summary":"Import failure mode library scope from Excel","description":"Parses an uploaded Excel file for the requested projectType scope, converts fixed Group/Item rows into the existing saveChildren full-snapshot request, and replaces the target subtree in one sync.","tags":["Failure Mode Library Excel"],"parameters":[{"name":"projectType","in":"path","description":"Project type scope to replace from Excel","required":true,"schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"uuid","in":"path","description":"Upload UUID","required":true,"schema":{"type":"string"}},{"name":"rowStart","in":"query","description":"Data start row (1-based, default: 2 to skip header)","schema":{"type":"integer","default":2,"format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}},"x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} path parameter is the uploaded Excel file identifier."},"PUT:/api/v2/projects/{projectId}/failure-modes/{failureModeId}/fmm-diagram":{"path":"/api/v2/projects/{projectId}/failure-modes/{failureModeId}/fmm-diagram","method":"PUT","operationId":"updateDiagram","summary":"Update FMM diagram","description":"Updates an existing FMM diagram for the target failure mode.","tags":["FMM Diagram"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"failureModeId","in":"path","description":"Failure mode ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"blockDiagramId":{"type":"string"},"fmmDiagramType":{"type":"string","enum":["UNUSED","NOT_SELECTED","TYPE_A","TYPE_C"]},"fmmBlockDiagramType":{"type":"string","enum":["FMM_FUNCTION","FMM_STRUCTURE","FMM_FUNCTION_STRUCTURE","FMM_STRUCTURE_FUNCTION","FMM_PROCESS"]},"fmeaType":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"completed":{"type":"boolean"},"objects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"clientId":{"type":"string"},"oldId":{"type":"string"},"parentId":{"type":"string"},"clientParentId":{"type":"string"},"oldParentId":{"type":"string"},"referencedId":{"type":"string"},"objectType":{"type":"string","enum":["FAILURE_MODE","EFFECT","ITEM","EXTERNAL_ITEM","GROUP","CAUSE_U","CAUSE_I","STRESS","DESIGN","PROCESS"]},"name":{"type":"string"},"order":{"type":"integer","format":"int32"},"sourceId":{"type":"string"},"highItem_unused":{"type":"string"},"processType":{"type":"string"}}}},"deletedObjectIds":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string"},"id":{"type":"string"},"target":{"type":"string","enum":["WORKSHEET_ID","FAILURE_MODE_WORKSHEET_ID","WORKSHEET_ROW_ID","BLOCK_NODE_ID","BLOCK_REFERENCED_ID","FMM_OBJECT_ID"]}}}}}}}}},"POST:/api/v2/projects/{projectId}/failure-modes/{failureModeId}/fmm-diagram":{"path":"/api/v2/projects/{projectId}/failure-modes/{failureModeId}/fmm-diagram","method":"POST","summary":"Create FMM diagram","description":"Creates an FMM diagram for the target failure mode.","tags":["FMM Diagram"],"operationId":"createDiagram","parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"failureModeId","in":"path","description":"Failure mode ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"blockDiagramId":{"type":"string"},"failureModeName":{"type":"string"},"blockName":{"type":"string"},"fmmDiagramType":{"type":"string","enum":["UNUSED","NOT_SELECTED","TYPE_A","TYPE_C"]},"objects":{"type":"array","items":{"type":"object","properties":{"type":{"type":"integer","format":"int32"},"name":{"type":"string"},"parentId":{"type":"string"},"clientId":{"type":"string"},"blockNodeId":{"type":"string"}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string"},"id":{"type":"string"},"target":{"type":"string","enum":["WORKSHEET_ID","FAILURE_MODE_WORKSHEET_ID","WORKSHEET_ROW_ID","BLOCK_NODE_ID","BLOCK_REFERENCED_ID","FMM_OBJECT_ID"]}}}}}}}}},"GET:/api/v2/projects/{projectId}/failure-modes/{failureModeId}/fmm-diagram/nodes":{"path":"/api/v2/projects/{projectId}/failure-modes/{failureModeId}/fmm-diagram/nodes","method":"GET","operationId":"getNodes_1","summary":"Get FMM diagram nodes (flat)","description":"Returns FMM diagram nodes in flat list form. Supports keyword and type filters with paging.","tags":["FMM Diagram"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"failureModeId","in":"path","description":"Failure mode ID","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Node keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}},{"name":"failureModeSearch","in":"query","description":"Failure mode keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"type","in":"query","description":"Node type exact-match filter","schema":{"type":"string","enum":["FAILURE_MODE","EFFECT","ITEM","EXTERNAL_ITEM","GROUP","CAUSE_U","CAUSE_I","STRESS","DESIGN","PROCESS"]}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 50, max: 1000)","schema":{"type":"integer","default":50,"format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"projectId":{"type":"string"},"id":{"type":"string"},"failureModeId":{"type":"string"},"parentId":{"type":"string"},"type":{"type":"string","enum":["FAILURE_MODE","EFFECT","ITEM","EXTERNAL_ITEM","GROUP","CAUSE_U","CAUSE_I","STRESS","DESIGN","PROCESS"]},"name":{"type":"string"},"highItemName_unused":{"type":"string"},"blockNodeId":{"type":"string"},"fmeaType":{"type":"string"},"order":{"type":"integer"},"sourceId":{"type":"string"},"processType":{"type":"string"},"children":{"type":"array","items":{"type":"object","description":"(circular: FMMObject)"}}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"}}}}}}}},"GET:/api/v2/projects/{projectId}/failure-modes/{failureModeId}/fmm-diagram/nodes/tree":{"path":"/api/v2/projects/{projectId}/failure-modes/{failureModeId}/fmm-diagram/nodes/tree","method":"GET","operationId":"getNodesTree_1","summary":"Get FMM diagram nodes tree","description":"Returns FMM diagram nodes in tree form. page/size are rejected when supplied.","tags":["FMM Diagram"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"failureModeId","in":"path","description":"Failure mode ID","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Node keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}},{"name":"failureModeSearch","in":"query","description":"Failure mode keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"type","in":"query","description":"Node type exact-match filter","schema":{"type":"string","enum":["FAILURE_MODE","EFFECT","ITEM","EXTERNAL_ITEM","GROUP","CAUSE_U","CAUSE_I","STRESS","DESIGN","PROCESS"]}},{"name":"page","in":"query","description":"Rejected for tree endpoint. If supplied, returns 400.","schema":{"type":"integer","format":"int32"}},{"name":"size","in":"query","description":"Rejected for tree endpoint. If supplied, returns 400.","schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"projectId":{"type":"string"},"id":{"type":"string"},"failureModeId":{"type":"string"},"parentId":{"type":"string"},"type":{"type":"string","enum":["FAILURE_MODE","EFFECT","ITEM","EXTERNAL_ITEM","GROUP","CAUSE_U","CAUSE_I","STRESS","DESIGN","PROCESS"]},"name":{"type":"string"},"highItemName_unused":{"type":"string"},"blockNodeId":{"type":"string"},"fmeaType":{"type":"string"},"order":{"type":"integer"},"sourceId":{"type":"string"},"processType":{"type":"string"},"children":{"type":"array","items":{"type":"object","description":"(circular: FMMObject)"}}}}}}}}}},"POST:/api/v2/files":{"path":"/api/v2/files","method":"POST","operationId":"upload","summary":"Upload one or more files","description":"Accepts a multipart/form-data request with one or more files in the 'files' field. Stores each file and returns a list of upload results including the assigned UUID per file. The UUID is used as a reference in subsequent import operations (e.g., POST /api/v2/projects/{projectId}/worksheet-excel/{uuid}).","tags":["Files"],"parameters":[],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"files":{"type":"array","items":{"type":"object","properties":{"contentDisposition":{"type":"object","properties":{"type":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"fileName":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"modificationDate":{"type":"string","format":"date-time"},"readDate":{"type":"string","format":"date-time"},"size":{"type":"integer","format":"int64"}}},"entity":{"type":"object"},"headers":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"mediaType":{"type":"object","properties":{"type":{"type":"string"},"subtype":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"wildcardSubtype":{"type":"boolean"},"wildcardType":{"type":"boolean"}}},"messageBodyWorkers":{"type":"object"},"parent":{"type":"object","properties":{"contentDisposition":{"type":"object","properties":{"type":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"fileName":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"modificationDate":{"type":"string","format":"date-time"},"readDate":{"type":"string","format":"date-time"},"size":{"type":"integer","format":"int64"}}},"entity":{"type":"object"},"headers":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"mediaType":{"type":"object","properties":{"type":{"type":"string"},"subtype":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"wildcardSubtype":{"type":"boolean"},"wildcardType":{"type":"boolean"}}},"messageBodyWorkers":{"type":"object"},"parent":{"type":"object"},"providers":{"type":"object"},"bodyParts":{"type":"array","items":{"type":"object","properties":{"contentDisposition":{"type":"object","properties":{"type":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"fileName":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"modificationDate":{"type":"string","format":"date-time"},"readDate":{"type":"string","format":"date-time"},"size":{"type":"integer","format":"int64"}}},"entity":{"type":"object"},"headers":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"mediaType":{"type":"object","properties":{"type":{"type":"string"},"subtype":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"wildcardSubtype":{"type":"boolean"},"wildcardType":{"type":"boolean"}}},"messageBodyWorkers":{"type":"object"},"parent":{"type":"object"},"providers":{"type":"object"},"parameterizedHeaders":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}},"parameterizedHeaders":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}}}}}}}},"providers":{"type":"object"},"name":{"type":"string"},"value":{"type":"string"},"simple":{"type":"boolean"},"formDataContentDisposition":{"type":"object","properties":{"type":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"fileName":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"modificationDate":{"type":"string","format":"date-time"},"readDate":{"type":"string","format":"date-time"},"size":{"type":"integer","format":"int64"},"name":{"type":"string"}}},"parameterizedHeaders":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"uuid":{"type":"object"},"fileName":{"type":"object"},"size":{"type":"object"}}}}}}}},"x-dependency-warning":"This endpoint is an INITIATOR. Subsequent file processing endpoints (e.g., Excel import, data analysis) require the UUID returned by this endpoint. Store the returned UUIDs and pass them to consumer endpoints that accept {uuid} path parameters."},"GET:/api/v2/fourm":{"path":"/api/v2/fourm","method":"GET","operationId":"list_8","summary":"List 4M records","description":"Returns 4M cause records for a given project. Optionally filtered by function node ID (tag) and a secondary node ID (secondTag). Returns all records when no filter is specified.","tags":["4M"],"parameters":[{"name":"projectId","in":"query","description":"Project ID to filter records","schema":{"type":"string"}},{"name":"tag","in":"query","description":"Function node ID filter (tag)","schema":{"type":"string"}},{"name":"secondTag","in":"query","description":"Secondary node ID filter (secondTag)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"projectId":{"type":"string"},"functionNodeId":{"type":"string"},"secondNodeId":{"type":"string"},"category":{"type":"string","enum":["MAN","MACHINE","MATERIAL","ENVIRONMENT"]},"workElement":{"type":"string"},"functionRequirement":{"type":"string"}}}}}}}}},"POST:/api/v2/fourm":{"path":"/api/v2/fourm","method":"POST","operationId":"create_3","summary":"Create a 4M record","description":"Creates a new 4M cause record with the provided fields. Returns the created record as a FourMDTO.","tags":["4M"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string"},"functionNodeId":{"type":"string"},"secondNodeId":{"type":"string"},"category":{"type":"string","enum":["MAN","MACHINE","MATERIAL","ENVIRONMENT"]},"workElement":{"type":"string"},"functionRequirement":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"projectId":{"type":"string"},"functionNodeId":{"type":"string"},"secondNodeId":{"type":"string"},"category":{"type":"string","enum":["MAN","MACHINE","MATERIAL","ENVIRONMENT"]},"workElement":{"type":"string"},"functionRequirement":{"type":"string"}}}}}}}},"GET:/api/v2/fourm/{id}":{"path":"/api/v2/fourm/{id}","method":"GET","operationId":"get_2","summary":"Get a 4M record by ID","description":"Returns a single 4M cause record by its numeric ID. Throws 404 if the record does not exist.","tags":["4M"],"parameters":[{"name":"id","in":"path","description":"4M record ID","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"projectId":{"type":"string"},"functionNodeId":{"type":"string"},"secondNodeId":{"type":"string"},"category":{"type":"string","enum":["MAN","MACHINE","MATERIAL","ENVIRONMENT"]},"workElement":{"type":"string"},"functionRequirement":{"type":"string"}}}}}}}},"PUT:/api/v2/fourm/{id}":{"path":"/api/v2/fourm/{id}","method":"PUT","operationId":"update_2","summary":"Update a 4M record","description":"Updates an existing 4M cause record by its numeric ID. Returns the updated record as a FourMDTO.","tags":["4M"],"parameters":[{"name":"id","in":"path","description":"4M record ID to update","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"category":{"type":"string","enum":["MAN","MACHINE","MATERIAL","ENVIRONMENT"]},"workElement":{"type":"string"},"functionRequirement":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"projectId":{"type":"string"},"functionNodeId":{"type":"string"},"secondNodeId":{"type":"string"},"category":{"type":"string","enum":["MAN","MACHINE","MATERIAL","ENVIRONMENT"]},"workElement":{"type":"string"},"functionRequirement":{"type":"string"}}}}}}}},"DELETE:/api/v2/fourm/{id}":{"path":"/api/v2/fourm/{id}","method":"DELETE","operationId":"delete_2","summary":"Delete a 4M record","description":"Deletes a 4M cause record by its numeric ID. Returns HTTP 204 No Content on success.","tags":["4M"],"parameters":[{"name":"id","in":"path","description":"4M record ID to delete","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"PUT:/api/v2/projects/{projectId}/high-items":{"path":"/api/v2/projects/{projectId}/high-items","method":"PUT","operationId":"update_5","summary":"Batch upsert and reorder high items by project","description":"Updates the project high-item list with batch upsert semantics. Existing items are matched by sequence or title, ranks are recalculated by input order, and omitted items are removed.","tags":["High Items"],"parameters":[{"name":"projectId","in":"path","description":"Project ID whose high items to update","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"topItems":{"type":"array","items":{"type":"string"}},"sequences":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/notice-excel/export":{"path":"/api/v2/notice-excel/export","method":"GET","operationId":"export_7","summary":"Export notices to Excel","description":"Exports notices to an XLSX file and returns a download URI. Supports optional visibility filter. Requires admin permission.","tags":["NoticeExcel"],"parameters":[{"name":"visible","in":"query","description":"Filter by visibility (true/false, omit for all)","schema":{"type":"boolean"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"DELETE:/api/v2/notices/{id}":{"path":"/api/v2/notices/{id}","method":"DELETE","operationId":"delete_3","summary":"Delete notice","description":"Deletes a notice by ID. Requires admin permission. Returns 404 if notice does not exist.","tags":["Notice"],"parameters":[{"name":"id","in":"path","description":"Notice ID to delete","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/notices":{"path":"/api/v2/notices","method":"GET","operationId":"list_9","summary":"List notices","description":"Returns a paged list of notices. Supports optional visibility filter. Use page=0 to retrieve all notices without paging.","tags":["Notice"],"parameters":[{"name":"page","in":"query","description":"Page number (0 = all, default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 20)","schema":{"type":"integer","default":20,"format":"int32"}},{"name":"visible","in":"query","description":"Filter by visibility (true/false, omit for all)","schema":{"type":"boolean"}},{"name":"q","in":"query","description":"Search keyword for title and content (max 100 chars)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"title":{"type":"string"},"authorName":{"type":"string"},"createdAt":{"type":"string"},"viewCount":{"type":"integer"},"visible":{"type":"boolean"}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"}}}}}}}},"GET:/api/v2/notices/{id}":{"path":"/api/v2/notices/{id}","method":"GET","operationId":"getById","summary":"Get notice details","description":"Returns the full detail of a single notice by ID. Returns 404 if the notice does not exist.","tags":["Notice"],"parameters":[{"name":"id","in":"path","description":"Notice ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"title":{"type":"string"},"content":{"type":"string"},"authorName":{"type":"string"},"createdBy":{"type":"string"},"createdAt":{"type":"string"},"viewCount":{"type":"integer"},"visible":{"type":"boolean"},"fileUrl":{"type":"string"}}}}}}}},"PATCH:/api/v2/notices/visibility":{"path":"/api/v2/notices/visibility","method":"PATCH","operationId":"updateBulkVisibility","summary":"Bulk update notice visibility","description":"Updates the visibility of multiple notices at once. Each item specifies an ID and the desired visibility. Returns 404 if any notice ID does not exist.","tags":["Notice"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"visible":{"type":"boolean"}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"PATCH:/api/v2/notices/{id}/visibility":{"path":"/api/v2/notices/{id}/visibility","method":"PATCH","operationId":"updateVisibility","summary":"Update notice visibility","description":"Updates the visibility of a single notice. Returns 404 if the notice does not exist.","tags":["Notice"],"parameters":[{"name":"id","in":"path","description":"Notice ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"visible":{"type":"boolean"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"POST:/api/v2/notices":{"path":"/api/v2/notices","method":"POST","operationId":"create_4","summary":"Create notice","description":"Creates a new notice. Requires admin permission. Title and content are required fields.","tags":["Notice"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"content":{"type":"string"},"visible":{"type":"boolean"},"fileUrl":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"title":{"type":"string"},"content":{"type":"string"},"authorName":{"type":"string"},"createdBy":{"type":"string"},"createdAt":{"type":"string"},"viewCount":{"type":"integer"},"visible":{"type":"boolean"},"fileUrl":{"type":"string"}}}}}}}},"PUT:/api/v2/notices/{id}":{"path":"/api/v2/notices/{id}","method":"PUT","operationId":"update_3","summary":"Update notice","description":"Updates an existing notice by ID. Requires admin permission. Returns 404 if notice does not exist.","tags":["Notice"],"parameters":[{"name":"id","in":"path","description":"Notice ID to update","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"content":{"type":"string"},"visible":{"type":"boolean"},"fileUrl":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"title":{"type":"string"},"content":{"type":"string"},"authorName":{"type":"string"},"createdBy":{"type":"string"},"createdAt":{"type":"string"},"viewCount":{"type":"integer"},"visible":{"type":"boolean"},"fileUrl":{"type":"string"}}}}}}}},"DELETE:/api/v2/notices/batch":{"path":"/api/v2/notices/batch","method":"DELETE","operationId":"deleteBatch","summary":"Batch delete notices","description":"Deletes multiple notices by ID list. Requires admin permission. Returns 404 if any notice ID does not exist.","tags":["Notice"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"integer","format":"int64"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/process-symbol-excel/export":{"path":"/api/v2/process-symbol-excel/export","method":"GET","operationId":"export_8","summary":"Export process symbols to Excel","description":"Exports the current process symbol JSON snapshot list to an XLSX file as a helper route. The main persisted contract remains PUT /api/v2/process-symbols.","tags":["ProcessSymbolExcel"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"POST:/api/v2/process-symbol-excel/{uuid}":{"path":"/api/v2/process-symbol-excel/{uuid}","method":"POST","operationId":"importExcel_1","summary":"Import process symbols from Excel","description":"Parses an uploaded Excel file through the Excel helper route and delegates to the same full-replace save contract as PUT /api/v2/process-symbols.","tags":["ProcessSymbolExcel"],"parameters":[{"name":"uuid","in":"path","description":"UUID of uploaded Excel file","required":true,"schema":{"type":"string"}},{"name":"rowStart","in":"query","description":"Data start row (1-based, default: 2 to skip header)","schema":{"type":"integer","default":2,"format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string"},"description":{"type":"string"},"sortOrder":{"type":"integer"}}}}}}}},"x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file identifier returned by the upload endpoint."},"GET:/api/v2/process-symbol-excel/{uuid}/read":{"path":"/api/v2/process-symbol-excel/{uuid}/read","method":"GET","operationId":"readExcel","summary":"Preview process symbols from Excel","description":"Parses an uploaded Excel file through the helper route and returns the validated process symbol list without writing to the database. Use PUT /api/v2/process-symbols for persistence.","tags":["ProcessSymbolExcel"],"parameters":[{"name":"uuid","in":"path","description":"UUID of uploaded Excel file","required":true,"schema":{"type":"string"}},{"name":"rowStart","in":"query","description":"Data start row (1-based, default: 2 to skip header)","schema":{"type":"integer","default":2,"format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string"},"description":{"type":"string"},"sortOrder":{"type":"integer"}}}}}}}},"x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file identifier returned by the upload endpoint."},"GET:/api/v2/process-symbols":{"path":"/api/v2/process-symbols","method":"GET","operationId":"getAll","summary":"List all process symbols","description":"Returns the full JSON snapshot list of process flow chart symbols ordered by sortOrder for admin configuration. Excel helper routes remain auxiliary import/export/preview tools and do not define the main persisted contract.","tags":["ProcessSymbol"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string"},"description":{"type":"string"},"sortOrder":{"type":"integer"}}}}}}}}},"PUT:/api/v2/process-symbols":{"path":"/api/v2/process-symbols","method":"PUT","operationId":"replaceAll","summary":"Replace all process symbols","description":"Treats the provided JSON snapshot list as the full replace source of truth for process flow chart symbols. Performs a full replace in a single transaction, omitted rows are deleted, and the saved list is returned. Excel helper routes remain auxiliary and ultimately map back to this same persisted contract.","tags":["ProcessSymbol"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"required":["symbol"],"type":"object","properties":{"symbol":{"type":"string"},"description":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string"},"description":{"type":"string"},"sortOrder":{"type":"integer"}}}}}}}}},"GET:/api/v2/projects":{"path":"/api/v2/projects","method":"GET","operationId":"list_10","summary":"List project summaries","description":"Returns paged project summaries. scope: 'my' (default, user's projects), 'division', 'all' (admin, all active). deleted=true returns trashed projects. Supports divisionId, search, fmeaType, status, sort, pagination.","tags":["Project"],"parameters":[{"name":"scope","in":"query","description":"Search scope (default: my)","schema":{"type":"string","enum":["MY","DIVISION","ALL"],"default":"my"}},{"name":"deleted","in":"query","description":"Deleted-only view","schema":{"type":"boolean","default":false}},{"name":"divisionId","in":"query","description":"Division ID filter (used with scope=division or scope=all)","schema":{"type":"integer","format":"int32"}},{"name":"includeRelated","in":"query","description":"Whether to include mapped related divisions when divisionId is provided","schema":{"type":"boolean"}},{"name":"q","in":"query","description":"Unified keyword (project, title, model, item)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}},{"name":"fmeaType","in":"query","description":"FMEA type filter","schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"status","in":"query","description":"Project status filter","schema":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]}},{"name":"sort","in":"query","description":"Sort format: (project|name|type|status):(asc|desc)","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 50, max: 1000)","schema":{"type":"integer","default":50,"format":"int32"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"tag":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]},"name":{"type":"string"},"item":{"type":"string"},"model":{"type":"string"},"description":{"type":"string"},"leaderName":{"type":"string"},"startDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"status":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]},"completedDate":{"type":"string","format":"date"},"updateDueDate":{"type":"string","format":"date"},"divisionName":{"type":"string"},"divisionScope":{"type":"string"},"worksheetTemplateName":{"type":"string"}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"}}}}}}}},"GET:/api/v2/projects/{projectId}":{"path":"/api/v2/projects/{projectId}","method":"GET","operationId":"get_3","summary":"Get project details","description":"Returns the full project details for the given project ID. Throws 404 if the project does not exist.","tags":["Project"],"parameters":[{"name":"projectId","in":"path","description":"Project ID to retrieve","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"tag":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]},"active":{"type":"boolean"},"projectClass":{"type":"string"},"systemFunction":{"type":"string"},"systemRequirement":{"type":"string"},"item":{"type":"string"},"model":{"type":"string"},"startDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"completedDate":{"type":"string","format":"date"},"updateDueDate":{"type":"string","format":"date"},"evaluationCriteria":{"type":"string"},"description":{"type":"string"},"members":{"type":"array","items":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"division":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}},"role":{"type":"string","enum":["LEADER","MEMBER","REVIEWER","APPROVAL","COMPLETION_REVIEWER","NONE"]}}}},"useApproval":{"type":"boolean"},"score":{"type":"integer"},"status":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]},"divisionId":{"type":"integer"},"worksheetTemplateId":{"type":"integer"}}}}}}}},"GET:/api/v2/projects/my":{"path":"/api/v2/projects/my","method":"GET","operationId":"getSummaryList","summary":"Search my projects (deprecated)","description":"Deprecated. Use GET /api/v2/projects?scope=my instead. Returns paged project summaries filtered by search, fmeaType, status, and sort.","tags":["Project"],"parameters":[{"name":"q","in":"query","description":"Unified keyword (project, title, model, item)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}},{"name":"fmeaType","in":"query","description":"FMEA type filter","schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"status","in":"query","description":"Project status filter","schema":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]}},{"name":"sort","in":"query","description":"Sort format: (project|name|type|status):(asc|desc)","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 50, max: 1000)","schema":{"type":"integer","default":50,"format":"int32"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"tag":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]},"name":{"type":"string"},"item":{"type":"string"},"model":{"type":"string"},"description":{"type":"string"},"leaderName":{"type":"string"},"startDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"status":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]},"completedDate":{"type":"string","format":"date"},"updateDueDate":{"type":"string","format":"date"},"divisionName":{"type":"string"},"divisionScope":{"type":"string"},"worksheetTemplateName":{"type":"string"}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"}}}}}}},"deprecated":true},"GET:/api/v2/projects/{projectId}/summary":{"path":"/api/v2/projects/{projectId}/summary","method":"GET","operationId":"getSummary","summary":"Get project summary","description":"Returns a lightweight summary of a project including key metrics. Throws 404 if the project does not exist.","tags":["Project"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"tag":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]},"name":{"type":"string"},"item":{"type":"string"},"model":{"type":"string"},"description":{"type":"string"},"leaderName":{"type":"string"},"startDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"status":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]},"completedDate":{"type":"string","format":"date"},"updateDueDate":{"type":"string","format":"date"},"divisionName":{"type":"string"},"divisionScope":{"type":"string"},"worksheetTemplateName":{"type":"string"}}}}}}}},"GET:/api/v2/projects/{projectId}/members":{"path":"/api/v2/projects/{projectId}/members","method":"GET","operationId":"getMembers","summary":"List project members","description":"Returns project members. When search is provided, keyword matching is applied.","tags":["Project"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Unified keyword (id, name, email, department, role)","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"division":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}},"role":{"type":"string","enum":["LEADER","MEMBER","REVIEWER","APPROVAL","COMPLETION_REVIEWER","NONE"]}}}}}}}}},"GET:/api/v2/projects/{projectId}/join-requests":{"path":"/api/v2/projects/{projectId}/join-requests","method":"GET","operationId":"getJoinRequestsByProjectId","summary":"List project join requests","description":"Returns all pending and processed join requests for a project. Requires at least MEMBER role in the project.","tags":["Project"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"requestId":{"type":"integer"},"projectId":{"type":"string"},"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"division":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["PENDING","APPROVED","REJECTED"]},"revisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"menuCode":{"type":"string","enum":["PROJECT","BLOCK","FMM","WORKSHEET","ATTACHED_FILE","WORKSHEET_UNIT","CONTROL_PLAN"]},"actionCode":{"type":"string","enum":["CREATE_PROJECT","MODIFY_PROJECT","DELETE_PROJECT","JOIN_REQUEST","JOIN_APPROVED","JOIN_REJECTED","CREATE","COPY","MODIFY","UPDATE","REVISE","DELETE"]},"projectId":{"type":"string"},"userId":{"type":"string"},"userName":{"type":"string"},"reportNo":{"type":"string"},"refId":{"type":"string"},"updatedDateTime":{"type":"string","format":"date-time"},"description":{"type":"string"},"updatingStatus":{"type":"integer"},"revisionNumber":{"type":"integer"}}}}}}}}}}}},"POST:/api/v2/projects/{projectId}/join-requests":{"path":"/api/v2/projects/{projectId}/join-requests","method":"POST","operationId":"createJoinRequest","summary":"Create a project join request","description":"Creates a join request for the authenticated user to join the specified project. Requires the user to not already be a member (NONE role). Returns the created request ID and a Location header.","tags":["Project"],"parameters":[{"name":"projectId","in":"path","description":"Target project ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"*/*":{"schema":{"type":"object","properties":{"reason":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"PUT:/api/v2/projects/{projectId}/join-requests":{"path":"/api/v2/projects/{projectId}/join-requests","method":"PUT","operationId":"updateJoinRequests","summary":"Approve or reject project join requests in batch","description":"Processes multiple join requests in a single call by approving or rejecting them. Requires at least MEMBER role in the project.","tags":["Project"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int32"},"id":{"type":"integer","format":"int32"},"accepted":{"type":"boolean"},"reason":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"PUT:/api/v2/projects/{projectId}/join-requests/{requestId}":{"path":"/api/v2/projects/{projectId}/join-requests/{requestId}","method":"PUT","operationId":"updateJoinRequest","summary":"Approve or reject a project join request","description":"Processes a single join request by approving or rejecting it. Requires at least MEMBER role in the project.","tags":["Project"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"requestId","in":"path","description":"Join request ID","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"accepted":{"type":"boolean"},"reason":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"GET:/api/v2/projects/{projectId}/high-items":{"path":"/api/v2/projects/{projectId}/high-items","method":"GET","operationId":"list_15","summary":"List high items by project","description":"Returns high items in the target project ordered by rank. Supports optional keyword search on high-item titles and is used by system-definition screens.","tags":["High Items"],"parameters":[{"name":"projectId","in":"path","description":"Project ID whose high items to list","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Keyword filter for high-item titles (optional)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"sequence":{"type":"integer"},"sortOrder":{"type":"integer"}}}}}}}}},"PATCH:/api/v2/projects/{projectId}":{"path":"/api/v2/projects/{projectId}","method":"PATCH","operationId":"patchProject","summary":"Partially update project details","description":"Applies partial updates to a project using the PATCH method. Only provided fields are updated; omitted fields remain unchanged. Returns the updated project details.","tags":["Project"],"parameters":[{"name":"projectId","in":"path","description":"Project ID to update","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"systemFunction":{"type":"string"},"systemRequirement":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"tag":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]},"active":{"type":"boolean"},"projectClass":{"type":"string"},"systemFunction":{"type":"string"},"systemRequirement":{"type":"string"},"item":{"type":"string"},"model":{"type":"string"},"startDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"completedDate":{"type":"string","format":"date"},"updateDueDate":{"type":"string","format":"date"},"evaluationCriteria":{"type":"string"},"description":{"type":"string"},"members":{"type":"array","items":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"division":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}},"role":{"type":"string","enum":["LEADER","MEMBER","REVIEWER","APPROVAL","COMPLETION_REVIEWER","NONE"]}}}},"useApproval":{"type":"boolean"},"score":{"type":"integer"},"status":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]},"divisionId":{"type":"integer"},"worksheetTemplateId":{"type":"integer"}}}}}}}},"POST:/api/v2/admin/projects/dashboard/refresh":{"path":"/api/v2/admin/projects/dashboard/refresh","method":"POST","operationId":"refreshWorksheetSnapshot","summary":"Refresh worksheet dashboard snapshots","description":"Manually refreshes worksheet dashboard snapshots. If divisionId is specified, only that division is refreshed; otherwise all cached divisions are refreshed sequentially. Divisions already being refreshed are skipped. Executes synchronously and returns the result after completion.","tags":["Admin - Dashboard"],"parameters":[{"name":"divisionId","in":"query","description":"Division ID to refresh; if omitted, all cached divisions are refreshed","schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"POST:/api/v2/projects":{"path":"/api/v2/projects","method":"POST","operationId":"createProject","summary":"Create a new project","description":"Creates a new FMEA project with the provided details. Validates name uniqueness, member existence, and date ranges. Returns the created project summary.","tags":["Project"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"required":["approverId","divisionId","dueDate","evaluationCriteria","item","leaderId","memberIds","name","reviewerIds","startDate","tag","type","worksheetTemplateId"],"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"tag":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]},"item":{"type":"string"},"model":{"type":"string"},"worksheetTemplateId":{"type":"integer","format":"int32"},"evaluationCriteria":{"type":"string"},"startDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"description":{"type":"string"},"divisionId":{"type":"integer","format":"int32"},"leaderId":{"type":"string"},"memberIds":{"type":"array","items":{"type":"string"}},"reviewerIds":{"type":"array","items":{"type":"string"}},"approverId":{"type":"string"},"completionReviewerId":{"type":"string"},"useApproval":{"type":"boolean"},"projectClass":{"type":"string"},"causeAnalysisLevel":{"type":"string","enum":["FIRST","SECOND"]},"relatedProjectIds":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"tag":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]},"name":{"type":"string"},"item":{"type":"string"},"model":{"type":"string"},"description":{"type":"string"},"leaderName":{"type":"string"},"startDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"status":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]},"completedDate":{"type":"string","format":"date"},"updateDueDate":{"type":"string","format":"date"},"divisionName":{"type":"string"},"divisionScope":{"type":"string"},"worksheetTemplateName":{"type":"string"}}}}}}}},"PUT:/api/v2/projects/{projectId}":{"path":"/api/v2/projects/{projectId}","method":"PUT","operationId":"updateProject","summary":"Update project details","description":"Updates an existing project's general information. Validates name uniqueness (excluding self), member existence, and date ranges. Returns the updated project summary.","tags":["Project"],"parameters":[{"name":"projectId","in":"path","description":"프로젝트 ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"required":["approverId","divisionId","dueDate","evaluationCriteria","item","leaderId","memberIds","name","reviewerIds","startDate","tag","type","worksheetTemplateId"],"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"tag":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]},"item":{"type":"string"},"model":{"type":"string"},"worksheetTemplateId":{"type":"integer","format":"int32"},"evaluationCriteria":{"type":"string"},"startDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"description":{"type":"string"},"divisionId":{"type":"integer","format":"int32"},"leaderId":{"type":"string"},"memberIds":{"type":"array","items":{"type":"string"}},"reviewerIds":{"type":"array","items":{"type":"string"}},"approverId":{"type":"string"},"completionReviewerId":{"type":"string"},"useApproval":{"type":"boolean"},"projectClass":{"type":"string"},"causeAnalysisLevel":{"type":"string","enum":["FIRST","SECOND"]},"relatedProjectIds":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"tag":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]},"name":{"type":"string"},"item":{"type":"string"},"model":{"type":"string"},"description":{"type":"string"},"leaderName":{"type":"string"},"startDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"status":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]},"completedDate":{"type":"string","format":"date"},"updateDueDate":{"type":"string","format":"date"},"divisionName":{"type":"string"},"divisionScope":{"type":"string"},"worksheetTemplateName":{"type":"string"}}}}}}}},"DELETE:/api/v2/projects/groups/{groupId}":{"path":"/api/v2/projects/groups/{groupId}","method":"DELETE","operationId":"deleteGroup","summary":"Delete project group","description":"Deletes every stored row for an owned project group.","tags":["Project Group"],"parameters":[{"name":"groupId","in":"path","description":"Project group ID","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/projects/groups":{"path":"/api/v2/projects/groups","method":"GET","operationId":"getGroups","summary":"List project groups","description":"Returns the authenticated user's project groups as flat DTOs. Each item contains group metadata and projectIds only. Empty-group placeholder rows are hidden from the response.","tags":["Project Group"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"sortOrder":{"type":"integer"},"projectIds":{"type":"array","items":{"type":"string"}}}}}}}}}},"PATCH:/api/v2/projects/groups/{groupId}":{"path":"/api/v2/projects/groups/{groupId}","method":"PATCH","operationId":"renameGroup","summary":"Rename project group","description":"Renames an existing project group owned by the authenticated user. The new name is applied to every stored row of the group, and duplicate names are rejected within the same user scope.","tags":["Project Group"],"parameters":[{"name":"groupId","in":"path","description":"Project group ID","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"required":["name"],"type":"object","properties":{"name":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"sortOrder":{"type":"integer"},"projectIds":{"type":"array","items":{"type":"string"}}}}}}}}},"POST:/api/v2/projects/groups":{"path":"/api/v2/projects/groups","method":"POST","operationId":"createGroup","summary":"Create project group","description":"Creates a new project group for the authenticated user. The server assigns the next sort order in the user's list and stores an empty-group placeholder row. Duplicate names are rejected within the authenticated user's scope.","tags":["Project Group"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"required":["name"],"type":"object","properties":{"name":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"sortOrder":{"type":"integer"},"projectIds":{"type":"array","items":{"type":"string"}}}}}}}}},"PUT:/api/v2/projects/groups":{"path":"/api/v2/projects/groups","method":"PUT","operationId":"batchSaveGroups","summary":"Batch save project groups","description":"Persists the authenticated user's full project-group state in one request. The submitted list is treated as the final source of truth and may create new groups, rename existing groups, replace ordering, move project memberships, normalize empty groups to placeholder rows, and delete omitted owned groups.","tags":["Project Group"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"groups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"name":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"projectIds":{"type":"array","items":{"type":"string"}}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"sortOrder":{"type":"integer"},"projectIds":{"type":"array","items":{"type":"string"}}}}}}}}}},"PUT:/api/v2/projects/groups/order":{"path":"/api/v2/projects/groups/order","method":"PUT","operationId":"reorderGroups","summary":"Reorder project groups","description":"Rewrites the authenticated user's project-group sort order. The request must contain the full owned group ID set exactly once, and the server normalizes the stored order to sequential values.","tags":["Project Group"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"required":["groupIds"],"type":"object","properties":{"groupIds":{"type":"array","items":{"type":"integer","format":"int32"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"sortOrder":{"type":"integer"},"projectIds":{"type":"array","items":{"type":"string"}}}}}}}}}},"PUT:/api/v2/projects/groups/ungrouped/projects/{projectId}":{"path":"/api/v2/projects/groups/ungrouped/projects/{projectId}","method":"PUT","operationId":"ungroupProject","summary":"Ungroup project","description":"Removes the authenticated user's grouping membership for a project. If the source group becomes empty, a placeholder row is restored.","tags":["Project Group"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"PUT:/api/v2/projects/groups/{groupId}/projects":{"path":"/api/v2/projects/groups/{groupId}/projects","method":"PUT","operationId":"assignProjects","summary":"Assign projects to group","description":"Moves accessible projects into an owned target group. Source memberships are removed in the authenticated user's scope, target placeholder rows are cleared on first assignment, and emptied source groups are restored as placeholder-only groups.","tags":["Project Group"],"parameters":[{"name":"groupId","in":"path","description":"Project group ID","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"required":["projectIds"],"type":"object","properties":{"projectIds":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"sortOrder":{"type":"integer"},"projectIds":{"type":"array","items":{"type":"string"}}}}}}}}},"GET:/api/v2/recommendation-items":{"path":"/api/v2/recommendation-items","method":"GET","operationId":"getRecommendationItems","summary":"List recommended actions","description":"Returns paged recommended actions extracted from worksheet rows. scope controls the project set, and followUpOnly is forwarded as an internal row-filter flag for downstream query handling inside that project set. projectId is optional and narrows the selected project scope when provided.","tags":["Recommendation"],"parameters":[{"name":"projectId","in":"query","description":"Project ID filter","schema":{"type":"string"}},{"name":"status","in":"query","description":"Recommended action status filter","schema":{"type":"string","enum":["NOT_COMPLETED","IN_PROGRESS","DELAY","COMPLETED","ALL"],"default":"All"}},{"name":"q","in":"query","description":"Unified keyword for recommended action fields and worksheet cell values","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}},{"name":"scope","in":"query","description":"Project scope selector (default: my)","schema":{"type":"string","enum":["MY","DIVISION","ALL"],"default":"my"}},{"name":"divisionId","in":"query","description":"Division ID filter, required when scope=division","schema":{"type":"string"}},{"name":"followUpOnly","in":"query","description":"Whether to request internal follow-up row filtering inside the selected project scope (default: false)","schema":{"type":"boolean","default":false}},{"name":"dateFrom","in":"query","description":"Target completion date lower bound, format YYYYMMDD, inclusive","schema":{"type":"string"}},{"name":"dateTo","in":"query","description":"Target completion date upper bound, format YYYYMMDD, inclusive","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 50, max: 1000)","schema":{"type":"integer","default":50,"format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"projectId":{"type":"string"},"reportNo":{"type":"string"},"fmmId":{"type":"string"},"wsId":{"type":"integer"},"status":{"type":"string","enum":["UNKNOWN","COMPLETED","IN_PROGRESS","DELAY"]}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"},"includes":{"type":"object","properties":{"columnHeaders":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"key":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"},"readOnly":{"type":"string"},"width":{"type":"integer"},"valign":{"type":"integer"},"halign":{"type":"integer"},"children":{"type":"array","items":{"type":"object","description":"(circular: ColumnHeader)"}}}}},"projects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"tag":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]},"name":{"type":"string"},"item":{"type":"string"},"model":{"type":"string"},"description":{"type":"string"},"leaderName":{"type":"string"},"startDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"status":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]},"completedDate":{"type":"string","format":"date"},"updateDueDate":{"type":"string","format":"date"},"divisionName":{"type":"string"},"divisionScope":{"type":"string"},"worksheetTemplateName":{"type":"string"}}}}}}}}}}}}},"PUT:/api/v2/recommendation-items/rows":{"path":"/api/v2/recommendation-items/rows","method":"PUT","operationId":"batchUpdateRows","summary":"Batch update recommendation row cells","description":"Upserts cell values for recommendation rows. Each row's columns must be in the editable whitelist (42-48). All updates are in a single transaction.","tags":["Recommendation"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"rowId":{"type":"integer","format":"int32"},"columns":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"value":{"type":"string"}}}}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"updatedRows":{"type":"integer"},"updatedCells":{"type":"integer"}}}}}}}},"GET:/api/v2/projects/{projectId}/revisions":{"path":"/api/v2/projects/{projectId}/revisions","method":"GET","operationId":"list_16","summary":"List project revision history","description":"Retrieves paged revision (change history) records for a project. Supports optional filtering by target (domain type), action (operation type), refId (reference ID), and reportNo (report number). Results are sorted by updated_date DESC. Edit-lock records (empty updated_date) are automatically excluded.","tags":["Revision"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"target","in":"query","description":"Domain filter (target entity type). See RevisionMenuCode for allowed values.","schema":{"type":"string"}},{"name":"refId","in":"query","description":"Reference ID (FMM ID, block ID, etc.)","schema":{"type":"string"}},{"name":"reportNo","in":"query","description":"Worksheet report number","schema":{"type":"string"}},{"name":"action","in":"query","description":"Action type filter. See RevisionActionCode for allowed values.","schema":{"type":"string"}},{"name":"q","in":"query","description":"Search keyword for revision description (comma-separated OR)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Expand search with synonym dictionary (default: true)","schema":{"type":"boolean","default":true}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (1-1000, default: 50)","schema":{"type":"integer","default":50,"format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"menuCode":{"type":"string","enum":["PROJECT","BLOCK","FMM","WORKSHEET","ATTACHED_FILE","WORKSHEET_UNIT","CONTROL_PLAN"]},"actionCode":{"type":"string","enum":["CREATE_PROJECT","MODIFY_PROJECT","DELETE_PROJECT","JOIN_REQUEST","JOIN_APPROVED","JOIN_REJECTED","CREATE","COPY","MODIFY","UPDATE","REVISE","DELETE"]},"projectId":{"type":"string"},"userId":{"type":"string"},"userName":{"type":"string"},"reportNo":{"type":"string"},"refId":{"type":"string"},"updatedDateTime":{"type":"string","format":"date-time"},"description":{"type":"string"},"updatingStatus":{"type":"integer"},"revisionNumber":{"type":"integer"}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"}}}}}}}},"GET:/api/v2/scoring/criteria/tree":{"path":"/api/v2/scoring/criteria/tree","method":"GET","operationId":"getTree_1","summary":"Get scoring criteria tree","description":"Returns the full scoring criteria tree from root to leaf values. Includes scorePercent for s_Part nodes. Used to display the complete criteria hierarchy for completeness evaluation.","tags":["Scoring Criteria"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["SCORING_TYPE","S_PART","S_SCORING","S_VALUE"]},"score":{"type":"integer"},"scorePercent":{"type":"integer"},"children":{"type":"array","items":{"type":"object","description":"(circular: ScoringCriteriaTreeNodeDTO)"}}}}}}}}},"GET:/api/v2/scoring/criteria/{id}":{"path":"/api/v2/scoring/criteria/{id}","method":"GET","operationId":"getItem","summary":"Get scoring criteria item","description":"Helper read that returns a single scoring criteria item by ID. The main admin snapshot source read is GET /api/v2/scoring/criteria/tree. Returns 404 if the item does not exist.","tags":["Scoring Criteria"],"parameters":[{"name":"id","in":"path","description":"Unique ID of the scoring criteria item","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["SCORING_TYPE","S_PART","S_SCORING","S_VALUE"]},"depth":{"type":"integer"},"score":{"type":"integer"},"scorePercent":{"type":"integer"}}}}}}}},"GET:/api/v2/scoring/criteria/{id}/breadcrumb":{"path":"/api/v2/scoring/criteria/{id}/breadcrumb","method":"GET","operationId":"getBreadcrumb","summary":"Get breadcrumb path for scoring criteria item","description":"Helper read that returns the breadcrumb path from root to the specified item. Useful for navigation to show where an item sits in the hierarchy. The main admin snapshot source read is GET /api/v2/scoring/criteria/tree.","tags":["Scoring Criteria"],"parameters":[{"name":"id","in":"path","description":"ID of the scoring criteria item to get the breadcrumb path for","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["SCORING_TYPE","S_PART","S_SCORING","S_VALUE"]},"depth":{"type":"integer"},"score":{"type":"integer"},"scorePercent":{"type":"integer"}}}}}}}}},"GET:/api/v2/scoring/criteria/{id}/children":{"path":"/api/v2/scoring/criteria/{id}/children","method":"GET","operationId":"getChildren","summary":"Get children of scoring criteria item","description":"Helper read that returns the direct children of the specified scoring criteria item. Results are sorted by score descending. The main admin snapshot source read is GET /api/v2/scoring/criteria/tree.","tags":["Scoring Criteria"],"parameters":[{"name":"id","in":"path","description":"ID of the parent scoring criteria item","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["SCORING_TYPE","S_PART","S_SCORING","S_VALUE"]},"depth":{"type":"integer"},"score":{"type":"integer"},"scorePercent":{"type":"integer"}}}}}}}}},"PUT:/api/v2/scoring/criteria/tree":{"path":"/api/v2/scoring/criteria/tree","method":"PUT","operationId":"saveTreeSnapshot","summary":"Save scoring criteria tree snapshot","description":"Saves the entire scoring criteria tree as one snapshot. The request is rooted at the scoring tree root and includes title, description, score, type, and ordered children. Omitted nodes are deleted with their subtrees, and sibling order is persisted by tree array position.","tags":["Scoring Criteria"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["SCORING_TYPE","S_PART","S_SCORING","S_VALUE"]},"score":{"type":"integer","format":"int32"},"children":{"type":"array","items":{"type":"object","description":"(circular: ScoringCriteriaTreeSnapshotSaveRequest)"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["SCORING_TYPE","S_PART","S_SCORING","S_VALUE"]},"score":{"type":"integer"},"scorePercent":{"type":"integer"},"children":{"type":"array","items":{"type":"object","description":"(circular: ScoringCriteriaTreeNodeDTO)"}}}}}}}}},"GET:/api/v2/search/failure-modes":{"path":"/api/v2/search/failure-modes","method":"GET","operationId":"searchFailureModes","summary":"Search failure modes globally","description":"Searches failure modes across all projects in the system. Supports keyword search (q, optional, comma-separated with synonym expansion), project-level filters (projectId, projectName, fmeaType, status), and sorting (sort=name,asc or sort=rpn,desc). Returns paged results with project summary information and S/O/D cause data.","tags":["Search"],"parameters":[{"name":"q","in":"query","description":"Search keyword for failure mode names (optional, max 100 characters, comma-separated OR search with synonym expansion)","schema":{"type":"string"}},{"name":"scope","in":"query","description":"Search scope (default: my)","schema":{"type":"string","enum":["MY","DIVISION","ALL"],"default":"my"}},{"name":"divisionId","in":"query","description":"Division ID (required when scope='division')","schema":{"type":"string"}},{"name":"projectName","in":"query","description":"Project name filter (partial match)","schema":{"type":"string"}},{"name":"fmeaType","in":"query","description":"FMEA type filter","schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"status","in":"query","description":"Project status filter","schema":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]}},{"name":"sort","in":"query","description":"Sort: 'name,asc', 'name,desc', 'rpn,asc', 'rpn,desc'. Default: name,asc","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 50, max: 1000)","schema":{"type":"integer","default":50,"format":"int32"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}},{"name":"projectId","in":"query","description":"Project ID filter (repeatable for multiple projects)","schema":{"type":"array","items":{"type":"string"}}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"blockDiagramId":{"type":"string"},"blockType":{"type":"string","enum":["FMM_FUNCTION","FMM_STRUCTURE","FMM_FUNCTION_STRUCTURE","FMM_STRUCTURE_FUNCTION","FMM_PROCESS"]},"blockNodeId":{"type":"string"},"referencedBlockNodeId":{"type":"string"},"fmmDiagramType":{"type":"string","enum":["UNUSED"]},"complete":{"type":"string"},"project":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"leader":{"type":"string"},"divisionName":{"type":"string"}}},"maxSeverity":{"type":"integer"},"maxRpn":{"type":"integer"},"causes":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"severity":{"type":"integer"},"occurrence":{"type":"integer"},"detection":{"type":"integer"},"rpn":{"type":"integer"},"severityAfter":{"type":"integer"},"occurrenceAfter":{"type":"integer"},"detectionAfter":{"type":"integer"},"rpnAfter":{"type":"integer"}}}}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"}}}}}}}},"GET:/api/v2/search/projects":{"path":"/api/v2/search/projects","method":"GET","operationId":"searchProjects","summary":"Search projects globally","description":"Searches projects across the system with multiple filter options. Supports keyword search (q), scope filtering (my/division/all), FMEA type, status, date ranges, additional info filters, and more. When 'groupBy' is specified, returns grouped results instead of paged results. Additional info filters use repeated parameters (aiId, aiKeyword) for AND intersection.","tags":["Search"],"parameters":[{"name":"q","in":"query","description":"Search keyword for project title, item, model, or description (max 100 characters)","schema":{"type":"string"}},{"name":"scope","in":"query","description":"Search scope (default: my)","schema":{"type":"string","enum":["MY","DIVISION","ALL"],"default":"my"}},{"name":"divisionId","in":"query","description":"Division ID (required when scope='division')","schema":{"type":"string"}},{"name":"leader","in":"query","description":"Leader name filter (partial match)","schema":{"type":"string"}},{"name":"fmeaType","in":"query","description":"FMEA type filter","schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"status","in":"query","description":"Project status filter","schema":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]}},{"name":"tag","in":"query","description":"Project tag filter","schema":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]}},{"name":"item","in":"query","description":"Item/kind filter (partial match)","schema":{"type":"string"}},{"name":"model","in":"query","description":"Model/project number filter (partial match)","schema":{"type":"string"}},{"name":"dueDateFrom","in":"query","description":"Due date range start (YYYYMMDD format)","schema":{"type":"string"}},{"name":"dueDateTo","in":"query","description":"Due date range end (YYYYMMDD format)","schema":{"type":"string"}},{"name":"completedDateFrom","in":"query","description":"Completed date range start (YYYYMMDD format)","schema":{"type":"string"}},{"name":"completedDateTo","in":"query","description":"Completed date range end (YYYYMMDD format)","schema":{"type":"string"}},{"name":"worksheetTemplateId","in":"query","description":"Worksheet template ID filter (exact match)","schema":{"type":"string"}},{"name":"evaluationCriteria","in":"query","description":"Evaluation criteria filter (exact match)","schema":{"type":"string"}},{"name":"description","in":"query","description":"Description filter (partial match)","schema":{"type":"string"}},{"name":"groupBy","in":"query","description":"Group by field. When specified, returns grouped response without paging.","schema":{"type":"string","enum":["DIVISION","ITEM"]}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 50, max: 1000)","schema":{"type":"integer","default":50,"format":"int32"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}},{"name":"sort","in":"query","description":"Sort field (default: project ID desc)","schema":{"type":"string"}},{"name":"aiId","in":"query","description":"Additional info ID list (repeated parameter for AND intersection)","schema":{"type":"array","items":{"type":"string"}}},{"name":"aiKeyword","in":"query","description":"Additional info keyword list (paired with aiId)","schema":{"type":"array","items":{"type":"string"}}},{"name":"aiStartDate","in":"query","description":"Additional info start date list (paired with aiId, YYYYMMDD format)","schema":{"type":"array","items":{"type":"string"}}},{"name":"aiEndDate","in":"query","description":"Additional info end date list (paired with aiId, YYYYMMDD format)","schema":{"type":"array","items":{"type":"string"}}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"groups":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"projectCount":{"type":"integer"},"projects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"tag":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]},"item":{"type":"string"},"model":{"type":"string"},"description":{"type":"string"},"leaderName":{"type":"string"},"startDate":{"type":"string"},"dueDate":{"type":"string"},"completedDate":{"type":"string"},"status":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED"]},"divisionId":{"type":"string"},"divisionName":{"type":"string"},"worksheetTemplateName":{"type":"string"},"evaluationCriteria":{"type":"string"},"projectClass":{"type":"string"}}}}}}},"totalGroups":{"type":"integer"},"totalProjects":{"type":"integer"}}}}}}}},"GET:/api/v2/search/projects/export":{"path":"/api/v2/search/projects/export","method":"GET","operationId":"exportProjects","summary":"Export project search results as Excel","description":"Exports project search results as an Excel (.xlsx) file. Returns a download URI (FileDownloadResponseDTO) for the generated file. Supports the same filter parameters as the search endpoint (excluding groupBy, page, size). Download the file using the returned URI via GET /api/v1/files/{uuid}.","tags":["Search"],"parameters":[{"name":"q","in":"query","description":"Search keyword for project title, item, model, or description (max 100 characters)","schema":{"type":"string"}},{"name":"scope","in":"query","description":"Search scope (default: my)","schema":{"type":"string","enum":["MY","DIVISION","ALL"],"default":"my"}},{"name":"divisionId","in":"query","description":"Division ID (required when scope='division')","schema":{"type":"string"}},{"name":"leader","in":"query","description":"Leader name filter (partial match)","schema":{"type":"string"}},{"name":"fmeaType","in":"query","description":"FMEA type filter","schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"status","in":"query","description":"Project status filter","schema":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]}},{"name":"tag","in":"query","description":"Project tag filter","schema":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]}},{"name":"item","in":"query","description":"Item/kind filter (partial match)","schema":{"type":"string"}},{"name":"model","in":"query","description":"Model/project number filter (partial match)","schema":{"type":"string"}},{"name":"dueDateFrom","in":"query","description":"Due date range start (YYYYMMDD)","schema":{"type":"string"}},{"name":"dueDateTo","in":"query","description":"Due date range end (YYYYMMDD)","schema":{"type":"string"}},{"name":"completedDateFrom","in":"query","description":"Completed date range start (YYYYMMDD)","schema":{"type":"string"}},{"name":"completedDateTo","in":"query","description":"Completed date range end (YYYYMMDD)","schema":{"type":"string"}},{"name":"worksheetTemplateId","in":"query","description":"Worksheet template ID filter","schema":{"type":"string"}},{"name":"evaluationCriteria","in":"query","description":"Evaluation criteria filter","schema":{"type":"string"}},{"name":"description","in":"query","description":"Description filter (partial match)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}},{"name":"aiId","in":"query","description":"Additional info ID list (repeated for AND intersection)","schema":{"type":"array","items":{"type":"string"}}},{"name":"aiKeyword","in":"query","description":"Additional info keyword list (paired with aiId)","schema":{"type":"array","items":{"type":"string"}}},{"name":"aiStartDate","in":"query","description":"Additional info start date list (YYYYMMDD)","schema":{"type":"array","items":{"type":"string"}}},{"name":"aiEndDate","in":"query","description":"Additional info end date list (YYYYMMDD)","schema":{"type":"array","items":{"type":"string"}}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"downloadUri":{"type":"string"}}}}}}}},"GET:/api/v2/synonym-excel/export":{"path":"/api/v2/synonym-excel/export","method":"GET","operationId":"export_9","summary":"Export synonyms to Excel","description":"This helper route exports the current synonym snapshot to XLSX and returns a download URI. The main JSON snapshot source and save routes are GET /api/v2/synonyms and PUT /api/v2/synonyms.","tags":["SynonymExcel"],"parameters":[{"name":"q","in":"query","description":"Optional synonym keyword filter for exported rows","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"downloadUri":{"type":"string"}}}}}}}},"POST:/api/v2/synonym-excel/{uuid}":{"path":"/api/v2/synonym-excel/{uuid}","method":"POST","operationId":"importExcel_2","summary":"Import synonyms from Excel","description":"This helper route parses an uploaded Excel file referenced by uuid and imports synonym groups using the requested row and column range. The main JSON save route remains PUT /api/v2/synonyms.","tags":["SynonymExcel"],"parameters":[{"name":"uuid","in":"path","description":"Uploaded file UUID","required":true,"schema":{"type":"string"}},{"name":"rowStart","in":"query","description":"Data start row (1-based, default: 2 to skip export header)","schema":{"type":"integer","default":2,"format":"int32"}},{"name":"columnStart","in":"query","description":"Start column (1-based, default: 1)","schema":{"type":"integer","format":"int32"}},{"name":"columnEnd","in":"query","description":"End column (1-based, required)","schema":{"type":"integer","format":"int32"}},{"name":"merge","in":"query","description":"Merge rows into matched groups (default: false)","schema":{"type":"boolean"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}},"x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file identifier returned by the upload endpoint."},"GET:/api/v2/synonym-excel/{uuid}/read":{"path":"/api/v2/synonym-excel/{uuid}/read","method":"GET","operationId":"readExcel_1","summary":"Preview synonym import from Excel","description":"This helper route parses an uploaded Excel file referenced by uuid and returns the validated synonym groups that would be created or updated by import without writing to the database. The main JSON snapshot source and save routes remain GET /api/v2/synonyms and PUT /api/v2/synonyms.","tags":["SynonymExcel"],"parameters":[{"name":"uuid","in":"path","description":"Uploaded file UUID","required":true,"schema":{"type":"string"}},{"name":"rowStart","in":"query","description":"Data start row (1-based, default: 2 to skip export header)","schema":{"type":"integer","default":2,"format":"int32"}},{"name":"columnStart","in":"query","description":"Start column (1-based, default: 1)","schema":{"type":"integer","format":"int32"}},{"name":"columnEnd","in":"query","description":"End column (1-based, required)","schema":{"type":"integer","format":"int32"}},{"name":"merge","in":"query","description":"Merge rows into matched groups (default: false)","schema":{"type":"boolean"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"terms":{"type":"array","items":{"type":"string"}},"termCount":{"type":"integer"}}}}}}}},"x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file identifier returned by the upload endpoint."},"GET:/api/v2/synonyms":{"path":"/api/v2/synonyms","method":"GET","operationId":"list_11","summary":"List synonym snapshot groups","description":"Returns the full synonym group list as the JSON snapshot source for the admin toolbar. Optional q filtering is still available, but the response remains a full-list array response.","tags":["Synonym"],"parameters":[{"name":"q","in":"query","description":"Synonym keyword filter","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"terms":{"type":"array","items":{"type":"string"}},"termCount":{"type":"integer"}}},"properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"terms":{"type":"array","items":{"type":"string"}},"termCount":{"type":"integer"}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"}}}}}}}},"GET:/api/v2/synonyms/expand":{"path":"/api/v2/synonyms/expand","method":"GET","operationId":"expand","summary":"Expand synonym terms","description":"This helper read expands a keyword into matching synonym terms. It is separate from the main GET /api/v2/synonyms snapshot source used by the admin toolbar.","tags":["Synonym"],"parameters":[{"name":"keyword","in":"query","description":"Keyword to expand into matching synonym terms","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}}}},"GET:/api/v2/synonyms/metadata":{"path":"/api/v2/synonyms/metadata","method":"GET","operationId":"metadata","summary":"Get synonym metadata","description":"This helper read returns synonym dictionary metadata such as group count and max term count. It is separate from the main GET /api/v2/synonyms snapshot source.","tags":["Synonym"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"maxTermCount":{"type":"integer"},"groupCount":{"type":"integer"}}}}}}}},"GET:/api/v2/synonyms/{groupId}":{"path":"/api/v2/synonyms/{groupId}","method":"GET","operationId":"get_4","summary":"Get synonym group","description":"This helper read returns a single synonym group with its ordered term list. The main admin snapshot source remains GET /api/v2/synonyms.","tags":["Synonym"],"parameters":[{"name":"groupId","in":"path","description":"Synonym group ID to retrieve","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"terms":{"type":"array","items":{"type":"string"}},"termCount":{"type":"integer"}}}}}}}},"PUT:/api/v2/synonyms":{"path":"/api/v2/synonyms","method":"PUT","operationId":"saveSnapshot_3","summary":"Save synonym snapshot","description":"Saves the full snapshot from the admin toolbar and returns the latest full list. This is the main JSON save path, omitted groups are deleted, and Excel helper routes remain secondary helpers.","tags":["Synonym"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"required":["groups"],"type":"object","properties":{"groups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"terms":{"type":"array","items":{"type":"string"}}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"terms":{"type":"array","items":{"type":"string"}},"termCount":{"type":"integer"}}}}}}}}},"GET:/api/v2/open/metrics/{apType}/constants":{"path":"/api/v2/open/metrics/{apType}/constants","method":"GET","summary":"Get metric constants for an AP type","description":"Returns severity, occurrence, and detection metric constants for the given action priority type (AIAG or MSR). Used to populate evaluation criteria dropdowns and compute RPN values. This endpoint is open and does not require authentication.","tags":["Metrics"],"operationId":"getMetricConstants","parameters":[{"name":"apType","in":"path","description":"Action priority type","required":true,"schema":{"type":"string","enum":["AIAG","MSR"]}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"GET:/api/v2/system/context-version":{"path":"/api/v2/system/context-version","method":"GET","summary":"Get version info for a deployed web application context","description":"Reads the VERSION file from the given Tomcat webapp sub-path and returns the version string and build date. Returns 400 if contextPath is missing, 404 if the VERSION file does not exist or is unreadable.","tags":["System"],"operationId":"checkContext","parameters":[{"name":"contextPath","in":"query","description":"Tomcat webapp sub-path to read the VERSION file from (e.g. 'fmea-frontend'). Leading slashes are stripped.","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/system/health":{"path":"/api/v2/system/health","method":"GET","summary":"Health check","description":"Returns the current server status and UTC timestamp. Always returns HTTP 200 with status='UP' when the application is running. No authentication required.","tags":["System"],"operationId":"health","parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/system/settings":{"path":"/api/v2/system/settings","method":"GET","operationId":"getSettings","summary":"Get system settings","description":"Returns all system settings grouped into 13 categories. Requires admin permission. Mail password is always excluded from the response.","tags":["System Settings"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"company":{"type":"object","properties":{"name":{"type":"string"}}},"scoring":{"type":"object","properties":{"enabled":{"type":"boolean"},"threshold":{"type":"integer"},"alwaysEnabled":{"type":"boolean"}}},"projectPeriod":{"type":"object","properties":{"createMaxDurationDays":{"type":"integer"},"modifyMaxDurationDays":{"type":"integer"}}},"fmCheckprint":{"type":"object","properties":{"enabled":{"type":"boolean"},"designEnabled":{"type":"boolean"},"processEnabled":{"type":"boolean"},"equipmentEnabled":{"type":"boolean"}}},"fmmDisplay":{"type":"object","properties":{"showCreationInfo":{"type":"boolean"},"highlightNewFailureModes":{"type":"boolean"},"useBfmmType":{"type":"boolean"}}},"security":{"type":"object","properties":{"forcePasswordChangeOnFirstLogin":{"type":"boolean"},"enforcePasswordComplexity":{"type":"boolean"},"restrictCommonSequences":{"type":"boolean"},"preventPasswordReuse":{"type":"boolean"},"enforcePasswordExpiration":{"type":"boolean"},"passwordExpirationDays":{"type":"integer"},"maxLoginFailures":{"type":"integer"}}},"mail":{"type":"object","properties":{"enabled":{"type":"boolean"},"host":{"type":"string"},"port":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"},"senderAddress":{"type":"string"},"rpnThreshold":{"type":"integer"}}},"serverUrl":{"type":"object","properties":{"protocol":{"type":"string"},"host":{"type":"string"}}},"projectManagement":{"type":"object","properties":{"defaultApprovalOnCompletion":{"type":"boolean"},"restrictEditAfterApproval":{"type":"boolean"}}},"validationApproval":{"type":"object","properties":{"enabled":{"type":"boolean"},"checkEmptyRecommendedAction":{"type":"boolean"},"checkEmptyDetectionAction":{"type":"boolean"},"notifyFollowUpAssignees":{"type":"boolean"},"checkRpnThreshold":{"type":"boolean"},"checkUnresolvedHighItems":{"type":"boolean"}}},"revisionEditing":{"type":"object","properties":{"enabled":{"type":"boolean"},"allowRevisionNumberEdit":{"type":"boolean"},"allowRevisionDateEdit":{"type":"boolean"},"allowRevisionReasonEdit":{"type":"boolean"}}},"reviewer":{"type":"object","properties":{"checkReviewerEnabled":{"type":"boolean"}}},"blankText":{"type":"object","properties":{"texts":{"type":"array","items":{"type":"string"}}}}}}}}}}},"PUT:/api/v2/system/settings":{"path":"/api/v2/system/settings","method":"PUT","operationId":"updateSettings","summary":"Update system settings","description":"Updates system settings with partial merge at group level. Only groups included in the request body are updated. Null groups are skipped. Mail password null means keep existing value. Returns the complete settings after update.","tags":["System Settings"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"company":{"type":"object","properties":{"name":{"type":"string"}}},"scoring":{"type":"object","properties":{"enabled":{"type":"boolean"},"threshold":{"type":"integer","format":"int32"},"alwaysEnabled":{"type":"boolean"}}},"projectPeriod":{"type":"object","properties":{"createMaxDurationDays":{"type":"integer","format":"int32"},"modifyMaxDurationDays":{"type":"integer","format":"int32"}}},"fmCheckprint":{"type":"object","properties":{"enabled":{"type":"boolean"},"designEnabled":{"type":"boolean"},"processEnabled":{"type":"boolean"},"equipmentEnabled":{"type":"boolean"}}},"fmmDisplay":{"type":"object","properties":{"showCreationInfo":{"type":"boolean"},"highlightNewFailureModes":{"type":"boolean"},"useBfmmType":{"type":"boolean"}}},"security":{"type":"object","properties":{"forcePasswordChangeOnFirstLogin":{"type":"boolean"},"enforcePasswordComplexity":{"type":"boolean"},"restrictCommonSequences":{"type":"boolean"},"preventPasswordReuse":{"type":"boolean"},"enforcePasswordExpiration":{"type":"boolean"},"passwordExpirationDays":{"type":"integer","format":"int32"},"maxLoginFailures":{"type":"integer","format":"int32"}}},"mail":{"type":"object","properties":{"enabled":{"type":"boolean"},"host":{"type":"string"},"port":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"},"senderAddress":{"type":"string"},"rpnThreshold":{"type":"integer","format":"int32"}}},"serverUrl":{"type":"object","properties":{"protocol":{"type":"string"},"host":{"type":"string"}}},"projectManagement":{"type":"object","properties":{"defaultApprovalOnCompletion":{"type":"boolean"},"restrictEditAfterApproval":{"type":"boolean"}}},"validationApproval":{"type":"object","properties":{"enabled":{"type":"boolean"},"checkEmptyRecommendedAction":{"type":"boolean"},"checkEmptyDetectionAction":{"type":"boolean"},"notifyFollowUpAssignees":{"type":"boolean"},"checkRpnThreshold":{"type":"boolean"},"checkUnresolvedHighItems":{"type":"boolean"}}},"revisionEditing":{"type":"object","properties":{"enabled":{"type":"boolean"},"allowRevisionNumberEdit":{"type":"boolean"},"allowRevisionDateEdit":{"type":"boolean"},"allowRevisionReasonEdit":{"type":"boolean"}}},"reviewer":{"type":"object","properties":{"checkReviewerEnabled":{"type":"boolean"}}},"blankText":{"type":"object","properties":{"texts":{"type":"array","items":{"type":"string"}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"company":{"type":"object","properties":{"name":{"type":"string"}}},"scoring":{"type":"object","properties":{"enabled":{"type":"boolean"},"threshold":{"type":"integer"},"alwaysEnabled":{"type":"boolean"}}},"projectPeriod":{"type":"object","properties":{"createMaxDurationDays":{"type":"integer"},"modifyMaxDurationDays":{"type":"integer"}}},"fmCheckprint":{"type":"object","properties":{"enabled":{"type":"boolean"},"designEnabled":{"type":"boolean"},"processEnabled":{"type":"boolean"},"equipmentEnabled":{"type":"boolean"}}},"fmmDisplay":{"type":"object","properties":{"showCreationInfo":{"type":"boolean"},"highlightNewFailureModes":{"type":"boolean"},"useBfmmType":{"type":"boolean"}}},"security":{"type":"object","properties":{"forcePasswordChangeOnFirstLogin":{"type":"boolean"},"enforcePasswordComplexity":{"type":"boolean"},"restrictCommonSequences":{"type":"boolean"},"preventPasswordReuse":{"type":"boolean"},"enforcePasswordExpiration":{"type":"boolean"},"passwordExpirationDays":{"type":"integer"},"maxLoginFailures":{"type":"integer"}}},"mail":{"type":"object","properties":{"enabled":{"type":"boolean"},"host":{"type":"string"},"port":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"},"senderAddress":{"type":"string"},"rpnThreshold":{"type":"integer"}}},"serverUrl":{"type":"object","properties":{"protocol":{"type":"string"},"host":{"type":"string"}}},"projectManagement":{"type":"object","properties":{"defaultApprovalOnCompletion":{"type":"boolean"},"restrictEditAfterApproval":{"type":"boolean"}}},"validationApproval":{"type":"object","properties":{"enabled":{"type":"boolean"},"checkEmptyRecommendedAction":{"type":"boolean"},"checkEmptyDetectionAction":{"type":"boolean"},"notifyFollowUpAssignees":{"type":"boolean"},"checkRpnThreshold":{"type":"boolean"},"checkUnresolvedHighItems":{"type":"boolean"}}},"revisionEditing":{"type":"object","properties":{"enabled":{"type":"boolean"},"allowRevisionNumberEdit":{"type":"boolean"},"allowRevisionDateEdit":{"type":"boolean"},"allowRevisionReasonEdit":{"type":"boolean"}}},"reviewer":{"type":"object","properties":{"checkReviewerEnabled":{"type":"boolean"}}},"blankText":{"type":"object","properties":{"texts":{"type":"array","items":{"type":"string"}}}}}}}}}}},"GET:/api/v2/system/settings/public":{"path":"/api/v2/system/settings/public","method":"GET","operationId":"getPublicSettings","summary":"Get public system settings","description":"Returns system settings visible to all users. Excludes sensitive groups: security, mail, serverUrl.","tags":["System Settings"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"company":{"type":"object","properties":{"name":{"type":"string"}}},"scoring":{"type":"object","properties":{"enabled":{"type":"boolean"},"threshold":{"type":"integer"},"alwaysEnabled":{"type":"boolean"}}},"projectPeriod":{"type":"object","properties":{"createMaxDurationDays":{"type":"integer"},"modifyMaxDurationDays":{"type":"integer"}}},"fmCheckprint":{"type":"object","properties":{"enabled":{"type":"boolean"},"designEnabled":{"type":"boolean"},"processEnabled":{"type":"boolean"},"equipmentEnabled":{"type":"boolean"}}},"fmmDisplay":{"type":"object","properties":{"showCreationInfo":{"type":"boolean"},"highlightNewFailureModes":{"type":"boolean"},"useBfmmType":{"type":"boolean"}}},"security":{"type":"object","properties":{"forcePasswordChangeOnFirstLogin":{"type":"boolean"},"enforcePasswordComplexity":{"type":"boolean"},"restrictCommonSequences":{"type":"boolean"},"preventPasswordReuse":{"type":"boolean"},"enforcePasswordExpiration":{"type":"boolean"},"passwordExpirationDays":{"type":"integer"},"maxLoginFailures":{"type":"integer"}}},"mail":{"type":"object","properties":{"enabled":{"type":"boolean"},"host":{"type":"string"},"port":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"},"senderAddress":{"type":"string"},"rpnThreshold":{"type":"integer"}}},"serverUrl":{"type":"object","properties":{"protocol":{"type":"string"},"host":{"type":"string"}}},"projectManagement":{"type":"object","properties":{"defaultApprovalOnCompletion":{"type":"boolean"},"restrictEditAfterApproval":{"type":"boolean"}}},"validationApproval":{"type":"object","properties":{"enabled":{"type":"boolean"},"checkEmptyRecommendedAction":{"type":"boolean"},"checkEmptyDetectionAction":{"type":"boolean"},"notifyFollowUpAssignees":{"type":"boolean"},"checkRpnThreshold":{"type":"boolean"},"checkUnresolvedHighItems":{"type":"boolean"}}},"revisionEditing":{"type":"object","properties":{"enabled":{"type":"boolean"},"allowRevisionNumberEdit":{"type":"boolean"},"allowRevisionDateEdit":{"type":"boolean"},"allowRevisionReasonEdit":{"type":"boolean"}}},"reviewer":{"type":"object","properties":{"checkReviewerEnabled":{"type":"boolean"}}},"blankText":{"type":"object","properties":{"texts":{"type":"array","items":{"type":"string"}}}}}}}}}}},"GET:/api/v2/projects/{projectId}/system-definition/conditions":{"path":"/api/v2/projects/{projectId}/system-definition/conditions","method":"GET","operationId":"listConditions","summary":"List system definition conditions","description":"Returns system definition conditions in the target project by scope and type. Optional filters apply to search, division, project title, model, and item.","tags":["System Definition"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"scope","in":"query","description":"Condition scope filter. If omitted, defaults to all.","schema":{"type":"string","enum":["OWNED","CANDIDATE","ALL"],"default":"all"}},{"name":"type","in":"query","description":"Condition type filter. If omitted, returns all types.","schema":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]}},{"name":"q","in":"query","description":"Condition keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}},{"name":"divisionId","in":"query","description":"Division filter for candidate scope (must be > 0)","schema":{"type":"integer","format":"int32"}},{"name":"projectTitle","in":"query","description":"Project title filter for candidate scope","schema":{"type":"string"}},{"name":"model","in":"query","description":"Model filter for candidate scope","schema":{"type":"string"}},{"name":"item","in":"query","description":"Item filter for candidate scope","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"sequence":{"type":"integer"},"type":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]},"scope":{"type":"string","enum":["OWNED","CANDIDATE","ALL"]},"title":{"type":"string"}}}}}}}}},"PUT:/api/v2/projects/{projectId}/system-definition/summary":{"path":"/api/v2/projects/{projectId}/system-definition/summary","method":"PUT","operationId":"updateSummary","summary":"Update system definition summary","description":"Updates system function and system requirement in the target project. For non-process projects, values are synchronized to the top rows of function and structure BOM.","tags":["System Definition"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"systemFunction":{"type":"string"},"systemRequirement":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"POST:/api/v2/projects/{projectId}/system-definition/conditions":{"path":"/api/v2/projects/{projectId}/system-definition/conditions","method":"POST","operationId":"createCondition","summary":"Create system definition condition","description":"Creates an owned condition in the target project for the requested type and title. If the same type/title already exists, the existing condition is returned.","tags":["System Definition"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"required":["title"],"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"}}}}},"required":true},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"sequence":{"type":"integer"},"type":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]},"scope":{"type":"string","enum":["OWNED","CANDIDATE","ALL"]},"title":{"type":"string"}}}}}}}},"DELETE:/api/v2/projects/{projectId}/system-definition/conditions":{"path":"/api/v2/projects/{projectId}/system-definition/conditions","method":"DELETE","operationId":"deleteConditions","summary":"Delete system definition conditions","description":"Deletes owned conditions in the target project by sequence list. All requested sequences must exist or the request fails without partial deletion.","tags":["System Definition"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sequences":{"type":"array","items":{"type":"integer","format":"int32"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"PATCH:/api/v2/projects/{projectId}/system-definition/conditions/{sequence}":{"path":"/api/v2/projects/{projectId}/system-definition/conditions/{sequence}","method":"PATCH","operationId":"updateCondition","summary":"Update system definition condition","description":"Updates the title of an owned condition identified by sequence in the target project. Duplicate titles within the same condition type are rejected.","tags":["System Definition"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"sequence","in":"path","description":"Condition sequence","required":true,"schema":{"type":"integer","format":"int32","minimum":1}}],"requestBody":{"content":{"application/json":{"schema":{"required":["title"],"type":"object","properties":{"title":{"type":"string"}}}}},"required":true},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"sequence":{"type":"integer"},"type":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]},"scope":{"type":"string","enum":["OWNED","CANDIDATE","ALL"]},"title":{"type":"string"}}}}}}}},"GET:/api/v2/projects/{projectId}/system-definition-excel/conditions/export":{"path":"/api/v2/projects/{projectId}/system-definition-excel/conditions/export","method":"GET","operationId":"exportConditions","summary":"Export system definition conditions to Excel UUID","description":"Exports owned condition titles by type from the target project into a temporary Excel file and returns its UUID.","tags":["System Definition"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Condition type","required":true,"schema":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"uuid":{"type":"object"}}}}}}}},"POST:/api/v2/projects/{projectId}/system-definition-excel/conditions/import/{uuid}":{"path":"/api/v2/projects/{projectId}/system-definition-excel/conditions/import/{uuid}","method":"POST","operationId":"importConditions","summary":"Import system definition conditions from Excel","description":"Imports condition titles from an uploaded Excel file into the target project and type. Duplicate and blank titles are ignored.","tags":["System Definition"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"uuid","in":"path","description":"Upload UUID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"sheetIndex":{"type":"integer","format":"int32"},"titleColumnIndex":{"type":"integer","format":"int32"},"startRowNumber":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}},"x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file identifier returned by the upload endpoint."},"GET:/api/v2/template/action-status":{"path":"/api/v2/template/action-status","method":"GET","operationId":"getAll_1","summary":"Get all action statuses","description":"Returns the full action status list as the FE snapshot source while preserving the existing flat list response shape used by current consumers.","tags":["Template"],"parameters":[],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"title":{"type":"string"}}}}}}}}},"POST:/api/v2/tree-search/{domain}/query":{"path":"/api/v2/tree-search/{domain}/query","method":"POST","operationId":"query","summary":"Execute tree search query","description":"Executes a tree-search query for the selected domain using referenceNode, anchorPattern, or contextCompletion mode. Validates query structure, size limits, and domain availability, then returns paged tree search matches.","tags":["Tree Search"],"parameters":[{"name":"domain","in":"path","description":"Tree search domain path segment. Allowed values are fmm or block-diagram.","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"queryMode":{"type":"string","enum":["REFERENCE_NODE","ANCHOR_PATTERN","CONTEXT_COMPLETION"]},"query":{"oneOf":[{"type":"object","properties":{"anchor":{"type":"object","properties":{"typeKey":{"type":"string"},"name":{"type":"string"}}},"constraints":{"type":"array","items":{"type":"object","properties":{"direction":{"type":"string","enum":["ANCESTOR","DESCENDANT"]},"typeKey":{"type":"string"},"match":{"type":"object","properties":{"name":{"type":"string"}}},"matchType":{"type":"string","enum":["EXACT","CONTAINS"]},"depth":{"type":"object","properties":{"min":{"type":"integer"},"max":{"type":"integer"}}}}}}},"description":"queryMode=ANCHOR_PATTERN"},{"type":"object","properties":{"target":{"type":"object","properties":{"typeKey":{"type":"string"}}},"source":{"type":"object","properties":{"stored":{"type":"object","properties":{"projectId":{"type":"string"},"failureModeId":{"type":"string"}}},"snapshot":{"type":"object","properties":{"root":{"type":"object","properties":{"id":{"type":"string"},"typeKey":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"},"attributes":{"type":"object"},"children":{"type":"array","items":{"type":"object","description":"(circular: TreeSearchNodeInputDTO)"}}}}}}}},"exclude":{"type":"array","items":{"type":"string"}},"context":{"type":"array","items":{"type":"object","properties":{"typeKey":{"type":"string"},"name":{"type":"string"}}}}},"description":"queryMode=CONTEXT_COMPLETION"},{"type":"object","properties":{"root":{"type":"object","properties":{"id":{"type":"string"},"typeKey":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"},"attributes":{"type":"object"},"children":{"type":"array","items":{"type":"object","description":"(circular: TreeSearchNodeInputDTO)"}}}},"children":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"typeKey":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"},"attributes":{"type":"object"},"children":{"type":"array","items":{"type":"object","description":"(circular: TreeSearchNodeInputDTO)"}}}}}},"description":"queryMode=REFERENCE_NODE"},{"type":"object","properties":{"raw":{"type":"object"}}}],"description":"Polymorphic, discriminated by 'queryMode'"},"scope":{"type":"object","properties":{"scope":{"type":"string","enum":["MY","DIVISION","ALL"]}}},"filter":{"type":"object","properties":{"includes":{"type":"object","properties":{"projectIds":{"type":"array","items":{"type":"string"}},"projectTypes":{"type":"array","items":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},"blockDiagramIds":{"type":"array","items":{"type":"string"}},"failureModeIds":{"type":"array","items":{"type":"string"}}}},"excludes":{"type":"object","properties":{"projectIds":{"type":"array","items":{"type":"string"}},"projectTypes":{"type":"array","items":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},"blockDiagramIds":{"type":"array","items":{"type":"string"}},"failureModeIds":{"type":"array","items":{"type":"string"}}}}}},"options":{"type":"object","properties":{"ignoreSiblingOrder":{"type":"boolean"},"allowExtraChildren":{"type":"boolean"},"allowDescendantMatch":{"type":"boolean"},"depthTolerance":{"type":"integer","format":"int32"},"minScore":{"type":"number","format":"double"}}},"page":{"type":"integer","format":"int32"},"size":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"candidateId":{"type":"string"},"matchedNodeId":{"type":"string"},"projectId":{"type":"string"},"projectName":{"type":"string"},"domain":{"type":"string"},"score":{"type":"number","format":"double"},"reasons":{"type":"array","items":{"type":"string"}},"subtree":{"type":"object","properties":{"id":{"type":"string"},"typeKey":{"type":"string"},"name":{"type":"string"},"attributes":{"type":"object"},"children":{"type":"array","items":{"type":"object","description":"(circular: TreeSearchNodeDTO)"}}}}}}},"comparison":{"type":"object","properties":{"effectCandidates":{"type":"array","items":{"type":"object","properties":{"candidateId":{"type":"string"},"projectId":{"type":"string"},"typeKey":{"type":"string"},"name":{"type":"string"},"typedName":{"type":"string"},"score":{"type":"number","format":"double"}}}},"causeCandidates":{"type":"array","items":{"type":"object","properties":{"candidateId":{"type":"string"},"projectId":{"type":"string"},"typeKey":{"type":"string"},"name":{"type":"string"},"typedName":{"type":"string"},"score":{"type":"number","format":"double"}}}},"factorCandidates":{"type":"array","items":{"type":"object","properties":{"candidateId":{"type":"string"},"projectId":{"type":"string"},"typeKey":{"type":"string"},"name":{"type":"string"},"typedName":{"type":"string"},"score":{"type":"number","format":"double"}}}}}},"page":{"type":"integer"},"size":{"type":"integer"},"total":{"type":"integer","format":"int64"}}}}}}}},"POST:/api/v2/tree-search/{domain}/rebuild":{"path":"/api/v2/tree-search/{domain}/rebuild","method":"POST","operationId":"rebuild","summary":"Rebuild tree search index","description":"Triggers an asynchronous full rebuild of the Lucene tree search index for the specified domain. Requires ADMIN privileges. Returns 202 if rebuild started, 409 if already in progress.","tags":["Tree Search"],"parameters":[{"name":"domain","in":"path","description":"Tree search domain. Allowed values: fmm, block-diagram","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/user-excel/export":{"path":"/api/v2/user-excel/export","method":"GET","operationId":"export_10","summary":"Export users to Excel","description":"Exports users to an XLSX file and returns a download URI. Supports filtering by keyword, department, and user level. Requires admin permission.","tags":["UserExcel"],"parameters":[{"name":"q","in":"query","description":"Keyword search on user name or ID (max 100 characters)","schema":{"type":"string"}},{"name":"dept","in":"query","description":"Filter by department name (optional)","schema":{"type":"string"}},{"name":"level","in":"query","description":"Filter by user level (e.g. ADMIN, LEADER, READER)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"downloadUri":{"type":"string"}}}}}}}},"GET:/api/v2/users":{"path":"/api/v2/users","method":"GET","summary":"Search users","description":"Returns paged users filtered by search, dept, and level.","operationId":"list_12","tags":["User"],"parameters":[{"name":"q","in":"query","description":"Unified keyword (id, name, englishName, email, department)","schema":{"type":"string"}},{"name":"dept","in":"query","description":"Department exact-match filter","schema":{"type":"string"}},{"name":"level","in":"query","description":"User level filter (ADMIN, NORMAL, READER)","schema":{"type":"string","enum":["ADMIN","NORMAL","READER"]}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 50, max: 1000)","schema":{"type":"integer","default":50,"format":"int32"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"divisionId":{"type":"integer"}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"},"includes":{"type":"object","properties":{"divisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}}}}}}},"GET:/api/v2/users/{userId}":{"path":"/api/v2/users/{userId}","method":"GET","operationId":"get_5","summary":"Get user details","description":"Retrieves detailed user profile information by user ID. Use this endpoint to fetch user account details, profile data, or user metadata for display purposes. This is commonly used when you need to show user information in UI components, validate user existence, or retrieve user context for other operations. The endpoint returns the complete user DTO including all available user attributes. Requires NORMAL user level or higher authentication.","tags":["User"],"parameters":[{"name":"userId","in":"path","description":"User ID to retrieve","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"division":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}}}},"GET:/api/v2/users/my/project-join-requests":{"path":"/api/v2/users/my/project-join-requests","method":"GET","operationId":"listMyProjectJoinRequests","summary":"List my project join requests","description":"Retrieves all project join requests submitted by the currently authenticated user. Use this endpoint to list pending invitations, access requests, or project membership requests that you have submitted. The response includes the status of each request (pending, approved, rejected) and associated project details. This is useful for showing users their request history, checking request status, or managing pending access requests. The endpoint automatically filters results based on the authenticated user's identity from the session context. Requires READER user level or higher authentication. Supports optional filtering by specific project ID via the projectId query parameter.","tags":["User"],"parameters":[{"name":"projectId","in":"query","description":"Optional project ID filter","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"requestId":{"type":"integer"},"projectId":{"type":"string"},"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"division":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["PENDING","APPROVED","REJECTED"]},"revisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"menuCode":{"type":"string","enum":["PROJECT","BLOCK","FMM","WORKSHEET","ATTACHED_FILE","WORKSHEET_UNIT","CONTROL_PLAN"]},"actionCode":{"type":"string","enum":["CREATE_PROJECT","MODIFY_PROJECT","DELETE_PROJECT","JOIN_REQUEST","JOIN_APPROVED","JOIN_REJECTED","CREATE","COPY","MODIFY","UPDATE","REVISE","DELETE"]},"projectId":{"type":"string"},"userId":{"type":"string"},"userName":{"type":"string"},"reportNo":{"type":"string"},"refId":{"type":"string"},"updatedDateTime":{"type":"string","format":"date-time"},"description":{"type":"string"},"updatingStatus":{"type":"integer"},"revisionNumber":{"type":"integer"}}}}}}}}}}}},"GET:/api/v2/users/me":{"path":"/api/v2/users/me","method":"GET","operationId":"getMe","summary":"Get my info","description":"Returns the current user's profile including division, accessible divisions, and workspace settings. Used by the My Info page.","tags":["User"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"englishName":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"division":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}},"userLevel":{"type":"string","enum":["ADMIN","NORMAL","READER"]},"defaultProjectType":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"language":{"type":"string"},"accessPermissions":{"type":"string"},"accessibleDivisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}}}}},"PATCH:/api/v2/users/me":{"path":"/api/v2/users/me","method":"PATCH","operationId":"updateMe","summary":"Update my info","description":"Updates the current user's profile fields (name, englishName, email, department, defaultProjectType, language, workspaceMode). Returns the updated profile.","tags":["User"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"englishName":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"defaultProjectType":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"language":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"englishName":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"division":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}},"userLevel":{"type":"string","enum":["ADMIN","NORMAL","READER"]},"defaultProjectType":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"language":{"type":"string"},"accessPermissions":{"type":"string"},"accessibleDivisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}}}}},"POST:/api/v2/users/me/password":{"path":"/api/v2/users/me/password","method":"POST","operationId":"changePassword_2","summary":"Change my password","description":"Changes the current user's password. Requires the current password for verification and a new password with confirmation.","tags":["User"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"currentPassword":{"type":"string"},"newPassword":{"type":"string"},"newPasswordConfirm":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/worksheet-template-excel/export":{"path":"/api/v2/worksheet-template-excel/export","method":"GET","operationId":"export_11","summary":"Export worksheet templates to Excel","description":"Exports worksheet templates to an XLSX file and returns a download URI. Supports filtering by FMEA type and keyword search. Requires admin permission.","tags":["WorksheetTemplateExcel"],"parameters":[{"name":"fmeaType","in":"query","description":"Filter by FMEA type (e.g. DESIGN, PROCESS, EQUIPMENT, FA)","schema":{"type":"string"}},{"name":"q","in":"query","description":"Keyword search on template name (max 100 characters)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"downloadUri":{"type":"string"}}}}}}}},"GET:/api/v2/worksheet-templates/{id}":{"path":"/api/v2/worksheet-templates/{id}","method":"GET","operationId":"get_7","summary":"Get worksheet template","description":"Returns a worksheet template. When search is provided, template headers are keyword-filtered.","tags":["Worksheet Templates"],"parameters":[{"name":"id","in":"path","description":"Worksheet template ID","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"q","in":"query","description":"Worksheet template header keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"projectType":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"category":{"type":"string","enum":["AIAG","AIAG-VDA","FMEA-MSR","STANDARD"]},"name":{"type":"string"},"order":{"type":"integer"},"defaultFlag":{"type":"boolean"},"active":{"type":"boolean"},"headers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"worksheetTemplateId":{"type":"integer"},"columnId":{"type":"integer"},"columnKey":{"type":"string"},"dataType":{"type":"string","enum":["integer","boolean","text","date","refer"]},"parentId":{"type":"integer"},"groupHeader":{"type":"boolean"},"name":{"type":"string"},"width":{"type":"integer"},"readOnly":{"type":"boolean"},"mergeGroup":{"type":"integer"},"order":{"type":"integer"},"vAlign":{"type":"integer"},"hAlign":{"type":"integer"},"style":{"type":"string"},"description":{"type":"string"}}}}}}}}}}},"GET:/api/v2/worksheet-templates":{"path":"/api/v2/worksheet-templates","method":"GET","operationId":"list_13","summary":"List worksheet templates","description":"Returns worksheet templates filtered by FMEA type. When fmeaType is omitted, returns all templates for Design, Process, Equipment, and FA types, ordered by type and template order.","tags":["Worksheet Templates"],"parameters":[{"name":"fmeaType","in":"query","description":"FMEA type filter. Omit for all types.","schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"projectType":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"category":{"type":"string","enum":["AIAG","AIAG-VDA","FMEA-MSR","STANDARD"]},"name":{"type":"string"},"order":{"type":"integer"},"defaultFlag":{"type":"boolean"},"active":{"type":"boolean"}}}}}}}}},"GET:/api/v2/projects/{projectId}/worksheets":{"path":"/api/v2/projects/{projectId}/worksheets","method":"GET","summary":"List worksheet summaries for a project","description":"Returns summary information for all worksheets belonging to the given project. Each summary includes the report number, title, and status. Requires NORMAL user level.","tags":["Worksheet"],"parameters":[{"name":"projectId","in":"path","description":"Project ID to list worksheets for","required":true,"schema":{"type":"string"}}],"operationId":"getSummaries","responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"reportNo":{"type":"string"},"name":{"type":"string"},"item":{"type":"string"},"analysisLevel":{"type":"string"},"blockDiagramType":{"type":"string","enum":["FUNCTION","STRUCTURE","FUNCTION_STRUCTURE","STRUCTURE_FUNCTION","PROCESS","SUPER_SYSTEM","FUNCTION_ANALYSIS"]},"templateName":{"type":"string"},"description":{"type":"string"},"improvementMetrics":{"type":"object","properties":{"before":{"type":"object","properties":{"count":{"type":"integer"},"total":{"type":"integer"},"average":{"type":"integer"}}},"after":{"type":"object","properties":{"count":{"type":"integer"},"total":{"type":"integer"},"average":{"type":"integer"}}}}},"createdBy":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"updatedBy":{"type":"string"},"updatedAt":{"type":"string","format":"date-time"}}}}}}}}},"POST:/api/v2/projects/{projectId}/worksheets":{"path":"/api/v2/projects/{projectId}/worksheets","method":"POST","summary":"Create a new worksheet in a project","description":"Creates a new worksheet under the given project using the provided creation DTO. Returns HTTP 201 Created with a Location header pointing to the new worksheet. Requires NORMAL user level and project MEMBER role.","tags":["Worksheet"],"parameters":[{"name":"projectId","in":"path","description":"Project ID to create the worksheet under","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"blockDiagramId":{"type":"string"},"analysisLevel":{"type":"string"},"nextReportNo":{"type":"string"},"failureModeIds":{"type":"array","items":{"type":"string"}},"worksheetTemplateId":{"type":"integer","format":"int32"},"description":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"*/*":{}}}},"operationId":"create_5"},"GET:/api/v2/projects/{projectId}/worksheets/{reportNoSimple}":{"path":"/api/v2/projects/{projectId}/worksheets/{reportNoSimple}","method":"GET","summary":"Get worksheet detail by report number","description":"Returns the full worksheet detail for the given report number within a project. Report number format: 'N' for primary only (e.g. '3'), or 'N-M' for primary-secondary (e.g. '3-1'). The '#' prefix is optional and will be stripped. Requires NORMAL user level.","tags":["Worksheet"],"parameters":[{"name":"projectId","in":"path","description":"Project ID the worksheet belongs to","required":true,"schema":{"type":"string"}},{"name":"reportNoSimple","in":"path","description":"Report number: 'N' (primary) or 'N-M' (primary-secondary), e.g. '3-1'","required":true,"schema":{"type":"string"}}],"operationId":"get_6","responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"analysisLevel":{"type":"string"},"reportNo":{"type":"string"},"serial":{"type":"integer"},"blockDiagram":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["FUNCTION","STRUCTURE","FUNCTION_STRUCTURE","STRUCTURE_FUNCTION","PROCESS","SUPER_SYSTEM","FUNCTION_ANALYSIS"]},"alias":{"type":"string"},"order":{"type":"integer"},"description":{"type":"string"},"numberFormat":{"type":"string"}}},"worksheetTemplateId":{"type":"integer"},"failureModeWorksheets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"reportNo":{"type":"string"},"failureModeId":{"type":"string"},"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"order":{"type":"integer"},"columns":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"value":{"type":"string"},"style":{"type":"string"}}}},"followUps":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"}}}},"fmmNodeId":{"type":"string"}}}},"order":{"type":"integer"}}}},"description":{"type":"string"}}}}}}}},"PUT:/api/v2/projects/{projectId}/worksheets/{reportNoSimple}":{"path":"/api/v2/projects/{projectId}/worksheets/{reportNoSimple}","method":"PUT","summary":"Save worksheet data by report number","description":"Saves (updates) the worksheet content for the given report number. Accepts a WorksheetSaveDTO containing row data and column values. Requires NORMAL user level and project MEMBER role.","tags":["Worksheet"],"parameters":[{"name":"projectId","in":"path","description":"Project ID the worksheet belongs to","required":true,"schema":{"type":"string"}},{"name":"reportNoSimple","in":"path","description":"Report number: 'N' (primary) or 'N-M' (primary-secondary), e.g. '3-1'","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"failureModeWorksheets":{"type":"array","items":{"required":["id"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"clientId":{"type":"string"},"failureModeId":{"type":"string"},"rows":{"type":"array","items":{"required":["id"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"clientId":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"value":{"type":"string"},"style":{"type":"string"}}}},"followUps":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"}}}},"fmmNodeId":{"type":"string"}}}},"order":{"type":"integer","format":"int32"}}}},"clientId":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string"},"id":{"type":"string"},"target":{"type":"string","enum":["WORKSHEET_ID","FAILURE_MODE_WORKSHEET_ID","WORKSHEET_ROW_ID","BLOCK_NODE_ID","BLOCK_REFERENCED_ID","FMM_OBJECT_ID"]}}}}}}}},"operationId":"save_7"},"DELETE:/api/v2/projects/{projectId}/worksheets/{reportNoSimple}":{"path":"/api/v2/projects/{projectId}/worksheets/{reportNoSimple}","method":"DELETE","summary":"Delete worksheet by report number","description":"Deletes the worksheet identified by the report number within the project. Returns HTTP 200 on success. Requires NORMAL user level and project MEMBER role.","tags":["Worksheet"],"parameters":[{"name":"projectId","in":"path","description":"Project ID the worksheet belongs to","required":true,"schema":{"type":"string"}},{"name":"reportNoSimple","in":"path","description":"Report number: 'N' (primary) or 'N-M' (primary-secondary), e.g. '3-1'","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"failureModeWorksheets":{"type":"array","items":{"required":["id"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"clientId":{"type":"string"},"failureModeId":{"type":"string"},"rows":{"type":"array","items":{"required":["id"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"clientId":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"value":{"type":"string"},"style":{"type":"string"}}}},"followUps":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"}}}},"fmmNodeId":{"type":"string"}}}},"order":{"type":"integer","format":"int32"}}}},"clientId":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"*/*":{}}}},"operationId":"delete_4"},"PUT:/api/v2/projects/{projectId}/worksheet-excel/{uuid}":{"path":"/api/v2/projects/{projectId}/worksheet-excel/{uuid}","method":"PUT","summary":"Re-import a worksheet from an uploaded Excel file","description":"Updates an existing worksheet by re-importing data from a previously uploaded Excel file. Overwrites the worksheet content according to the provided column mapping configuration. Returns 204 No Content on success.","tags":["Worksheet Excel"],"parameters":[{"name":"projectId","in":"path","description":"Project ID that owns the worksheet","required":true,"schema":{"type":"string"}},{"name":"uuid","in":"path","description":"UUID of the uploaded Excel file (returned by POST /api/v2/files)","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"reportNo":{"type":"string"},"mappings":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int32"},"columnId":{"type":"integer","format":"int32"}}}},"startRow":{"type":"integer","format":"int32"},"templateId":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"*/*":{}}}},"operationId":"update_4","x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file ID returned by the upload endpoint."},"POST:/api/v2/projects/{projectId}/worksheet-excel/{uuid}":{"path":"/api/v2/projects/{projectId}/worksheet-excel/{uuid}","method":"POST","summary":"Import a new worksheet from an uploaded Excel file","description":"Creates a new worksheet by importing data from a previously uploaded Excel file. The file must be uploaded first via POST /api/v2/files. The request body specifies column mapping configuration. Returns the assigned report number (reportNoSetDTO) and a Location header pointing to the new worksheet.","tags":["Worksheet Excel"],"parameters":[{"name":"projectId","in":"path","description":"Project ID that will own the new worksheet","required":true,"schema":{"type":"string"}},{"name":"uuid","in":"path","description":"UUID of the uploaded Excel file (returned by POST /api/v2/files)","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"reportNo":{"type":"string"},"mappings":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int32"},"columnId":{"type":"integer","format":"int32"}}}},"startRow":{"type":"integer","format":"int32"},"templateId":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"*/*":{}}}},"operationId":"add","x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file ID returned by the upload endpoint."},"GET:/api/v2/projects/{projectId}/worksheet-excel/{reportNoSimple}":{"path":"/api/v2/projects/{projectId}/worksheet-excel/{reportNoSimple}","method":"GET","summary":"Get Excel download link for a worksheet","description":"Generates and returns a download link (FileDownloadResponseDTO) for exporting a worksheet as an Excel file. The report number identifies the worksheet (primary 'N' or primary-secondary 'N-M'). Use GET /api/v1/files/{uuid} with the returned URI to download the file.","tags":["Worksheet Excel"],"parameters":[{"name":"projectId","in":"path","description":"Project ID that owns the worksheet","required":true,"schema":{"type":"string"}},{"name":"reportNoSimple","in":"path","description":"Worksheet report number: 'N' (primary) or 'N-M' (primary-secondary). '#' prefix is stripped.","required":true,"schema":{"type":"string"}}],"operationId":"getDownloadLink_1","responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"downloadUri":{"type":"string"}}}}}}}},"GET:/api/v2/projects/{projectId}/worksheet-excel/{uuid}/metadata":{"path":"/api/v2/projects/{projectId}/worksheet-excel/{uuid}/metadata","method":"GET","summary":"Get Excel file metadata for a worksheet import","description":"Reads metadata (sheet names, column headers) from a previously uploaded Excel file. The file must be uploaded first via POST /api/v2/files. The returned metadata is used to configure mapping before triggering import.","tags":["Worksheet Excel"],"parameters":[{"name":"projectId","in":"path","description":"Project ID that owns the worksheet","required":true,"schema":{"type":"string"}},{"name":"uuid","in":"path","description":"UUID of the uploaded Excel file (returned by POST /api/v2/files)","required":true,"schema":{"type":"string"}}],"operationId":"getMetadata","x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file ID returned by the upload endpoint.","responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string"},"reportNo":{"type":"string"},"startRow":{"type":"integer"},"latestModified":{"type":"string","format":"date-time"},"targetModified":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["CREATABLE","UPDATABLE","OUTDATED","UNKNOWN"]}}}}}}}},"GET:/api/v2/projects/{projectId}/worksheet-excel/{reportNoSimple}/sheets":{"path":"/api/v2/projects/{projectId}/worksheet-excel/{reportNoSimple}/sheets","method":"GET","summary":"List POISheet sheets for a worksheet Excel","description":"Returns the list of POISheet sheet objects contained in the Excel file associated with the specified worksheet. Useful for rendering multi-sheet Excel content in the worksheet editor.","tags":["Worksheet Excel"],"operationId":"getSheets","parameters":[{"name":"projectId","in":"path","description":"Project ID that owns the worksheet","required":true,"schema":{"type":"string"}},{"name":"reportNoSimple","in":"path","description":"Worksheet report number: 'N' (primary) or 'N-M' (primary-secondary). '#' prefix is stripped.","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}}}},"GET:/api/v2/projects/{projectId}/worksheets/failuremode/{failureModeId}":{"path":"/api/v2/projects/{projectId}/worksheets/failuremode/{failureModeId}","method":"GET","summary":"Get worksheet by failure mode ID","description":"Returns the worksheet associated with the specified failure mode within the given project. Returns the worksheet DTO including S/O/D data and all worksheet rows. Requires NORMAL user level.","tags":["Worksheet"],"parameters":[{"name":"projectId","in":"path","description":"Project ID the failure mode belongs to","required":true,"schema":{"type":"string"}},{"name":"failureModeId","in":"path","description":"Failure mode ID to retrieve the associated worksheet for","required":true,"schema":{"type":"string"}}],"operationId":"getByFailureMode","responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"reportNo":{"type":"string"},"failureModeId":{"type":"string"},"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"order":{"type":"integer"},"columns":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"value":{"type":"string"},"style":{"type":"string"}}}},"followUps":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"}}}},"fmmNodeId":{"type":"string"}}}},"order":{"type":"integer"}}}}}}}},"POST:/api/v2/projects/{projectId}/worksheets/failuremode/{failureModeId}":{"path":"/api/v2/projects/{projectId}/worksheets/failuremode/{failureModeId}","method":"POST","summary":"Create worksheet row for a failure mode","description":"Creates a new worksheet row linked to the specified failure mode within the project. Optionally associates the row with a block diagram node via blockDiagramId. Returns HTTP 201 Created with the created worksheet row DTO. Requires NORMAL user level and project MEMBER role.","tags":["Worksheet"],"parameters":[{"name":"projectId","in":"path","description":"Project ID the failure mode belongs to","required":true,"schema":{"type":"string"}},{"name":"failureModeId","in":"path","description":"Failure mode ID to create a worksheet row for","required":true,"schema":{"type":"string"}},{"name":"blockDiagramId","in":"query","description":"Optional block diagram node ID to associate with the new worksheet row","schema":{"type":"string"}}],"operationId":"createByFailureMode","responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string"},"id":{"type":"string"},"target":{"type":"string","enum":["WORKSHEET_ID","FAILURE_MODE_WORKSHEET_ID","WORKSHEET_ROW_ID","BLOCK_NODE_ID","BLOCK_REFERENCED_ID","FMM_OBJECT_ID"]}}}}}}}}},"GET:/api/v2/projects/{projectId}/worksheets/{reportNo}/headers":{"path":"/api/v2/projects/{projectId}/worksheets/{reportNo}/headers","method":"GET","summary":"Get worksheet headers","description":"Returns worksheet headers copied for the worksheet. When search is provided, keyword matching is applied.","tags":["Worksheet"],"parameters":[{"name":"projectId","in":"path","description":"Project ID the worksheet belongs to","required":true,"schema":{"type":"string"}},{"name":"reportNo","in":"path","description":"Worksheet report number (primary, e.g. '3')","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Worksheet header keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}}],"operationId":"getHeaders","responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"columnId":{"type":"integer"},"columnKey":{"type":"string"},"dataType":{"type":"string","enum":["integer","boolean","text","date","refer"]},"parentId":{"type":"integer"},"groupHeader":{"type":"boolean"},"name":{"type":"string"},"width":{"type":"integer"},"readOnly":{"type":"boolean"},"mergeGroup":{"type":"integer"},"order":{"type":"integer"},"vAlign":{"type":"integer"},"hAlign":{"type":"integer"},"style":{"type":"string"},"description":{"type":"string"}}}}}}}}},"PUT:/api/v2/projects/{projectId}/worksheets/{reportNo}/{failureModeId}":{"path":"/api/v2/projects/{projectId}/worksheets/{reportNo}/{failureModeId}","method":"PUT","summary":"Save worksheet data for a specific failure mode","description":"Saves worksheet content for the worksheet row associated with the given failure mode. The report number identifies the worksheet; the failure mode ID identifies the row. Requires NORMAL user level and project MEMBER role.","tags":["Worksheet"],"parameters":[{"name":"projectId","in":"path","description":"Project ID the worksheet belongs to","required":true,"schema":{"type":"string"}},{"name":"reportNo","in":"path","description":"Worksheet report number (primary, e.g. '3')","required":true,"schema":{"type":"string"}},{"name":"failureModeId","in":"path","description":"Failure mode ID whose worksheet row will be updated","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"required":["id"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"clientId":{"type":"string"},"failureModeId":{"type":"string"},"rows":{"type":"array","items":{"required":["id"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"clientId":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"value":{"type":"string"},"style":{"type":"string"}}}},"followUps":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"}}}},"fmmNodeId":{"type":"string"}}}},"order":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string"},"id":{"type":"string"},"target":{"type":"string","enum":["WORKSHEET_ID","FAILURE_MODE_WORKSHEET_ID","WORKSHEET_ROW_ID","BLOCK_NODE_ID","BLOCK_REFERENCED_ID","FMM_OBJECT_ID"]}}}}}}}},"operationId":"saveByFailureMode"},"GET:/api/v2/worksheet-templates/{id}/headers":{"path":"/api/v2/worksheet-templates/{id}/headers","method":"GET","summary":"Get worksheet template headers","description":"Returns worksheet template headers. When search is provided, keyword matching is applied.","tags":["Worksheet Templates"],"parameters":[{"name":"id","in":"path","description":"Worksheet template ID","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"q","in":"query","description":"Worksheet template header keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}}],"operationId":"getHeaders_1","responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"worksheetTemplateId":{"type":"integer"},"columnId":{"type":"integer"},"columnKey":{"type":"string"},"dataType":{"type":"string","enum":["integer","boolean","text","date","refer"]},"parentId":{"type":"integer"},"groupHeader":{"type":"boolean"},"name":{"type":"string"},"width":{"type":"integer"},"readOnly":{"type":"boolean"},"mergeGroup":{"type":"integer"},"order":{"type":"integer"},"vAlign":{"type":"integer"},"hAlign":{"type":"integer"},"style":{"type":"string"},"description":{"type":"string"}}}}}}}}}}
1
+ {"PUT:/api/v2/template/action-status":{"path":"/api/v2/template/action-status","method":"PUT","operationId":"saveSnapshot_4","summary":"Save action status snapshot","description":"Saves the full snapshot for action statuses and returns the latest full list. This is the main JSON save path and omitted items are deleted.","tags":["Template"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"required":["items"],"type":"object","properties":{"items":{"type":"array","items":{"required":["title"],"type":"object","properties":{"id":{"type":"string"},"title":{"maxLength":30,"minLength":0,"type":"string"}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"DELETE:/api/v2/additional-info/attributes/{attrId}":{"path":"/api/v2/additional-info/attributes/{attrId}","method":"DELETE","operationId":"deleteAttribute","summary":"Delete additional info attribute","description":"Deletes the specified additional information attribute and all associated items and data.","tags":["Additional Info Template"],"parameters":[{"name":"attrId","in":"path","description":"Additional info attribute ID to delete","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"DELETE:/api/v2/additional-info/attributes/{attrId}/items/{itemId}":{"path":"/api/v2/additional-info/attributes/{attrId}/items/{itemId}","method":"DELETE","operationId":"deleteItem","summary":"Delete additional info item","description":"Deletes the specified item from the additional information attribute.","tags":["Additional Info Template"],"parameters":[{"name":"attrId","in":"path","description":"Additional info attribute ID owning the item","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"itemId","in":"path","description":"Additional info item ID to delete","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"DELETE:/api/v2/additional-info/fields/{fieldId}":{"path":"/api/v2/additional-info/fields/{fieldId}","method":"DELETE","operationId":"deleteField","summary":"Delete additional info field","description":"Deletes the specified additional information field and all associated data.","tags":["Additional Info Template"],"parameters":[{"name":"fieldId","in":"path","description":"Additional info field ID to delete","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/additional-info/attributes":{"path":"/api/v2/additional-info/attributes","method":"GET","operationId":"getAttributesByFmeaType","summary":"List attributes by FMEA type","description":"Returns all additional information attributes (with items) for the given FMEA type. Supports optional keyword search on attribute label or item label.","tags":["Additional Info Template"],"parameters":[{"name":"fmeaType","in":"query","description":"FMEA project type","schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"q","in":"query","description":"Keyword filter applied to attribute label or item label (max 100 chars)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"GET:/api/v2/additional-info/attributes/{attrId}":{"path":"/api/v2/additional-info/attributes/{attrId}","method":"GET","operationId":"getAttributeById","summary":"Get attribute by ID","description":"Returns a single additional information attribute including its items.","tags":["Additional Info Template"],"parameters":[{"name":"attrId","in":"path","description":"Additional info attribute ID to retrieve","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"fmeaType":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"label":{"type":"string"},"typeId":{"type":"integer"},"type":{"type":"string","enum":["TEXT","DATE","SELECT","LIST"]},"typeAlias":{"type":"string"},"displayOrder":{"type":"integer"},"options":{"type":"object"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"label":{"type":"string"},"itemType":{"type":"string"},"displayOrder":{"type":"integer"},"options":{"type":"object"}}}}}}}}}}},"GET:/api/v2/additional-info/fields":{"path":"/api/v2/additional-info/fields","method":"GET","operationId":"getFieldsByFmeaType","summary":"List fields by FMEA type","description":"Returns all additional information fields for the given FMEA type. Supports optional keyword search on field label.","tags":["Additional Info Template"],"parameters":[{"name":"fmeaType","in":"query","description":"FMEA project type","schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"q","in":"query","description":"Keyword filter applied to field label (max 100 chars)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"GET:/api/v2/additional-info/form":{"path":"/api/v2/additional-info/form","method":"GET","operationId":"getForm","summary":"Get form with project data","description":"Returns form structure with template fields and project-specific values overlaid.","tags":["Additional Info Template"],"parameters":[{"name":"fmeaType","in":"query","description":"FMEA project type","schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"projectId","in":"query","description":"Project ID to overlay project-specific values","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"fmeaType":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"label":{"type":"string"},"typeId":{"type":"integer"},"type":{"type":"string","enum":["TEXT","DATE","SELECT","LIST"]},"typeAlias":{"type":"string"},"displayOrder":{"type":"integer"},"attributeId":{"type":"integer"},"attributeLabel":{"type":"string"},"options":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"integer"},"name":{"type":"string"},"value":{"type":"string"},"attributeId":{"type":"integer"},"itemId":{"type":"integer"}}}}}}}}}}}},"GET:/api/v2/additional-info/projects/{projectId}":{"path":"/api/v2/additional-info/projects/{projectId}","method":"GET","operationId":"getProjectData","summary":"Get project additional info","description":"Returns all additional information data for the specified project.","tags":["Additional Info Template"],"parameters":[{"name":"projectId","in":"path","description":"Project ID to retrieve additional info for","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"projectId":{"type":"string"},"fieldId":{"type":"integer"},"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"displayOrder":{"type":"integer"},"columns":{"type":"array","items":{"type":"object","properties":{"attributeId":{"type":"integer"},"itemId":{"type":"integer"},"value":{"type":"string"}}}}}}}}}}}}}}},"GET:/api/v2/additional-info/types":{"path":"/api/v2/additional-info/types","method":"GET","operationId":"getTypes","summary":"List additional info types","description":"Returns all available additional information type modes.","tags":["Additional Info Template"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string","enum":["TEXT","DATE","SELECT","LIST","LIST_PMS"]}}}}}}},"POST:/api/v2/additional-info/attributes":{"path":"/api/v2/additional-info/attributes","method":"POST","operationId":"createAttribute","summary":"Create additional info attribute","description":"Creates a new additional information attribute for the specified FMEA type.","tags":["Additional Info Template"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fmeaType":{"type":"string"},"label":{"type":"string"},"typeId":{"type":"integer","format":"int32"},"options":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"fmeaType":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"label":{"type":"string"},"typeId":{"type":"integer"},"type":{"type":"string","enum":["TEXT","DATE","SELECT","LIST"]},"typeAlias":{"type":"string"},"displayOrder":{"type":"integer"},"options":{"type":"object"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"label":{"type":"string"},"itemType":{"type":"string"},"displayOrder":{"type":"integer"},"options":{"type":"object"}}}}}}}}}}},"POST:/api/v2/additional-info/attributes/{attrId}/items":{"path":"/api/v2/additional-info/attributes/{attrId}/items","method":"POST","operationId":"createItem","summary":"Create additional info item","description":"Creates a new item under the specified additional information attribute.","tags":["Additional Info Template"],"parameters":[{"name":"attrId","in":"path","description":"Additional info attribute ID to add item to","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string"},"itemType":{"type":"string"},"options":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"label":{"type":"string"},"itemType":{"type":"string"},"displayOrder":{"type":"integer"},"options":{"type":"object"}}}}}}}},"POST:/api/v2/additional-info/fields":{"path":"/api/v2/additional-info/fields","method":"POST","operationId":"createField","summary":"Create additional info field","description":"Creates a new additional information field for the specified FMEA type.","tags":["Additional Info Template"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fmeaType":{"type":"string"},"label":{"type":"string"},"typeId":{"type":"integer","format":"int32"},"attributeId":{"type":"integer","format":"int32"},"options":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"integer","format":"int32"},"name":{"type":"string"},"value":{"type":"string"},"attributeId":{"type":"integer","format":"int32"},"itemId":{"type":"integer","format":"int32"}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"fmeaType":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"label":{"type":"string"},"typeId":{"type":"integer"},"type":{"type":"string","enum":["TEXT","DATE","SELECT","LIST"]},"typeAlias":{"type":"string"},"displayOrder":{"type":"integer"},"attributeId":{"type":"integer"},"attributeLabel":{"type":"string"},"options":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"integer"},"name":{"type":"string"},"value":{"type":"string"},"attributeId":{"type":"integer"},"itemId":{"type":"integer"}}}}}}}}}}},"PUT:/api/v2/additional-info/attributes/{attrId}":{"path":"/api/v2/additional-info/attributes/{attrId}","method":"PUT","operationId":"updateAttribute","summary":"Update additional info attribute","description":"Updates the label, type, and options of the specified additional information attribute.","tags":["Additional Info Template"],"parameters":[{"name":"attrId","in":"path","description":"Additional info attribute ID to update","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string"},"typeId":{"type":"integer","format":"int32"},"options":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"PUT:/api/v2/additional-info/attributes/{attrId}/items/{itemId}":{"path":"/api/v2/additional-info/attributes/{attrId}/items/{itemId}","method":"PUT","operationId":"updateItem","summary":"Update additional info item","description":"Updates the label and type of the specified additional information item.","tags":["Additional Info Template"],"parameters":[{"name":"attrId","in":"path","description":"Additional info attribute ID owning the item","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"itemId","in":"path","description":"Additional info item ID to update","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string"},"itemType":{"type":"string"},"options":{"type":"object","additionalProperties":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"PUT:/api/v2/additional-info/fields/order":{"path":"/api/v2/additional-info/fields/order","method":"PUT","operationId":"reorderFields","summary":"Reorder additional info fields","description":"Reorders the additional information fields for the given FMEA type.","tags":["Additional Info Template"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"fmeaType":{"type":"string"},"fieldIds":{"type":"array","items":{"type":"integer","format":"int32"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"PUT:/api/v2/additional-info/fields/{fieldId}":{"path":"/api/v2/additional-info/fields/{fieldId}","method":"PUT","operationId":"updateField","summary":"Update additional info field","description":"Updates the label, type, and options of the specified additional information field.","tags":["Additional Info Template"],"parameters":[{"name":"fieldId","in":"path","description":"Additional info field ID to update","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string"},"typeId":{"type":"integer","format":"int32"},"attributeId":{"type":"integer","format":"int32"},"options":{"type":"array","items":{"type":"object","properties":{"fieldId":{"type":"integer","format":"int32"},"name":{"type":"string"},"value":{"type":"string"},"attributeId":{"type":"integer","format":"int32"},"itemId":{"type":"integer","format":"int32"}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"PUT:/api/v2/additional-info/projects/{projectId}":{"path":"/api/v2/additional-info/projects/{projectId}","method":"PUT","operationId":"saveProjectData","summary":"Save project additional info","description":"Saves all additional information data for the specified project (full replace).","tags":["Additional Info Template"],"parameters":[{"name":"projectId","in":"path","description":"Project ID to save additional info for","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"projectId":{"type":"string"},"fieldId":{"type":"integer","format":"int32"},"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"displayOrder":{"type":"integer","format":"int32"},"columns":{"type":"array","items":{"type":"object","properties":{"attributeId":{"type":"integer","format":"int32"},"itemId":{"type":"integer","format":"int32"},"value":{"type":"string"}}}}}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/additional-info-excel/export":{"path":"/api/v2/additional-info-excel/export","method":"GET","operationId":"export","summary":"Export additional info fields to Excel","description":"Exports additional information fields to an XLSX file and returns a download URI. Supports optional FMEA type filter and keyword search on field label. Requires admin permission.","tags":["AdditionalInfoExcel"],"parameters":[{"name":"fmeaType","in":"query","description":"FMEA type filter (e.g. stress|design|process). Required.","schema":{"type":"string"}},{"name":"q","in":"query","description":"Keyword filter for exported rows (max 100 chars)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"GET:/api/v2/admin/api-key-excel/export":{"path":"/api/v2/admin/api-key-excel/export","method":"GET","operationId":"export_1","summary":"Export all API keys to Excel","description":"Exports all API keys to an XLSX file and returns a download URI. Supports filtering by user ID, active status, expiry state, and keyword search. Only accessible via session (JWT) authentication; API key auth is rejected. Requires admin permission.","tags":["Admin - API Key Excel"],"parameters":[{"name":"userid","in":"query","description":"Filter by user ID (optional, exact match)","schema":{"type":"string"}},{"name":"isActive","in":"query","description":"Filter by active status: true=active only, false=inactive only","schema":{"type":"boolean"}},{"name":"expiredOnly","in":"query","description":"If true, return only expired keys","schema":{"type":"boolean"}},{"name":"q","in":"query","description":"Keyword search on key name or key prefix (max 100 characters)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"downloadUri":{"type":"string"}}}}}}}},"DELETE:/api/v2/admin/api-keys/{id}":{"path":"/api/v2/admin/api-keys/{id}","method":"DELETE","operationId":"deactivate","summary":"Force-deactivate an API key by ID","description":"Immediately deactivates the specified API key regardless of its owner. Only accessible via session (JWT) authentication; API key auth is rejected. Returns 204 No Content on success.","tags":["Admin - API Keys"],"parameters":[{"name":"id","in":"path","description":"API key ID to deactivate","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"DELETE:/api/v2/admin/api-keys/user/{userid}":{"path":"/api/v2/admin/api-keys/user/{userid}","method":"DELETE","operationId":"deactivateByUserId","summary":"Deactivate all API keys for a specific user","description":"Bulk-deactivates all active API keys belonging to the specified user. Only accessible via session (JWT) authentication; API key auth is rejected. Returns the count of deactivated keys in the response body.","tags":["Admin - API Keys"],"parameters":[{"name":"userid","in":"path","description":"User ID whose API keys will be deactivated","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/admin/api-keys/stats":{"path":"/api/v2/admin/api-keys/stats","method":"GET","operationId":"getStats","summary":"Get API key statistics","description":"Returns aggregate statistics for all API keys in the system, including total count, active/inactive counts, and expiry distribution. Only accessible via session (JWT) authentication; API key auth is rejected.","tags":["Admin - API Keys"],"parameters":[],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"totalKeys":{"type":"integer"},"activeKeys":{"type":"integer"},"expiredKeys":{"type":"integer"},"deactivatedKeys":{"type":"integer"},"userStats":{"type":"array","items":{"type":"object","properties":{"userid":{"type":"string"},"totalKeys":{"type":"integer"},"activeKeys":{"type":"integer"}}}},"levelStats":{"type":"object"}}}}}}}},"GET:/api/v2/admin/api-keys":{"path":"/api/v2/admin/api-keys","method":"GET","operationId":"list_3","summary":"List all API keys across all users","description":"Returns a paged list of API keys for all users. Supports filtering by user ID, active status, and expiry state. Only accessible via session (JWT) authentication; API key auth is rejected. Page size is capped at 100.","tags":["Admin - API Keys"],"parameters":[{"name":"userid","in":"query","description":"Filter by user ID (optional, exact match)","schema":{"type":"string"}},{"name":"isActive","in":"query","description":"Filter by active status: true=active only, false=inactive only","schema":{"type":"boolean"}},{"name":"expiredOnly","in":"query","description":"If true, return only expired keys","schema":{"type":"boolean"}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 20, max: 100)","schema":{"type":"integer","default":20,"format":"int32"}},{"name":"q","in":"query","description":"Keyword search on key name or key prefix (max 100 characters)","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"userId":{"type":"string"},"apiKey":{"type":"string"},"keyPrefix":{"type":"string"},"keyName":{"type":"string"},"userLevel":{"type":"string","enum":["ADMIN","NORMAL","READER"]},"createdAt":{"type":"string","format":"date-time"},"expiryDate":{"type":"string","format":"date-time"},"lastUsedAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"}}}}}}}},"GET:/api/v2/admin/apikeys/logs":{"path":"/api/v2/admin/apikeys/logs","method":"GET","operationId":"getAuditLogs","summary":"Query API key audit logs","description":"Returns a paged list of API key admin actions (create, deactivate, etc.). Supports filtering by admin user ID, target user ID, action type, and date range. Dates must be in ISO-8601 format (YYYY-MM-DD). Only accessible via session (JWT) authentication; API key auth is rejected. Page size is capped at 100.","tags":["Admin - API Key Audit Logs"],"parameters":[{"name":"adminUserid","in":"query","description":"Filter by the admin who performed the action (optional, exact match)","schema":{"type":"string"}},{"name":"targetUserid","in":"query","description":"Filter by the user whose key was affected (optional, exact match)","schema":{"type":"string"}},{"name":"action","in":"query","description":"Filter by action type","schema":{"type":"string","enum":["ADD","DELETE","UPDATE"]}},{"name":"startDate","in":"query","description":"Start date for the log query range (ISO-8601, YYYY-MM-DD, inclusive)","schema":{"type":"string"}},{"name":"endDate","in":"query","description":"End date for the log query range (ISO-8601, YYYY-MM-DD, inclusive)","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 20, max: 100)","schema":{"type":"integer","default":20,"format":"int32"}},{"name":"q","in":"query","description":"Keyword search on reason field (max 100 characters)","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"adminUserid":{"type":"string"},"action":{"type":"string"},"targetApiKeyId":{"type":"integer","format":"int64"},"targetUserid":{"type":"string"},"reason":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"}}}}}}}},"GET:/api/v2/api-keys":{"path":"/api/v2/api-keys","method":"GET","operationId":"list_4","summary":"List all API keys for the authenticated user","description":"Returns all API keys belonging to the currently authenticated user, including active and inactive keys. Key values are masked in the response.","tags":["API Keys"],"parameters":[],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"userId":{"type":"string"},"apiKey":{"type":"string"},"keyPrefix":{"type":"string"},"keyName":{"type":"string"},"userLevel":{"type":"string","enum":["ADMIN","NORMAL","READER"]},"createdAt":{"type":"string","format":"date-time"},"expiryDate":{"type":"string","format":"date-time"},"lastUsedAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"}}}},"total":{"type":"integer"}}}}}}}},"POST:/api/v2/api-keys":{"path":"/api/v2/api-keys","method":"POST","operationId":"create_1","summary":"Issue a new API key for the authenticated user","description":"Creates and returns a new API key for the currently authenticated user. The key is returned in full only at creation time; subsequent list calls return only the masked key. Returns 201 Created on success.","tags":["API Keys"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"keyName":{"type":"string"},"expiryDays":{"type":"integer","format":"int32"},"userLevel":{"type":"string","enum":["ADMIN","NORMAL","READER"]}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"userId":{"type":"string"},"apiKey":{"type":"string"},"keyPrefix":{"type":"string"},"keyName":{"type":"string"},"userLevel":{"type":"string","enum":["ADMIN","NORMAL","READER"]},"createdAt":{"type":"string","format":"date-time"},"expiryDate":{"type":"string","format":"date-time"},"lastUsedAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"}}}}}}}},"DELETE:/api/v2/api-keys/{id}":{"path":"/api/v2/api-keys/{id}","method":"DELETE","operationId":"delete_1","summary":"Delete an API key owned by the authenticated user","description":"Permanently deletes the specified API key. The key must belong to the currently authenticated user. Returns 204 No Content on success.","tags":["API Keys"],"parameters":[{"name":"id","in":"path","description":"API key ID to delete","required":true,"schema":{"type":"integer","format":"int64"}}],"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"GET:/api/v2/api-keys/{id}/logs":{"path":"/api/v2/api-keys/{id}/logs","method":"GET","operationId":"getLogs","summary":"Get usage logs for an API key","description":"Returns paged usage logs for the specified API key owned by the authenticated user. Supports filtering by date range, endpoint path, and HTTP status code. Dates must be in ISO-8601 format (YYYY-MM-DD). Page size is capped at 100.","tags":["API Keys"],"parameters":[{"name":"id","in":"path","description":"API key ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"startDate","in":"query","description":"Start date for the log range (ISO-8601, YYYY-MM-DD, inclusive)","schema":{"type":"string"}},{"name":"endDate","in":"query","description":"End date for the log range (ISO-8601, YYYY-MM-DD, inclusive)","schema":{"type":"string"}},{"name":"endpoint","in":"query","description":"Filter by called endpoint path (optional, partial match)","schema":{"type":"string"}},{"name":"statusCode","in":"query","description":"Filter by HTTP status code (optional, e.g., 200, 401, 500)","schema":{"type":"integer","format":"int32"}},{"name":"page","in":"query","description":"Page number (default: 0)","schema":{"type":"integer","default":0,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 20, max: 100)","schema":{"type":"integer","default":20,"format":"int32"}}],"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/api-keys/{id}/logs/summary":{"path":"/api/v2/api-keys/{id}/logs/summary","method":"GET","operationId":"getLogsSummary","summary":"Get usage log summary for an API key","description":"Returns aggregated usage statistics for the specified API key owned by the authenticated user. Supports filtering by date range (ISO-8601 YYYY-MM-DD). Includes total request counts grouped by status code and endpoint.","tags":["API Keys"],"parameters":[{"name":"id","in":"path","description":"API key ID","required":true,"schema":{"type":"integer","format":"int64"}},{"name":"startDate","in":"query","description":"Start date for the summary range (ISO-8601, YYYY-MM-DD, inclusive)","schema":{"type":"string"}},{"name":"endDate","in":"query","description":"End date for the summary range (ISO-8601, YYYY-MM-DD, inclusive)","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"totalRequests":{"type":"integer","format":"int64"},"successCount":{"type":"integer","format":"int64"},"errorCount":{"type":"integer","format":"int64"},"avgResponseTimeMs":{"type":"integer"},"topEndpoints":{"type":"array","items":{"type":"object","properties":{"endpoint":{"type":"string"},"count":{"type":"integer","format":"int64"}}}},"dailyStats":{"type":"array","items":{"type":"object","properties":{"date":{"type":"string"},"count":{"type":"integer","format":"int64"}}}}}}}}}}},"POST:/api/v2/api-keys/{id}/regenerate":{"path":"/api/v2/api-keys/{id}/regenerate","method":"POST","operationId":"regenerate","summary":"Regenerate an API key","description":"Replaces the secret value of an existing API key with a newly generated one. An optional new expiry date may be specified in the request body. The new key value is returned in full only in this response.","tags":["API Keys"],"parameters":[{"name":"id","in":"path","description":"API key ID to regenerate","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"expiryDate":{"type":"string","format":"date"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"userId":{"type":"string"},"apiKey":{"type":"string"},"keyPrefix":{"type":"string"},"keyName":{"type":"string"},"userLevel":{"type":"string","enum":["ADMIN","NORMAL","READER"]},"createdAt":{"type":"string","format":"date-time"},"expiryDate":{"type":"string","format":"date-time"},"lastUsedAt":{"type":"string","format":"date-time"},"active":{"type":"boolean"}}}}}}}},"GET:/api/v2/admin/apikey-log-excel/export":{"path":"/api/v2/admin/apikey-log-excel/export","method":"GET","operationId":"export_2","summary":"Export API key audit logs to Excel","description":"Exports API key admin audit logs to an XLSX file and returns a download URI. Supports filtering by admin user ID, target user ID, action type, date range, and keyword search. Only accessible via session (JWT) authentication; API key auth is rejected. Requires admin permission.","tags":["Admin - API Key Log Excel"],"parameters":[{"name":"adminUserid","in":"query","description":"Filter by the admin who performed the action (optional, exact match)","schema":{"type":"string"}},{"name":"targetUserid","in":"query","description":"Filter by the user whose key was affected (optional, exact match)","schema":{"type":"string"}},{"name":"action","in":"query","description":"Filter by action type (e.g. CREATE, DEACTIVATE, BULK_DEACTIVATE)","schema":{"type":"string"}},{"name":"startDate","in":"query","description":"Start date for the log query range (YYYYMMDD, inclusive)","schema":{"type":"string"}},{"name":"endDate","in":"query","description":"End date for the log query range (YYYYMMDD, inclusive)","schema":{"type":"string"}},{"name":"q","in":"query","description":"Keyword search on admin user ID or target user ID (max 100 characters)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"downloadUri":{"type":"string"}}}}}}}},"GET:/api/v2/approvals/board":{"path":"/api/v2/approvals/board","method":"GET","operationId":"getBoard","summary":"Get approval board","description":"Returns approval progress and board items for a project. Includes progress status, step participants, and opinion list. Optional step filter narrows opinions by type (e.g., REVIEW_OPINION, APPROVAL_OPINION).","tags":["Approval"],"parameters":[{"name":"projectId","in":"query","description":"Project ID (required)","schema":{"type":"string"}},{"name":"step","in":"query","description":"Step filter (optional): REVIEW_OPINION|APPROVAL_OPINION|APPROVAL_DECISION|REVIEW_REFUSAL|SCORE_PASS|SCORE_FAIL|SCORE_REFUSAL","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"progress":{"type":"object","properties":{"isModifyRequest":{"type":"boolean"},"useScore":{"type":"boolean"},"doApproval":{"type":"boolean"},"approvalRound":{"type":"integer"},"refusedStep":{"type":"string"},"steps":{"type":"array","items":{"type":"object","properties":{"step":{"type":"string","enum":["WRITE","REVIEW","APPROVE","SCORE"]},"status":{"type":"string","enum":["PENDING","ACTIVE","COMPLETED","REFUSED"]},"participants":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"},"name":{"type":"string"},"isAuthorizer":{"type":"boolean"},"boardStatus":{"type":"string","enum":["REVIEW","ASK_MODIFY","REVIEWED","APPROVE","ASK_MODIFY_REVIEWED","APPROVED","SCORE","ASK_MODIFY_APPROVED","REFUSED","SCORE_PASS","SCORE_FAIL","COMPLETED","CONFIRM_VALIDITY","DATE_EXPIRED"]},"isAdditionalReviewer":{"type":"boolean"},"isModifyReviewer":{"type":"boolean"}}}}}}}}},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"stepLabel":{"type":"string"},"stepItem":{"type":"string"},"title":{"type":"string"},"content":{"type":"string"},"userId":{"type":"string"},"writerName":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"score":{"type":"integer"},"status":{"type":"string","enum":["REVIEW","ASK_MODIFY","REVIEWED","APPROVE","ASK_MODIFY_REVIEWED","APPROVED","SCORE","ASK_MODIFY_APPROVED","REFUSED","SCORE_PASS","SCORE_FAIL","COMPLETED","CONFIRM_VALIDITY","DATE_EXPIRED"]},"statusDisplay":{"type":"string"},"department":{"type":"string"},"fileUrl":{"type":"string"},"parentId":{"type":"integer","format":"int64"},"indentLevel":{"type":"integer"},"replies":{"type":"array","items":{"type":"object","description":"(circular: ApprovalBoardDTO)"}}}}}}}}}}}},"POST:/api/v2/approvals/decisions":{"path":"/api/v2/approvals/decisions","method":"POST","operationId":"postDecisions","summary":"Process approval decisions","description":"Processes a batch of approval decisions (approve/refuse/accept/reject). Each decision is processed independently. Returns per-item success/failure results. Partial success is supported - failed items don't affect successful ones.","tags":["Approval"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"decisions":{"type":"array","items":{"type":"object","properties":{"projectId":{"type":"string"},"action":{"type":"string","enum":["APPROVE","REFUSE","ACCEPT","REJECT"]},"comment":{"type":"string"},"score":{"type":"integer","format":"int32"}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"projectId":{"type":"string"},"success":{"type":"boolean"},"message":{"type":"string"}}}}}}}}},"POST:/api/v2/approvals/requests":{"path":"/api/v2/approvals/requests","method":"POST","operationId":"postRequests","summary":"Request approval","description":"Submits a project for approval review. Project must be in In-Progress or CanModify status. Sets reviewers, approver, and transitions to Review status.","tags":["Approval"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string"},"reviewerIds":{"type":"array","items":{"type":"string"}},"approverId":{"type":"string"},"targetDate":{"type":"string"},"requestType":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"POST:/api/v2/auth/change-password":{"path":"/api/v2/auth/change-password","method":"POST","operationId":"changePassword_1","summary":"Change password","description":"Changes a user password and returns the current legacy placeholder response (null).","tags":["Auth"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"POST:/api/v2/auth/login":{"path":"/api/v2/auth/login","method":"POST","operationId":"login_1","summary":"Login","description":"Authenticates credentials and returns access/refresh tokens with user details.","tags":["Auth"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"required":["password","userId"],"type":"object","properties":{"userId":{"type":"string"},"password":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"tokenType":{"type":"string","enum":["BASIC","BEARER"]},"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"englishName":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"division":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"}}},"userLevel":{"type":"string","enum":["ADMIN","NORMAL","READER"]},"activeYN":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"lastPasswordChangeDate":{"type":"string","format":"date-time"},"useAccessibleDivisions":{"type":"integer"},"accessibleDivisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"}}}}}}}}}}}}},"POST:/api/v2/auth/logout":{"path":"/api/v2/auth/logout","method":"POST","operationId":"logout_1","summary":"Logout","description":"Invalidates the refresh token for the current user session and returns the legacy result.","tags":["Auth"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"required":["refreshToken"],"type":"object","properties":{"refreshToken":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"string"}}}}}},"POST:/api/v2/auth/password-reset-request":{"path":"/api/v2/auth/password-reset-request","method":"POST","operationId":"passwordResetRequest_1","summary":"Request password reset","description":"Submits a password reset request and returns the current legacy placeholder response (null).","tags":["Auth"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object"}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"POST:/api/v2/auth/refresh":{"path":"/api/v2/auth/refresh","method":"POST","operationId":"refresh_1","summary":"Refresh access token","description":"Validates a refresh token and issues a new token response with access/refresh tokens.","tags":["Auth"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"required":["refreshToken"],"type":"object","properties":{"refreshToken":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"accessToken":{"type":"string"},"refreshToken":{"type":"string"},"tokenType":{"type":"string","enum":["BASIC","BEARER"]},"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"englishName":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"division":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"}}},"userLevel":{"type":"string","enum":["ADMIN","NORMAL","READER"]},"activeYN":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"lastPasswordChangeDate":{"type":"string","format":"date-time"},"useAccessibleDivisions":{"type":"integer"},"accessibleDivisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"}}}}}}}}}}}}},"GET:/api/v2/projects/{projectId}/block-diagrams":{"path":"/api/v2/projects/{projectId}/block-diagrams","method":"GET","operationId":"list_5","summary":"List block diagrams","description":"Returns block diagrams in the project. When search is provided, keyword matching is applied across block diagram fields.","tags":["Block Diagram"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Block diagram keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["FUNCTION","STRUCTURE","FUNCTION_STRUCTURE","STRUCTURE_FUNCTION","PROCESS","SUPER_SYSTEM","FUNCTION_ANALYSIS"]},"alias":{"type":"string"},"order":{"type":"integer"},"description":{"type":"string"},"numberFormat":{"type":"string"}}}}}}}}},"GET:/api/v2/projects/{projectId}/block-diagrams/{blockId}/nodes":{"path":"/api/v2/projects/{projectId}/block-diagrams/{blockId}/nodes","method":"GET","operationId":"getNodes","summary":"Get block nodes","description":"Returns block nodes in list view.","tags":["Block Diagram"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"blockId","in":"path","description":"Block diagram ID","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Block node keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string"},"referencedId":{"type":"string"},"function":{"type":"string"},"item":{"type":"string"},"requirement":{"type":"string"},"type":{"type":"string","enum":["FUNCTION","PART","SUB_FUNCTION","ASSEMBLY","NEW_CHANGE_ASSEMBLY","NEW_CHANGE_PART","NEW_CHANGE_PROCESS","SUPER_SYSTEM","TARGET"]},"order":{"type":"integer"},"processNumber":{"type":"string"},"processFlowChartName":{"type":"string"},"processFlowChartSymbol":{"type":"string"}}}}}}}}},"PUT:/api/v2/projects/{projectId}/block-diagrams/{blockId}/nodes":{"path":"/api/v2/projects/{projectId}/block-diagrams/{blockId}/nodes","method":"PUT","operationId":"saveNodes_1","summary":"Save block nodes","description":"Creates, updates, and deletes block nodes in a single request.","tags":["Block Diagram"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"blockId","in":"path","description":"Block diagram ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"clientId":{"type":"string"},"parentId":{"type":"string"},"clientParentId":{"type":"string"},"referencedId":{"type":"string"},"function":{"type":"string"},"item":{"type":"string"},"requirement":{"type":"string"},"type":{"type":"string","enum":["FUNCTION","PART","SUB_FUNCTION","ASSEMBLY","NEW_CHANGE_ASSEMBLY","NEW_CHANGE_PART","NEW_CHANGE_PROCESS","SUPER_SYSTEM","TARGET"]},"order":{"type":"integer","format":"int32"},"processNumber":{"type":"string"},"processFlowChartName":{"type":"string"},"processFlowChartSymbol":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string"},"id":{"type":"string"},"target":{"type":"string","enum":["WORKSHEET_ID","FAILURE_MODE_WORKSHEET_ID","WORKSHEET_ROW_ID","BLOCK_NODE_ID","BLOCK_REFERENCED_ID","FMM_OBJECT_ID"]}}}}}}}}},"GET:/api/v2/projects/{projectId}/block-diagrams/{blockId}/nodes/tree":{"path":"/api/v2/projects/{projectId}/block-diagrams/{blockId}/nodes/tree","method":"GET","operationId":"getNodesTree","summary":"Get block nodes tree","description":"Returns block nodes in tree view.","tags":["Block Diagram"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"blockId","in":"path","description":"Block diagram ID","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Block node keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string"},"referencedId":{"type":"string"},"function":{"type":"string"},"item":{"type":"string"},"requirement":{"type":"string"},"type":{"type":"string","enum":["FUNCTION","PART","SUB_FUNCTION","ASSEMBLY","NEW_CHANGE_ASSEMBLY","NEW_CHANGE_PART","NEW_CHANGE_PROCESS","SUPER_SYSTEM","TARGET"]},"order":{"type":"integer"},"processNumber":{"type":"string"},"processFlowChartName":{"type":"string"},"processFlowChartSymbol":{"type":"string"},"failureModes":{"type":"array","items":{"type":"object","properties":{"blockNodeId":{"type":"string"},"referencedBlockNodeId":{"type":"string"},"id":{"type":"string"},"name":{"type":"string"},"fmmDiagramType":{"type":"string","enum":["UNUSED","NOT_SELECTED","TYPE_A","TYPE_C"]},"rank":{"type":"string"},"complete":{"type":"string"},"transferFmmObject":{"type":"integer"},"linked":{"type":"boolean"},"revisionSummary":{"type":"object","properties":{"created":{"type":"object","properties":{"userName":{"type":"string"},"updatedDateTime":{"type":"string","format":"date-time"}}},"updated":{"type":"object","properties":{"userName":{"type":"string"},"updatedDateTime":{"type":"string","format":"date-time"}}}}}}}},"children":{"type":"array","items":{"type":"object","description":"(circular: BlockNodeTreeDTO)"}}}}}}}},"deprecated":true},"GET:/api/v2/projects/{projectId}/block-diagrams-excel/{blockId}":{"path":"/api/v2/projects/{projectId}/block-diagrams-excel/{blockId}","method":"GET","operationId":"getDownloadLink","summary":"Get excel export download link","description":"Returns a downloadable URI for block diagram Excel export.","tags":["Block Diagram Excel"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"blockId","in":"path","description":"Block diagram ID","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"downloadUri":{"type":"string"}}}}}}}},"GET:/api/v2/projects/{projectId}/block-diagrams-excel/{uuid}/data":{"path":"/api/v2/projects/{projectId}/block-diagrams-excel/{uuid}/data","method":"GET","operationId":"getData","x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file ID returned by the upload endpoint.","summary":"Get parsed excel data","description":"Returns parsed block node data by upload UUID.","tags":["Block Diagram Excel"],"parameters":[{"name":"uuid","in":"path","description":"Upload UUID","required":true,"schema":{"type":"string"}},{"name":"startRowNumber","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"level","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"item","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"function","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"requirement","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"type","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"processNumber","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"processFlowChartSymbol","in":"query","schema":{"type":"integer","format":"int32"}},{"name":"processFlowChartName","in":"query","schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"rowNumber":{"type":"integer"},"level":{"type":"integer"},"function":{"type":"string"},"item":{"type":"string"},"requirement":{"type":"string"},"type":{"type":"string","enum":["FUNCTION","PART","SUB_FUNCTION","ASSEMBLY","NEW_CHANGE_ASSEMBLY","NEW_CHANGE_PART","NEW_CHANGE_PROCESS","SUPER_SYSTEM","TARGET"]},"order":{"type":"string"},"processNumber":{"type":"string"},"processFlowChartName":{"type":"string"},"processFlowChartSymbol":{"type":"string"}}}}}}}}},"GET:/api/v2/projects/{projectId}/block-diagrams/{blockDiagramId}/failure-modes/{failureModeId}":{"path":"/api/v2/projects/{projectId}/block-diagrams/{blockDiagramId}/failure-modes/{failureModeId}","method":"GET","operationId":"get","summary":"Get failure mode details","description":"Returns a failure mode by ID.","tags":["Failure Mode"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"blockDiagramId","in":"path","description":"Block diagram ID","required":true,"schema":{"type":"string"}},{"name":"failureModeId","in":"path","description":"Failure mode ID","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"DELETE:/api/v2/projects/{projectId}/block-diagrams/{blockDiagramId}/failure-modes/{failureModeId}":{"path":"/api/v2/projects/{projectId}/block-diagrams/{blockDiagramId}/failure-modes/{failureModeId}","method":"DELETE","operationId":"deleteFailureMode","summary":"Delete failure mode","description":"Deletes a predefined failure mode from a specific block diagram within a project. This destructive operation permanently removes the failure mode and any associated FMM diagram structural data from the component. Use this endpoint to clean up incorrect entries, remove obsolete failure definitions, or restructure the block diagram's failure analysis. Since this action is irreversible, it should be called only after user confirmation. It is essential for maintaining accurate and up-to-date Failure Mode and Effects Analysis (FMEA) records.","tags":["Failure Mode"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"blockDiagramId","in":"path","description":"Block diagram ID","required":true,"schema":{"type":"string"}},{"name":"failureModeId","in":"path","description":"Failure mode ID","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"GET:/api/v2/template/block-diagrams/{blockDiagramType}/sheet-headers":{"path":"/api/v2/template/block-diagrams/{blockDiagramType}/sheet-headers","method":"GET","operationId":"getBlockDiagramSheetHeaders","summary":"Get block diagram Excel sheet headers for a given diagram type","description":"Returns the ordered list of column headers used in the Excel import/export sheet for the specified block diagram type. Valid values for blockDiagramType: P-DIAGRAM, BOUNDARY-DIAGRAM.","tags":["Template"],"parameters":[{"name":"blockDiagramType","in":"path","description":"Block diagram type","required":true,"schema":{"type":"string","enum":["FUNCTION","STRUCTURE","FUNCTION_STRUCTURE","STRUCTURE_FUNCTION","PROCESS","SUPER_SYSTEM","FUNCTION_ANALYSIS"]}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"POST:/api/v2/projects/{projectId}/block-diagrams/{blockDiagramId}/failure-modes":{"path":"/api/v2/projects/{projectId}/block-diagrams/{blockDiagramId}/failure-modes","method":"POST","summary":"Create failure modes","description":"Creates one or more failure modes for the target block diagram.","tags":["Failure Mode"],"operationId":"create_2","parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"blockDiagramId","in":"path","description":"Block diagram ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"nodeId":{"type":"string"},"name":{"type":"string"},"id":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/projects/{projectId}/block-diagrams/{blockDiagramId}/failure-modes":{"path":"/api/v2/projects/{projectId}/block-diagrams/{blockDiagramId}/failure-modes","method":"GET","operationId":"list_6","summary":"List block diagram failure modes","description":"Returns failure modes visible in the target block diagram. Optional search applies keyword filtering.","tags":["Failure Mode"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"blockDiagramId","in":"path","description":"Block diagram ID","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Failure mode keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/board":{"path":"/api/v2/board","method":"GET","operationId":"listBoards","summary":"List board comments","description":"Returns board comments for a project and category. Supports optional step filter for comment type. Category determines the domain: approval, BlockDiagram, FmmDiagram, Worksheet, FTA, controlplan, info.","tags":["Board"],"parameters":[{"name":"projectId","in":"query","description":"Project ID (required)","schema":{"type":"string"}},{"name":"category","in":"query","description":"Board category filter","schema":{"type":"string"}},{"name":"step","in":"query","description":"Step label filter for comment type (optional)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/board/{boardId}":{"path":"/api/v2/board/{boardId}","method":"GET","operationId":"getBoard_1","summary":"Get board comment detail","description":"Returns a single board comment with its replies. Replies are nested in the replies field, sorted by depth.","tags":["Board"],"parameters":[{"name":"boardId","in":"path","description":"Board comment ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"POST:/api/v2/board":{"path":"/api/v2/board","method":"POST","operationId":"createBoard","summary":"Create board comment","description":"Creates a new board comment. Sets author from authentication context. projectId, category, title, and content are required.","tags":["Board"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string"},"category":{"type":"string","enum":["APPROVAL","BLOCK_DIAGRAM","FMM_DIAGRAM","WORKSHEET","FTA","CONTROL_PLAN","INFO"]},"stepLabel":{"type":"string"},"title":{"type":"string"},"content":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"POST:/api/v2/board/{boardId}/replies":{"path":"/api/v2/board/{boardId}/replies","method":"POST","operationId":"createReply","summary":"Create reply to board comment","description":"Creates a reply to an existing board comment. Inherits category, projectId, stepLabel, and approvalRound from parent. Title is prefixed with 'Re: '.","tags":["Board"],"parameters":[{"name":"boardId","in":"path","description":"Parent board comment ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"content":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/classification-excel/export":{"path":"/api/v2/classification-excel/export","method":"GET","operationId":"export_3","summary":"Export classification groups and items to Excel","description":"Helper export that writes classification groups and items to an XLSX file and returns a download URI. The main admin snapshot source remains GET /api/v2/classifications. Supports optional keyword search filter on group title or item title. Requires admin permission.","tags":["ClassificationExcel"],"parameters":[{"name":"q","in":"query","description":"Keyword filter for exported rows (max 100 chars)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"DELETE:/api/v2/classifications/items/{itemId}/image":{"path":"/api/v2/classifications/items/{itemId}/image","method":"DELETE","operationId":"deleteItemImage","summary":"Delete classification item image","description":"Deletes the image file for a classification item as a helper endpoint. Use PUT /api/v2/classifications for the main grouped snapshot save, and use this endpoint only to remove the binary asset and clear the image reference.","tags":["Classification"],"parameters":[{"name":"itemId","in":"path","description":"Classification item ID to delete image from","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"symbol":{"type":"string"},"symbolType":{"type":"string","enum":["TEXT","IMAGE"]},"symbolImageUrl":{"type":"string"},"groupId":{"type":"string"}}}}}}}},"GET:/api/v2/classifications":{"path":"/api/v2/classifications","method":"GET","operationId":"getAllGroups","summary":"List all classification groups","description":"Returns the main admin snapshot source for classifications. Each group includes its nested items, the group isDefault flag, and per-item symbol metadata including symbolType and symbolImageUrl. Supports optional keyword search on group title or item title.","tags":["Classification"],"parameters":[{"name":"q","in":"query","description":"Keyword filter applied to group title or item title (max 100 chars)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"isDefault":{"type":"boolean"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"symbol":{"type":"string"},"symbolType":{"type":"string","enum":["TEXT","IMAGE"]},"symbolImageUrl":{"type":"string"},"groupId":{"type":"string"}}}}}}}}}}}},"GET:/api/v2/classifications/by-project/{projectId}":{"path":"/api/v2/classifications/by-project/{projectId}","method":"GET","operationId":"getItemsByProject","summary":"Get classification items by project","description":"Runtime helper read that returns classification items associated with the specified project. Falls back to the default group items if the project has no project_class configured. This is not the main admin snapshot source.","tags":["Classification"],"parameters":[{"name":"projectId","in":"path","description":"Project ID to resolve classification group","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"symbol":{"type":"string"},"symbolType":{"type":"string","enum":["TEXT","IMAGE"]},"symbolImageUrl":{"type":"string"},"groupId":{"type":"string"}}}}}}}}},"GET:/api/v2/classifications/default":{"path":"/api/v2/classifications/default","method":"GET","operationId":"getDefaultItems","summary":"Get default classification items","description":"Helper read that returns items from the current default classification group (the group with setdefault='Y'). This is not the main admin snapshot source.","tags":["Classification"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"symbol":{"type":"string"},"symbolType":{"type":"string","enum":["TEXT","IMAGE"]},"symbolImageUrl":{"type":"string"},"groupId":{"type":"string"}}}}}}}}},"GET:/api/v2/classifications/items":{"path":"/api/v2/classifications/items","method":"GET","operationId":"getItemsByGroup","summary":"Get items by group","description":"Helper read that returns classification items belonging to one group. This is not the main admin snapshot source. The groupId parameter is required. Returns 404 if the group does not exist.","tags":["Classification"],"parameters":[{"name":"groupId","in":"query","description":"Classification group ID (required)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"symbol":{"type":"string"},"symbolType":{"type":"string","enum":["TEXT","IMAGE"]},"symbolImageUrl":{"type":"string"},"groupId":{"type":"string"}}}}}}}}},"POST:/api/v2/classifications/items/{itemId}/image":{"path":"/api/v2/classifications/items/{itemId}/image","method":"POST","operationId":"uploadItemImage","summary":"Upload classification item image","description":"Uploads image binary for a classification item as a helper endpoint. Use PUT /api/v2/classifications for the main grouped snapshot save, and use this endpoint only to create or replace the referenced image file. The image is resized to 22x22 pixels. Accepted formats: gif, jpg, png, bmp.","tags":["Classification"],"parameters":[{"name":"itemId","in":"path","description":"Classification item ID to upload image for","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"file":{"type":"object","properties":{"contentDisposition":{"type":"object","properties":{"type":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"fileName":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"modificationDate":{"type":"string","format":"date-time"},"readDate":{"type":"string","format":"date-time"},"size":{"type":"integer","format":"int64"}}},"entity":{"type":"object"},"headers":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"mediaType":{"type":"object","properties":{"type":{"type":"string"},"subtype":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"wildcardSubtype":{"type":"boolean"},"wildcardType":{"type":"boolean"}}},"messageBodyWorkers":{"type":"object"},"parent":{"type":"object","properties":{"contentDisposition":{"type":"object","properties":{"type":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"fileName":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"modificationDate":{"type":"string","format":"date-time"},"readDate":{"type":"string","format":"date-time"},"size":{"type":"integer","format":"int64"}}},"entity":{"type":"object"},"headers":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"mediaType":{"type":"object","properties":{"type":{"type":"string"},"subtype":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"wildcardSubtype":{"type":"boolean"},"wildcardType":{"type":"boolean"}}},"messageBodyWorkers":{"type":"object"},"parent":{"type":"object"},"providers":{"type":"object"},"bodyParts":{"type":"array","items":{"type":"object","properties":{"contentDisposition":{"type":"object","properties":{"type":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"fileName":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"modificationDate":{"type":"string","format":"date-time"},"readDate":{"type":"string","format":"date-time"},"size":{"type":"integer","format":"int64"}}},"entity":{"type":"object"},"headers":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"mediaType":{"type":"object","properties":{"type":{"type":"string"},"subtype":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"wildcardSubtype":{"type":"boolean"},"wildcardType":{"type":"boolean"}}},"messageBodyWorkers":{"type":"object"},"parent":{"type":"object"},"providers":{"type":"object"},"parameterizedHeaders":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}},"parameterizedHeaders":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}}}}}}}},"providers":{"type":"object"},"simple":{"type":"boolean"},"formDataContentDisposition":{"type":"object","properties":{"type":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"fileName":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"modificationDate":{"type":"string","format":"date-time"},"readDate":{"type":"string","format":"date-time"},"size":{"type":"integer","format":"int64"},"name":{"type":"string"}}},"name":{"type":"string"},"value":{"type":"string"},"parameterizedHeaders":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"symbol":{"type":"string"},"symbolType":{"type":"string","enum":["TEXT","IMAGE"]},"symbolImageUrl":{"type":"string"},"groupId":{"type":"string"}}}}}}}},"PUT:/api/v2/classifications":{"path":"/api/v2/classifications","method":"PUT","operationId":"saveSnapshot","summary":"Save classification snapshot","description":"Saves the full snapshot for classifications using the grouped read shape. The payload carries groups, items, and the single default group in one request. This is a full snapshot replace, so omitted groups and items are deleted. Image binary upload remains a helper flow on /items/{itemId}/image.","tags":["Classification"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["groups"],"properties":{"groups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"defaultGroup":{"type":"boolean"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"symbol":{"type":"string"},"symbolType":{"type":"string","enum":["TEXT","IMAGE"]},"symbolImageUrl":{"type":"string"},"groupId":{"type":"string"}}}}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"isDefault":{"type":"boolean"},"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"symbol":{"type":"string"},"symbolType":{"type":"string","enum":["TEXT","IMAGE"]},"symbolImageUrl":{"type":"string"},"groupId":{"type":"string"}}}}}}}}}}}},"GET:/api/v2/condition-library":{"path":"/api/v2/condition-library","method":"GET","operationId":"getConditionLibrary","summary":"Get condition library nodes (flat)","description":"Returns condition library nodes in flat list form. Optional search matches library text fields. When type is omitted, returns all types.","tags":["Condition Library"],"parameters":[{"name":"type","in":"query","description":"Condition library type. If omitted, returns all types.","schema":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]}},{"name":"q","in":"query","description":"Keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 50, max: 1000)","schema":{"type":"integer","default":50,"format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"serial":{"type":"integer"},"type":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]},"title":{"type":"string"},"id":{"type":"string"},"parentId":{"type":"string"},"depth":{"type":"integer"},"rank":{"type":"integer"},"children":{"type":"array","items":{"type":"object","description":"(circular: ConditionLibraryTreeDTO)"}}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"}}}}}}}},"GET:/api/v2/condition-library/tree":{"path":"/api/v2/condition-library/tree","method":"GET","operationId":"getConditionLibraryTree","summary":"Get condition library tree","description":"Returns condition library nodes as a tree. Type is required by service contract. page/size are accepted only to return explicit validation errors.","tags":["Condition Library"],"parameters":[{"name":"type","in":"query","description":"Condition library type","schema":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]}},{"name":"q","in":"query","description":"Keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}},{"name":"page","in":"query","description":"Rejected for tree endpoint. If supplied, returns 400.","schema":{"type":"integer","format":"int32"}},{"name":"size","in":"query","description":"Rejected for tree endpoint. If supplied, returns 400.","schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"serial":{"type":"integer"},"type":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]},"title":{"type":"string"},"id":{"type":"string"},"parentId":{"type":"string"},"depth":{"type":"integer"},"rank":{"type":"integer"},"children":{"type":"array","items":{"type":"object","description":"(circular: ConditionLibraryTreeDTO)"}}}}}}}}},"PUT:/api/v2/condition-library/{type}/children":{"path":"/api/v2/condition-library/{type}/children","method":"PUT","operationId":"saveConditionLibraryChildren","summary":"Save condition library children","description":"Replaces the entire condition library tree for the requested type. The request contains a recursive tree starting from ROOT's direct children. Server diffs each level: deletes omitted nodes (with subtrees), updates changed titles, creates new nodes, and reorders by array position. Nodes with null children field keep their existing subtree; nodes with an empty children array have their subtree deleted.","tags":["Condition Library"],"parameters":[{"name":"type","in":"path","description":"Condition library type","required":true,"schema":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"children":{"type":"array","items":{"type":"object","properties":{"serial":{"type":"integer","format":"int32"},"title":{"type":"string"},"children":{"type":"array","items":{"type":"object","description":"(circular: ConditionLibraryChildItemDTO)"}}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"POST:/api/v2/condition-library-excel/{type}/{uuid}":{"path":"/api/v2/condition-library-excel/{type}/{uuid}","method":"POST","operationId":"importConditionLibraryFromExcel","summary":"Import condition library nodes from Excel","description":"Imports condition titles from an uploaded Excel file into the requested type and parent node. Blank titles and duplicate sibling titles are ignored.","tags":["Condition Library Excel"],"parameters":[{"name":"type","in":"path","description":"Condition library type","required":true,"schema":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]}},{"name":"uuid","in":"path","description":"Upload UUID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sheetIndex":{"type":"integer","format":"int32"},"titleColumnIndex":{"type":"integer","format":"int32"},"startRowNumber":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}},"x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file identifier returned by the upload endpoint."},"GET:/api/v2/condition-library-excel/export":{"path":"/api/v2/condition-library-excel/export","method":"GET","operationId":"export_12","summary":"Export condition library to Excel","description":"Exports condition library of specified type to an XLSX file.","tags":["Condition Library Excel"],"parameters":[{"name":"type","in":"query","description":"Condition library type","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"POST:/api/v2/condition-library-excel/{type}/{uuid}/read":{"path":"/api/v2/condition-library-excel/{type}/{uuid}/read","method":"POST","operationId":"readFlatPreview_1","summary":"Preview condition library nodes from Excel","description":"Parses an uploaded Excel file into condition library nodes and returns the flat preview list without writing to the database.","tags":["Condition Library Excel"],"parameters":[{"name":"type","in":"path","description":"Condition library type","required":true,"schema":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]}},{"name":"uuid","in":"path","description":"Upload UUID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sheetIndex":{"type":"integer","format":"int32"},"titleColumnIndex":{"type":"integer","format":"int32"},"startRowNumber":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"serial":{"type":"integer"},"type":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]},"title":{"type":"string"},"id":{"type":"string"},"parentId":{"type":"string"},"depth":{"type":"integer"},"rank":{"type":"integer"},"children":{"type":"array","items":{"type":"object","description":"(circular: ConditionLibraryTreeDTO)"}}}}}}}}},"x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file identifier returned by the upload endpoint."},"POST:/api/v2/condition-library-excel/{type}/{uuid}/read/tree":{"path":"/api/v2/condition-library-excel/{type}/{uuid}/read/tree","method":"POST","operationId":"readTreePreview_1","summary":"Preview condition library tree from Excel","description":"Parses an uploaded Excel file into condition library nodes and returns the tree preview list without writing to the database.","tags":["Condition Library Excel"],"parameters":[{"name":"type","in":"path","description":"Condition library type","required":true,"schema":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]}},{"name":"uuid","in":"path","description":"Upload UUID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sheetIndex":{"type":"integer","format":"int32"},"titleColumnIndex":{"type":"integer","format":"int32"},"startRowNumber":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"serial":{"type":"integer"},"type":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]},"title":{"type":"string"},"id":{"type":"string"},"parentId":{"type":"string"},"depth":{"type":"integer"},"rank":{"type":"integer"},"children":{"type":"array","items":{"type":"object","description":"(circular: ConditionLibraryTreeDTO)"}}}}}}}}},"x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file identifier returned by the upload endpoint."},"GET:/api/v2/dashboard/all":{"path":"/api/v2/dashboard/all","method":"GET","operationId":"getAllDashboard","summary":"Get all projects dashboard","description":"Returns dashboard summary for all projects across all divisions. Requires ADMIN privileges.","tags":["Dashboard"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"object","properties":{"highRiskNoAction":{"type":"integer"},"criticalSeverityNoAction":{"type":"integer"},"worsenedCount":{"type":"integer"},"overdueProjects":{"type":"integer"},"pendingApprovals":{"type":"integer"}}},"status":{"type":"object","properties":{"projectDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"rpnDistribution":{"type":"object","properties":{"before":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"after":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}}}},"coverage":{"type":"object","properties":{"totalFailureModes":{"type":"integer"},"totalCauses":{"type":"integer"},"ratedCauses":{"type":"integer"},"coverageRate":{"type":"number","format":"double"}}},"fmeaTypeDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"improvementRate":{"type":"number","format":"double"},"failureModeAnalysis":{"type":"object","properties":{"topFailureModes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"},"avgRpnBefore":{"type":"number","format":"double"},"avgRpnAfter":{"type":"number","format":"double"},"topCauses":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"},"avgS":{"type":"number","format":"double"},"avgO":{"type":"number","format":"double"},"avgD":{"type":"number","format":"double"}}}},"topActions":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"},"avgS":{"type":"number","format":"double"},"avgO":{"type":"number","format":"double"},"avgD":{"type":"number","format":"double"}}}}}}},"severityDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"topUnactionedCauses":{"type":"array","items":{"type":"object","properties":{"causeName":{"type":"string"},"failureModeName":{"type":"string"},"rpn":{"type":"integer"},"severity":{"type":"integer"},"occurrence":{"type":"integer"},"detection":{"type":"integer"}}}},"classificationDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}}}}}},"trends":{"type":"object","properties":{"monthlyProjectCreation":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"zombieProjects":{"type":"integer"}}},"meta":{"type":"object","properties":{"lastUpdated":{"type":"object"},"warming":{"type":"boolean"},"stale":{"type":"boolean"}}}}}}}}}},"GET:/api/v2/dashboard/division":{"path":"/api/v2/dashboard/division","method":"GET","operationId":"getDivisionDashboard","summary":"Get division dashboard","description":"Returns dashboard summary for the current user's division and accessible divisions.","tags":["Dashboard"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"object","properties":{"highRiskNoAction":{"type":"integer"},"criticalSeverityNoAction":{"type":"integer"},"worsenedCount":{"type":"integer"},"overdueProjects":{"type":"integer"},"pendingApprovals":{"type":"integer"}}},"status":{"type":"object","properties":{"projectDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"rpnDistribution":{"type":"object","properties":{"before":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"after":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}}}},"coverage":{"type":"object","properties":{"totalFailureModes":{"type":"integer"},"totalCauses":{"type":"integer"},"ratedCauses":{"type":"integer"},"coverageRate":{"type":"number","format":"double"}}},"fmeaTypeDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"improvementRate":{"type":"number","format":"double"},"failureModeAnalysis":{"type":"object","properties":{"topFailureModes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"},"avgRpnBefore":{"type":"number","format":"double"},"avgRpnAfter":{"type":"number","format":"double"},"topCauses":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"},"avgS":{"type":"number","format":"double"},"avgO":{"type":"number","format":"double"},"avgD":{"type":"number","format":"double"}}}},"topActions":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"},"avgS":{"type":"number","format":"double"},"avgO":{"type":"number","format":"double"},"avgD":{"type":"number","format":"double"}}}}}}},"severityDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"topUnactionedCauses":{"type":"array","items":{"type":"object","properties":{"causeName":{"type":"string"},"failureModeName":{"type":"string"},"rpn":{"type":"integer"},"severity":{"type":"integer"},"occurrence":{"type":"integer"},"detection":{"type":"integer"}}}},"classificationDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}}}}}},"trends":{"type":"object","properties":{"monthlyProjectCreation":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"zombieProjects":{"type":"integer"}}},"meta":{"type":"object","properties":{"lastUpdated":{"type":"object"},"warming":{"type":"boolean"},"stale":{"type":"boolean"}}}}}}}}}},"GET:/api/v2/dashboard/my":{"path":"/api/v2/dashboard/my","method":"GET","operationId":"getMyDashboard","summary":"Get my projects dashboard","description":"Returns dashboard summary for projects the current user participates in. ADMIN users automatically see all projects.","tags":["Dashboard"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"action":{"type":"object","properties":{"highRiskNoAction":{"type":"integer"},"criticalSeverityNoAction":{"type":"integer"},"worsenedCount":{"type":"integer"},"overdueProjects":{"type":"integer"},"pendingApprovals":{"type":"integer"}}},"status":{"type":"object","properties":{"projectDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"rpnDistribution":{"type":"object","properties":{"before":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"after":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}}}},"coverage":{"type":"object","properties":{"totalFailureModes":{"type":"integer"},"totalCauses":{"type":"integer"},"ratedCauses":{"type":"integer"},"coverageRate":{"type":"number","format":"double"}}},"fmeaTypeDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"improvementRate":{"type":"number","format":"double"},"failureModeAnalysis":{"type":"object","properties":{"topFailureModes":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"},"avgRpnBefore":{"type":"number","format":"double"},"avgRpnAfter":{"type":"number","format":"double"},"topCauses":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"},"avgS":{"type":"number","format":"double"},"avgO":{"type":"number","format":"double"},"avgD":{"type":"number","format":"double"}}}},"topActions":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"count":{"type":"integer"},"avgS":{"type":"number","format":"double"},"avgO":{"type":"number","format":"double"},"avgD":{"type":"number","format":"double"}}}}}}},"severityDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"topUnactionedCauses":{"type":"array","items":{"type":"object","properties":{"causeName":{"type":"string"},"failureModeName":{"type":"string"},"rpn":{"type":"integer"},"severity":{"type":"integer"},"occurrence":{"type":"integer"},"detection":{"type":"integer"}}}},"classificationDistribution":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}}}}}},"trends":{"type":"object","properties":{"monthlyProjectCreation":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"count":{"type":"integer"}}}},"zombieProjects":{"type":"integer"}}},"meta":{"type":"object","properties":{"lastUpdated":{"type":"object"},"warming":{"type":"boolean"},"stale":{"type":"boolean"}}}}}}}}}},"GET:/api/v2/division-excel/export":{"path":"/api/v2/division-excel/export","method":"GET","operationId":"export_4","summary":"Export divisions to Excel","description":"Exports division rows to an XLSX file and returns a download URI. This is a helper export surface separate from the main relation-tree snapshot read at GET /api/v2/divisions. Supports an optional helper search filter.","tags":["DivisionExcel"],"parameters":[{"name":"q","in":"query","description":"Division name keyword filter for exported rows","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"GET:/api/v2/divisions":{"path":"/api/v2/divisions","method":"GET","summary":"List division relation tree","operationId":"list_7","description":"Returns the full admin snapshot-source relation tree for divisions. Each root division includes id, name, code, aliases, and relatedDivisions so the toolbar can render the two-level business-division tree without calling helper reads.","tags":["Division"],"parameters":[{"name":"q","in":"query","description":"Division name keyword","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 50, max: 1000)","schema":{"type":"integer","default":50,"format":"int32"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"code":{"type":"string"},"relatedDivisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}}}}}},"GET:/api/v2/divisions/{divisionId}":{"path":"/api/v2/divisions/{divisionId}","method":"GET","summary":"Get division details","operationId":"get_1","description":"Returns a single division in the same snapshot-source shape used by the main relation-tree read, including aliases and relatedDivisions.","tags":["Division"],"parameters":[{"name":"divisionId","in":"path","description":"Division ID to retrieve","required":true,"schema":{"type":"integer","format":"int32"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"code":{"type":"string"},"relatedDivisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}},"description":"(circular: DivisionDTO)"}}}}}}}}},"GET:/api/v2/divisions/{divisionId}/authorized-divisions":{"path":"/api/v2/divisions/{divisionId}/authorized-divisions","method":"GET","operationId":"getAuthorizedDivisions","summary":"Get authorized divisions helper","description":"Returns the helper child-division list for a single root division. The main toolbar snapshot source is GET /api/v2/divisions; this helper read exists for focused inspection or auxiliary tooling.","tags":["Division"],"parameters":[{"name":"divisionId","in":"path","description":"Division ID to query authorized child divisions for","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}}},"GET:/api/v2/divisions/search":{"path":"/api/v2/divisions/search","method":"GET","operationId":"search_1","summary":"Search divisions helper","description":"Returns helper paged search results for divisions. This helper read is separate from the main admin snapshot-source relation-tree read at GET /api/v2/divisions.","tags":["Division"],"parameters":[{"name":"q","in":"query","description":"Division name keyword for helper search","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number for helper search (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size for helper search (default: 50, max: 1000)","schema":{"type":"integer","default":50,"format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"}}}}}}}},"PUT:/api/v2/divisions":{"path":"/api/v2/divisions","method":"PUT","operationId":"saveSnapshot_1","summary":"Save division composite snapshot","description":"Replaces the full division admin snapshot in one payload. Each root item includes division basic fields plus authorizedDivisionIds. Omitted divisions are deleted, authorized mappings are rebuilt in the same transaction, and the latest relation-tree snapshot is returned.","tags":["Division"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"required":["divisions"],"type":"object","properties":{"divisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"authorizedDivisionIds":{"type":"array","items":{"type":"integer","format":"int32"}}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"code":{"type":"string"},"relatedDivisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}}}}}},"GET:/api/v2/projects/{projectId}/documents/categories/{documentCategory}":{"path":"/api/v2/projects/{projectId}/documents/categories/{documentCategory}","method":"GET","operationId":"listByCategory_1","summary":"List documents by category for a project","description":"Returns documents in the specified category for the given project. Document categories group related files (e.g., FMEA reports, reference materials).","tags":["Documents"],"parameters":[{"name":"projectId","in":"path","description":"Project ID whose documents to list","required":true,"schema":{"type":"string"}},{"name":"documentCategory","in":"path","description":"Document category","required":true,"schema":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM","GENERAL"]}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string","enum":["UPLOAD","URL"]},"value":{"type":"string"},"path":{"type":"string"},"context":{"type":"object"},"fileSize":{"type":"string"},"uploadDate":{"type":"string","format":"date"},"category":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM","GENERAL"]}}}}}}}}},"POST:/api/v2/projects/{projectId}/documents/categories/{documentCategory}":{"path":"/api/v2/projects/{projectId}/documents/categories/{documentCategory}","method":"POST","operationId":"add_1","summary":"Add a document to a project category","description":"Adds a new document entry to the specified category within the project. The document file must be uploaded separately via POST /api/v2/files. Requires project membership.","tags":["Documents"],"parameters":[{"name":"projectId","in":"path","description":"Project ID to add the document to","required":true,"schema":{"type":"string"}},{"name":"documentCategory","in":"path","description":"Document category to add to","required":true,"schema":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM","GENERAL"]}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"uuid":{"type":"string"},"value":{"type":"string"},"path":{"type":"string"},"type":{"type":"string","enum":["UPLOAD","URL"]}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string","enum":["UPLOAD","URL"]},"value":{"type":"string"},"path":{"type":"string"},"context":{"type":"object"},"fileSize":{"type":"string"},"uploadDate":{"type":"string","format":"date"},"category":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM","GENERAL"]}}}}}}}},"GET:/api/v2/projects/{projectId}/documents/{documentId}":{"path":"/api/v2/projects/{projectId}/documents/{documentId}","method":"GET","operationId":"get_8","summary":"Get a project document by ID","description":"Returns a single project document by its numeric ID. The document must belong to the specified project.","tags":["Documents"],"parameters":[{"name":"projectId","in":"path","description":"Project ID that owns the document","required":true,"schema":{"type":"string"}},{"name":"documentId","in":"path","description":"Document ID (numeric)","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string","enum":["UPLOAD","URL"]},"value":{"type":"string"},"path":{"type":"string"},"context":{"type":"object"},"fileSize":{"type":"string"},"uploadDate":{"type":"string","format":"date"},"category":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM","GENERAL"]}}}}}}}},"DELETE:/api/v2/projects/{projectId}/documents/{documentId}":{"path":"/api/v2/projects/{projectId}/documents/{documentId}","method":"DELETE","operationId":"delete_5","summary":"Delete a project document","description":"Permanently deletes the specified document from the project. Returns 204 No Content on success. Requires project membership.","tags":["Documents"],"parameters":[{"name":"projectId","in":"path","description":"Project ID that owns the document","required":true,"schema":{"type":"string"}},{"name":"documentId","in":"path","description":"Document ID to delete (numeric)","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"GET:/api/v2/projects/{projectId}/documents/{documentId}/download":{"path":"/api/v2/projects/{projectId}/documents/{documentId}/download","method":"GET","operationId":"getDownloadLink_2","summary":"Get download link for a project document","description":"Generates and returns a download link (FileDownloadResponseDTO) for the specified document. Use GET /api/v1/files/{uuid} with the returned URI to download the actual file.","tags":["Documents"],"parameters":[{"name":"projectId","in":"path","description":"Project ID that owns the document","required":true,"schema":{"type":"string"}},{"name":"documentId","in":"path","description":"Document ID to download (numeric)","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"downloadUri":{"type":"string"}}}}}}}},"GET:/api/v2/projects/{projectId}/documents":{"path":"/api/v2/projects/{projectId}/documents","method":"GET","operationId":"list_14","summary":"List all documents for a project","description":"Returns all documents associated with the specified project, across all categories.","tags":["Documents"],"parameters":[{"name":"projectId","in":"path","description":"Project ID whose documents to list","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string","enum":["UPLOAD","URL"]},"value":{"type":"string"},"path":{"type":"string"},"context":{"type":"object"},"fileSize":{"type":"string"},"uploadDate":{"type":"string","format":"date"},"category":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM","GENERAL"]}}}}}}}}},"GET:/api/v2/projects/{projectId}/documents/categories/{documentCategory}/path/{documentPath}":{"path":"/api/v2/projects/{projectId}/documents/categories/{documentCategory}/path/{documentPath}","method":"GET","operationId":"listByCategoryAndPath","summary":"List documents by category and path for a project","description":"Returns documents that match both the specified category and virtual path prefix. Supports hierarchical document organization within a category.","tags":["Documents"],"parameters":[{"name":"projectId","in":"path","description":"Project ID whose documents to list","required":true,"schema":{"type":"string"}},{"name":"documentCategory","in":"path","description":"Document category","required":true,"schema":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM","GENERAL"]}},{"name":"documentPath","in":"path","description":"Virtual document path prefix for filtering","required":true,"schema":{"pattern":".+","type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string","enum":["UPLOAD","URL"]},"value":{"type":"string"},"path":{"type":"string"},"fileSize":{"type":"string"},"uploadDate":{"type":"string","format":"date"},"category":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM"]}}}}}}}}},"GET:/api/v2/projects/{projectId}/documents/categories":{"path":"/api/v2/projects/{projectId}/documents/categories","method":"GET","operationId":"listByCategory","summary":"List documents across all categories","description":"Returns all project documents when category selection is omitted. This is an alias of GET /projects/{projectId}/documents for category-optional clients.","tags":["Documents"],"parameters":[{"name":"projectId","in":"path","description":"Project ID whose documents to list","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string","enum":["UPLOAD","URL"]},"value":{"type":"string"},"path":{"type":"string"},"context":{"type":"object"},"fileSize":{"type":"string"},"uploadDate":{"type":"string","format":"date"},"category":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM","GENERAL"]}}}}}}}}},"PATCH:/api/v2/projects/{projectId}/documents/{documentId}":{"path":"/api/v2/projects/{projectId}/documents/{documentId}","method":"PATCH","operationId":"rename","summary":"Rename a project document","description":"Updates the stored URL or uploaded file name of the specified project document. Upload documents rename the physical file in place, while URL documents update only the database value.","tags":["Documents"],"parameters":[{"name":"projectId","in":"path","description":"Project ID that owns the document","required":true,"schema":{"type":"string"}},{"name":"documentId","in":"path","description":"Document ID to rename (numeric)","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"required":["value"],"type":"object","properties":{"value":{"type":"string"}}}}},"required":true},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"type":{"type":"string","enum":["UPLOAD","URL"]},"value":{"type":"string"},"path":{"type":"string"},"context":{"type":"object"},"fileSize":{"type":"string"},"uploadDate":{"type":"string","format":"date"},"category":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM","GENERAL"]}}}}}}}},"GET:/api/v2/evaluation":{"path":"/api/v2/evaluation","method":"GET","operationId":"getAllEvaluation","summary":"Get all evaluation criteria by FMEA type","description":"Returns the grouped snapshot-source payload for all FMEA types. Each criteria entry already includes ratings and significance, so FE does not need extra read calls. Supports optional keyword search on criteria name or description.","tags":["Evaluation Criteria"],"parameters":[{"name":"q","in":"query","description":"Keyword filter applied to criteria name and description (max 100 chars)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"fmeaType":{"type":"string"},"criteria":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"defaultSelected":{"type":"boolean"},"displayed":{"type":"boolean"},"ratings":{"type":"object","properties":{"severity":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}},"occurrence":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}},"detection":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}}}},"significance":{"type":"object","properties":{"rpn":{"type":"integer"},"s":{"type":"integer"},"o":{"type":"integer"},"d":{"type":"integer"},"rpnRating":{"type":"string"},"limitType":{"type":"string"}}}}}}}}}}}}}},"GET:/api/v2/evaluation/{fmeaType}":{"path":"/api/v2/evaluation/{fmeaType}","method":"GET","operationId":"getCriteriaByFmeaType","summary":"Get grouped evaluation payload for a specific FMEA type","description":"Returns the same grouped snapshot-source payload as GET /api/v2/evaluation but scoped to one FMEA type. Each criteria entry already includes ratings and significance. Supports optional keyword search on criteria name or description.","tags":["Evaluation Criteria"],"parameters":[{"name":"fmeaType","in":"path","description":"FMEA type","required":true,"schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"q","in":"query","description":"Keyword filter applied to criteria name and description (max 100 chars)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fmeaType":{"type":"string"},"criteria":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"defaultSelected":{"type":"boolean"},"displayed":{"type":"boolean"},"ratings":{"type":"object","properties":{"severity":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}},"occurrence":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}},"detection":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}}}},"significance":{"type":"object","properties":{"rpn":{"type":"integer"},"s":{"type":"integer"},"o":{"type":"integer"},"d":{"type":"integer"},"rpnRating":{"type":"string"},"limitType":{"type":"string"}}}}}}}}}}}}},"GET:/api/v2/evaluation/{fmeaType}/{criteriaId}":{"path":"/api/v2/evaluation/{fmeaType}/{criteriaId}","method":"GET","operationId":"getRatingsByCriteria","summary":"Get S/O/D ratings for a criteria","description":"Helper read that returns severity, occurrence, and detection rating items for a single criteria. The main grouped snapshot-source reads are GET /api/v2/evaluation and GET /api/v2/evaluation/{fmeaType}.","tags":["Evaluation Criteria"],"parameters":[{"name":"fmeaType","in":"path","description":"FMEA type","required":true,"schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"criteriaId","in":"path","description":"Unique ID of the evaluation criteria","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"severity":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}},"occurrence":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}},"detection":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}}}}}}}}},"GET:/api/v2/evaluation/{fmeaType}/{criteriaId}/significance":{"path":"/api/v2/evaluation/{fmeaType}/{criteriaId}/significance","method":"GET","operationId":"getSignificanceByCriteria","summary":"Get significance criteria for a criteria","description":"Helper read that returns significance criteria for a single evaluation criteria. The main grouped snapshot-source reads are GET /api/v2/evaluation and GET /api/v2/evaluation/{fmeaType}.","tags":["Evaluation Criteria"],"parameters":[{"name":"fmeaType","in":"path","description":"FMEA type","required":true,"schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"criteriaId","in":"path","description":"Unique ID of the evaluation criteria","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"rpn":{"type":"integer"},"s":{"type":"integer"},"o":{"type":"integer"},"d":{"type":"integer"},"rpnRating":{"type":"string"},"limitType":{"type":"string"}}}}}}}},"GET:/api/v2/evaluation/{fmeaType}/{criteriaId}/{category}":{"path":"/api/v2/evaluation/{fmeaType}/{criteriaId}/{category}","method":"GET","operationId":"getRatingsByCategory","summary":"Get ratings for a specific S/O/D category","description":"Helper read that returns one rating category for a single criteria. The main grouped snapshot-source reads are GET /api/v2/evaluation and GET /api/v2/evaluation/{fmeaType}.","tags":["Evaluation Criteria"],"parameters":[{"name":"fmeaType","in":"path","description":"FMEA type","required":true,"schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"criteriaId","in":"path","description":"Unique ID of the evaluation criteria","required":true,"schema":{"type":"string"}},{"name":"category","in":"path","description":"Rating category","required":true,"schema":{"type":"string","enum":["SEVERITY","OCCURRENCE","DETECTION"]}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}}}}}}},"PUT:/api/v2/evaluation/{fmeaType}":{"path":"/api/v2/evaluation/{fmeaType}","method":"PUT","operationId":"saveSnapshot_2","summary":"Save evaluation snapshot for a specific FMEA type","description":"Saves a full snapshot scoped to the requested fmeaType. The payload must follow the grouped read shape, including criteria, ratings, significance, defaultSelected, and displayed. This is a full snapshot replace within one fmeaType, so omitted criteria and rating items are deleted.","tags":["Evaluation Criteria"],"parameters":[{"name":"fmeaType","in":"path","description":"FMEA type","required":true,"schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}}],"requestBody":{"content":{"application/json":{"schema":{"required":["criteria"],"type":"object","properties":{"criteria":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"defaultSelected":{"type":"boolean"},"displayed":{"type":"boolean"},"ratings":{"type":"object","properties":{"severity":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer","format":"int32"}}}},"occurrence":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer","format":"int32"}}}},"detection":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer","format":"int32"}}}}}},"significance":{"type":"object","properties":{"rpn":{"type":"integer","format":"int32"},"s":{"type":"integer","format":"int32"},"o":{"type":"integer","format":"int32"},"d":{"type":"integer","format":"int32"},"rpnRating":{"type":"string"},"limitType":{"type":"string"}}}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fmeaType":{"type":"string"},"criteria":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"defaultSelected":{"type":"boolean"},"displayed":{"type":"boolean"},"ratings":{"type":"object","properties":{"severity":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}},"occurrence":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}},"detection":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}}}},"significance":{"type":"object","properties":{"rpn":{"type":"integer"},"s":{"type":"integer"},"o":{"type":"integer"},"d":{"type":"integer"},"rpnRating":{"type":"string"},"limitType":{"type":"string"}}}}}}}}}}}}},"GET:/api/v2/evaluation-excel/export":{"path":"/api/v2/evaluation-excel/export","method":"GET","operationId":"export_5","summary":"Export evaluation criteria to Excel","description":"Exports evaluation criteria to an XLSX file as a helper route. The main grouped snapshot-source reads are GET /api/v2/evaluation and GET /api/v2/evaluation/{fmeaType}. Supports optional FMEA type filter and keyword search on criteria name or description. Requires admin permission.","tags":["EvaluationExcel"],"parameters":[{"name":"fmeaType","in":"query","description":"FMEA type filter (e.g. stress|design|process). Required.","schema":{"type":"string"}},{"name":"q","in":"query","description":"Keyword filter for exported rows (max 100 chars)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"GET:/api/v2/excel/{uuid}":{"path":"/api/v2/excel/{uuid}","method":"GET","summary":"Parse all sheets from an uploaded Excel file","description":"Parses all sheets from a previously uploaded Excel file and returns them as a list of POISheet objects. Requires a prior file upload via POST /api/v2/files. The uuid is the file identifier returned by the upload endpoint. startRowNumber specifies which row to begin parsing (1-based). reindexFromZero resets row indices to start from 0.","tags":["Excel"],"operationId":"parseAll","x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file ID returned by the upload endpoint.","parameters":[{"name":"uuid","in":"path","description":"UUID of the uploaded Excel file (returned by POST /api/v2/files)","required":true,"schema":{"type":"string"}},{"name":"startRowNumber","in":"query","description":"Row number to start parsing from (1-based, optional)","schema":{"type":"integer","format":"int32"}},{"name":"reindexFromZero","in":"query","description":"Whether to reindex row numbers to start from 0 (default: true)","schema":{"type":"boolean","default":true}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}}}},"GET:/api/v2/excel/{uuid}/sheets/{sheetIndex}":{"path":"/api/v2/excel/{uuid}/sheets/{sheetIndex}","method":"GET","summary":"Parse a specific sheet from an uploaded Excel file","description":"Parses a single sheet from a previously uploaded Excel file by its index. Requires a prior file upload via POST /api/v2/files. The uuid is the file identifier returned by the upload endpoint. startRowNumber specifies which row to begin parsing (1-based). reindexFromZero resets row indices to start from 0.","tags":["Excel"],"operationId":"parseSheet","x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file ID returned by the upload endpoint.","parameters":[{"name":"uuid","in":"path","description":"UUID of the uploaded Excel file (returned by POST /api/v2/files)","required":true,"schema":{"type":"string"}},{"name":"sheetIndex","in":"path","description":"Zero-based index of the sheet to parse","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"startRowNumber","in":"query","description":"Row number to start parsing from (1-based, optional)","schema":{"type":"integer","format":"int32"}},{"name":"reindexFromZero","in":"query","description":"Whether to reindex row numbers to start from 0 (default: true)","schema":{"type":"boolean","default":true}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"POST:/api/v2/excel/generate":{"path":"/api/v2/excel/generate","method":"POST","summary":"Generate an Excel file from spreadsheet data","description":"Converts myspreadsheet worksheet data to an Excel (.xlsx) file. Returns a download URI (FileDownloadResponseDTO) for the generated file. Download the file using the returned URI via GET /api/v1/files/{uuid}.","tags":["Excel"],"operationId":"generate","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"worksheetName":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"width":{"type":"integer","format":"int32"},"type":{"type":"string"}}}},"rowsMeta":{"type":"object","additionalProperties":{"type":"object"}},"data":{"type":"array","items":{"type":"array","items":{"type":"object"}}},"mergeCells":{"type":"object","additionalProperties":{"type":"array","items":{"type":"integer","format":"int32"}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"downloadUri":{"type":"string"}}}}}}}},"GET:/api/v2/failure-mode-library":{"path":"/api/v2/failure-mode-library","method":"GET","operationId":"getFlat","summary":"Get failure mode library nodes (flat)","description":"Returns persisted failure mode library nodes as a flat list for admin and tooling use. The response reflects only stored rows, unlike /tree which also materializes missing ProjectType categories.","tags":["Failure Mode Library"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["ROOT","CATEGORY","GROUP","ITEM"]},"order":{"type":"integer"}}}}}}}}},"GET:/api/v2/failure-mode-library/tree":{"path":"/api/v2/failure-mode-library/tree","method":"GET","operationId":"getTree","summary":"Get failure mode library tree","description":"Returns the full tree structure of failure mode library items. Returned as a recursive children structure from ROOT down to ITEM leaf nodes. Used to display the library tree in the setup page.","tags":["Failure Mode Library"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["ROOT","CATEGORY","GROUP","ITEM"]},"order":{"type":"integer"},"children":{"type":"array","items":{"type":"object","description":"(circular: FailureModeLibraryTreeNodeDTO)"}}}}}}}}},"PUT:/api/v2/failure-mode-library/{projectType}/children":{"path":"/api/v2/failure-mode-library/{projectType}/children","method":"PUT","operationId":"saveChildren","summary":"Save failure mode library children","description":"Replaces the entire editable subtree under the requested ProjectType category. The request body contains only descendants below the resolved top-level category. Server performs full-snapshot sync by stable id: omitted nodes are deleted, retained nodes are updated and reordered by array position, and null-id nodes are created. Returns 204 when the subtree is synchronized successfully.","tags":["Failure Mode Library"],"parameters":[{"name":"projectType","in":"path","description":"Project type scope: DESIGN|PROCESS|EQUIPMENT|FA|FTA|CPLAN","required":true,"schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["children"],"properties":{"children":{"type":"array","items":{"type":"object","required":["title"],"properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"children":{"type":"array","items":{"type":"object","description":"(circular: FailureModeLibraryChildItemDTO)"}}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/failure-mode-library-excel/export":{"path":"/api/v2/failure-mode-library-excel/export","method":"GET","operationId":"export_6","summary":"Export failure mode library scope to Excel","description":"Exports the requested projectType subtree to an XLSX file and returns a download URI. Rows use fixed Group/Item columns so the same sheet can be imported back with full-snapshot semantics, including group-only rows.","tags":["Failure Mode Library Excel"],"parameters":[{"name":"projectType","in":"query","description":"Project type scope to export","schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"GET:/api/v2/failure-mode-library-excel/{projectType}/{uuid}/read":{"path":"/api/v2/failure-mode-library-excel/{projectType}/{uuid}/read","method":"GET","operationId":"readFlatPreview","summary":"Preview failure mode library scope from Excel","description":"Parses an uploaded Excel file for the requested projectType scope and returns the validated flat preview without writing to the database.","tags":["Failure Mode Library Excel"],"parameters":[{"name":"projectType","in":"path","description":"Project type scope to preview from Excel","required":true,"schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"uuid","in":"path","description":"Upload UUID","required":true,"schema":{"type":"string"}},{"name":"rowStart","in":"query","description":"Data start row (1-based, default: 2 to skip header)","schema":{"type":"integer","default":2,"format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"parentId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["ROOT","CATEGORY","GROUP","ITEM"]},"order":{"type":"integer"}}}}}}}},"x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} path parameter is the uploaded Excel file identifier."},"GET:/api/v2/failure-mode-library-excel/{projectType}/{uuid}/read/tree":{"path":"/api/v2/failure-mode-library-excel/{projectType}/{uuid}/read/tree","method":"GET","operationId":"readTreePreview","summary":"Preview failure mode library scope tree from Excel","description":"Parses an uploaded Excel file for the requested projectType scope and returns the validated tree preview without writing to the database.","tags":["Failure Mode Library Excel"],"parameters":[{"name":"projectType","in":"path","description":"Project type scope to preview from Excel","required":true,"schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"uuid","in":"path","description":"Upload UUID","required":true,"schema":{"type":"string"}},{"name":"rowStart","in":"query","description":"Data start row (1-based, default: 2 to skip header)","schema":{"type":"integer","default":2,"format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["ROOT","CATEGORY","GROUP","ITEM"]},"order":{"type":"integer"},"children":{"type":"array","items":{"type":"object","description":"(circular: FailureModeLibraryTreeNodeDTO)"}}}}}}}}},"x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} path parameter is the uploaded Excel file identifier."},"POST:/api/v2/failure-mode-library-excel/{projectType}/{uuid}":{"path":"/api/v2/failure-mode-library-excel/{projectType}/{uuid}","method":"POST","operationId":"importExcel","summary":"Import failure mode library scope from Excel","description":"Parses an uploaded Excel file for the requested projectType scope, converts fixed Group/Item rows into the existing saveChildren full-snapshot request, and replaces the target subtree in one sync.","tags":["Failure Mode Library Excel"],"parameters":[{"name":"projectType","in":"path","description":"Project type scope to replace from Excel","required":true,"schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"uuid","in":"path","description":"Upload UUID","required":true,"schema":{"type":"string"}},{"name":"rowStart","in":"query","description":"Data start row (1-based, default: 2 to skip header)","schema":{"type":"integer","default":2,"format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}},"x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} path parameter is the uploaded Excel file identifier."},"PUT:/api/v2/projects/{projectId}/failure-modes/{failureModeId}/fmm-diagram":{"path":"/api/v2/projects/{projectId}/failure-modes/{failureModeId}/fmm-diagram","method":"PUT","operationId":"updateDiagram","summary":"Update FMM diagram","description":"Updates an existing FMM diagram for the target failure mode.","tags":["FMM Diagram"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"failureModeId","in":"path","description":"Failure mode ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"blockDiagramId":{"type":"string"},"fmmDiagramType":{"type":"string","enum":["UNUSED","NOT_SELECTED","TYPE_A","TYPE_C"]},"fmmBlockDiagramType":{"type":"string","enum":["FMM_FUNCTION","FMM_STRUCTURE","FMM_FUNCTION_STRUCTURE","FMM_STRUCTURE_FUNCTION","FMM_PROCESS"]},"fmeaType":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"completed":{"type":"boolean"},"objects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"clientId":{"type":"string"},"oldId":{"type":"string"},"parentId":{"type":"string"},"clientParentId":{"type":"string"},"oldParentId":{"type":"string"},"referencedId":{"type":"string"},"objectType":{"type":"string","enum":["FAILURE_MODE","EFFECT","ITEM","EXTERNAL_ITEM","GROUP","CAUSE_U","CAUSE_I","STRESS","DESIGN","PROCESS"]},"name":{"type":"string"},"order":{"type":"integer","format":"int32"},"sourceId":{"type":"string"},"highItem_unused":{"type":"string"},"processType":{"type":"string"}}}},"deletedObjectIds":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string"},"id":{"type":"string"},"target":{"type":"string","enum":["WORKSHEET_ID","FAILURE_MODE_WORKSHEET_ID","WORKSHEET_ROW_ID","BLOCK_NODE_ID","BLOCK_REFERENCED_ID","FMM_OBJECT_ID"]}}}}}}}}},"POST:/api/v2/projects/{projectId}/failure-modes/{failureModeId}/fmm-diagram":{"path":"/api/v2/projects/{projectId}/failure-modes/{failureModeId}/fmm-diagram","method":"POST","summary":"Create FMM diagram","description":"Creates an FMM diagram for the target failure mode.","tags":["FMM Diagram"],"operationId":"createDiagram","parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"failureModeId","in":"path","description":"Failure mode ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"blockDiagramId":{"type":"string"},"failureModeName":{"type":"string"},"blockName":{"type":"string"},"fmmDiagramType":{"type":"string","enum":["UNUSED","NOT_SELECTED","TYPE_A","TYPE_C"]},"objects":{"type":"array","items":{"type":"object","properties":{"type":{"type":"integer","format":"int32"},"name":{"type":"string"},"parentId":{"type":"string"},"clientId":{"type":"string"},"blockNodeId":{"type":"string"}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string"},"id":{"type":"string"},"target":{"type":"string","enum":["WORKSHEET_ID","FAILURE_MODE_WORKSHEET_ID","WORKSHEET_ROW_ID","BLOCK_NODE_ID","BLOCK_REFERENCED_ID","FMM_OBJECT_ID"]}}}}}}}}},"GET:/api/v2/projects/{projectId}/failure-modes/{failureModeId}/fmm-diagram/nodes":{"path":"/api/v2/projects/{projectId}/failure-modes/{failureModeId}/fmm-diagram/nodes","method":"GET","operationId":"getNodes_1","summary":"Get FMM diagram nodes (flat)","description":"Returns FMM diagram nodes in flat list form. Supports keyword and type filters with paging.","tags":["FMM Diagram"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"failureModeId","in":"path","description":"Failure mode ID","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Node keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}},{"name":"failureModeSearch","in":"query","description":"Failure mode keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"type","in":"query","description":"Node type exact-match filter","schema":{"type":"string","enum":["FAILURE_MODE","EFFECT","ITEM","EXTERNAL_ITEM","GROUP","CAUSE_U","CAUSE_I","STRESS","DESIGN","PROCESS"]}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 50, max: 1000)","schema":{"type":"integer","default":50,"format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"projectId":{"type":"string"},"id":{"type":"string"},"failureModeId":{"type":"string"},"parentId":{"type":"string"},"type":{"type":"string","enum":["FAILURE_MODE","EFFECT","ITEM","EXTERNAL_ITEM","GROUP","CAUSE_U","CAUSE_I","STRESS","DESIGN","PROCESS"]},"name":{"type":"string"},"highItemName_unused":{"type":"string"},"blockNodeId":{"type":"string"},"fmeaType":{"type":"string"},"order":{"type":"integer"},"sourceId":{"type":"string"},"processType":{"type":"string"},"children":{"type":"array","items":{"type":"object","description":"(circular: FMMObject)"}}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"}}}}}}}},"GET:/api/v2/projects/{projectId}/failure-modes/{failureModeId}/fmm-diagram/nodes/tree":{"path":"/api/v2/projects/{projectId}/failure-modes/{failureModeId}/fmm-diagram/nodes/tree","method":"GET","operationId":"getNodesTree_1","summary":"Get FMM diagram nodes tree","description":"Returns FMM diagram nodes in tree form. page/size are rejected when supplied.","tags":["FMM Diagram"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"failureModeId","in":"path","description":"Failure mode ID","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Node keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}},{"name":"failureModeSearch","in":"query","description":"Failure mode keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"type","in":"query","description":"Node type exact-match filter","schema":{"type":"string","enum":["FAILURE_MODE","EFFECT","ITEM","EXTERNAL_ITEM","GROUP","CAUSE_U","CAUSE_I","STRESS","DESIGN","PROCESS"]}},{"name":"page","in":"query","description":"Rejected for tree endpoint. If supplied, returns 400.","schema":{"type":"integer","format":"int32"}},{"name":"size","in":"query","description":"Rejected for tree endpoint. If supplied, returns 400.","schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"projectId":{"type":"string"},"id":{"type":"string"},"failureModeId":{"type":"string"},"parentId":{"type":"string"},"type":{"type":"string","enum":["FAILURE_MODE","EFFECT","ITEM","EXTERNAL_ITEM","GROUP","CAUSE_U","CAUSE_I","STRESS","DESIGN","PROCESS"]},"name":{"type":"string"},"highItemName_unused":{"type":"string"},"blockNodeId":{"type":"string"},"fmeaType":{"type":"string"},"order":{"type":"integer"},"sourceId":{"type":"string"},"processType":{"type":"string"},"children":{"type":"array","items":{"type":"object","description":"(circular: FMMObject)"}}}}}}}}}},"POST:/api/v2/files":{"path":"/api/v2/files","method":"POST","operationId":"upload","summary":"Upload one or more files","description":"Accepts a multipart/form-data request with one or more files in the 'files' field. Stores each file and returns a list of upload results including the assigned UUID per file. The UUID is used as a reference in subsequent import operations (e.g., POST /api/v2/projects/{projectId}/worksheet-excel/{uuid}).","tags":["Files"],"parameters":[],"requestBody":{"content":{"multipart/form-data":{"schema":{"type":"object","properties":{"files":{"type":"array","items":{"type":"object","properties":{"contentDisposition":{"type":"object","properties":{"type":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"fileName":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"modificationDate":{"type":"string","format":"date-time"},"readDate":{"type":"string","format":"date-time"},"size":{"type":"integer","format":"int64"}}},"entity":{"type":"object"},"headers":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"mediaType":{"type":"object","properties":{"type":{"type":"string"},"subtype":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"wildcardSubtype":{"type":"boolean"},"wildcardType":{"type":"boolean"}}},"messageBodyWorkers":{"type":"object"},"parent":{"type":"object","properties":{"contentDisposition":{"type":"object","properties":{"type":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"fileName":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"modificationDate":{"type":"string","format":"date-time"},"readDate":{"type":"string","format":"date-time"},"size":{"type":"integer","format":"int64"}}},"entity":{"type":"object"},"headers":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"mediaType":{"type":"object","properties":{"type":{"type":"string"},"subtype":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"wildcardSubtype":{"type":"boolean"},"wildcardType":{"type":"boolean"}}},"messageBodyWorkers":{"type":"object"},"parent":{"type":"object"},"providers":{"type":"object"},"bodyParts":{"type":"array","items":{"type":"object","properties":{"contentDisposition":{"type":"object","properties":{"type":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"fileName":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"modificationDate":{"type":"string","format":"date-time"},"readDate":{"type":"string","format":"date-time"},"size":{"type":"integer","format":"int64"}}},"entity":{"type":"object"},"headers":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}},"mediaType":{"type":"object","properties":{"type":{"type":"string"},"subtype":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"wildcardSubtype":{"type":"boolean"},"wildcardType":{"type":"boolean"}}},"messageBodyWorkers":{"type":"object"},"parent":{"type":"object"},"providers":{"type":"object"},"parameterizedHeaders":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}},"parameterizedHeaders":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}}}}}}}},"providers":{"type":"object"},"name":{"type":"string"},"value":{"type":"string"},"simple":{"type":"boolean"},"formDataContentDisposition":{"type":"object","properties":{"type":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}},"fileName":{"type":"string"},"creationDate":{"type":"string","format":"date-time"},"modificationDate":{"type":"string","format":"date-time"},"readDate":{"type":"string","format":"date-time"},"size":{"type":"integer","format":"int64"},"name":{"type":"string"}}},"parameterizedHeaders":{"type":"object","additionalProperties":{"type":"array","items":{"type":"object","properties":{"value":{"type":"string"},"parameters":{"type":"object","additionalProperties":{"type":"string"}}}}}}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"uuid":{"type":"object"},"fileName":{"type":"object"},"size":{"type":"object"}}}}}}}},"x-dependency-warning":"This endpoint is an INITIATOR. Subsequent file processing endpoints (e.g., Excel import, data analysis) require the UUID returned by this endpoint. Store the returned UUIDs and pass them to consumer endpoints that accept {uuid} path parameters."},"GET:/api/v2/fourm":{"path":"/api/v2/fourm","method":"GET","operationId":"list_8","summary":"List 4M records","description":"Returns 4M cause records for a given project. Optionally filtered by function node ID (tag) and a secondary node ID (secondTag). Returns all records when no filter is specified.","tags":["4M"],"parameters":[{"name":"projectId","in":"query","description":"Project ID to filter records","schema":{"type":"string"}},{"name":"tag","in":"query","description":"Function node ID filter (tag)","schema":{"type":"string"}},{"name":"secondTag","in":"query","description":"Secondary node ID filter (secondTag)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"projectId":{"type":"string"},"functionNodeId":{"type":"string"},"secondNodeId":{"type":"string"},"category":{"type":"string","enum":["MAN","MACHINE","MATERIAL","ENVIRONMENT"]},"workElement":{"type":"string"},"functionRequirement":{"type":"string"}}}}}}}}},"POST:/api/v2/fourm":{"path":"/api/v2/fourm","method":"POST","operationId":"create_3","summary":"Create a 4M record","description":"Creates a new 4M cause record with the provided fields. Returns the created record as a FourMDTO.","tags":["4M"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string"},"functionNodeId":{"type":"string"},"secondNodeId":{"type":"string"},"category":{"type":"string","enum":["MAN","MACHINE","MATERIAL","ENVIRONMENT"]},"workElement":{"type":"string"},"functionRequirement":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"projectId":{"type":"string"},"functionNodeId":{"type":"string"},"secondNodeId":{"type":"string"},"category":{"type":"string","enum":["MAN","MACHINE","MATERIAL","ENVIRONMENT"]},"workElement":{"type":"string"},"functionRequirement":{"type":"string"}}}}}}}},"GET:/api/v2/fourm/{id}":{"path":"/api/v2/fourm/{id}","method":"GET","operationId":"get_2","summary":"Get a 4M record by ID","description":"Returns a single 4M cause record by its numeric ID. Throws 404 if the record does not exist.","tags":["4M"],"parameters":[{"name":"id","in":"path","description":"4M record ID","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"projectId":{"type":"string"},"functionNodeId":{"type":"string"},"secondNodeId":{"type":"string"},"category":{"type":"string","enum":["MAN","MACHINE","MATERIAL","ENVIRONMENT"]},"workElement":{"type":"string"},"functionRequirement":{"type":"string"}}}}}}}},"PUT:/api/v2/fourm/{id}":{"path":"/api/v2/fourm/{id}","method":"PUT","operationId":"update_2","summary":"Update a 4M record","description":"Updates an existing 4M cause record by its numeric ID. Returns the updated record as a FourMDTO.","tags":["4M"],"parameters":[{"name":"id","in":"path","description":"4M record ID to update","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"category":{"type":"string","enum":["MAN","MACHINE","MATERIAL","ENVIRONMENT"]},"workElement":{"type":"string"},"functionRequirement":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"projectId":{"type":"string"},"functionNodeId":{"type":"string"},"secondNodeId":{"type":"string"},"category":{"type":"string","enum":["MAN","MACHINE","MATERIAL","ENVIRONMENT"]},"workElement":{"type":"string"},"functionRequirement":{"type":"string"}}}}}}}},"DELETE:/api/v2/fourm/{id}":{"path":"/api/v2/fourm/{id}","method":"DELETE","operationId":"delete_2","summary":"Delete a 4M record","description":"Deletes a 4M cause record by its numeric ID. Returns HTTP 204 No Content on success.","tags":["4M"],"parameters":[{"name":"id","in":"path","description":"4M record ID to delete","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"PUT:/api/v2/projects/{projectId}/high-items":{"path":"/api/v2/projects/{projectId}/high-items","method":"PUT","operationId":"update_5","summary":"Batch upsert and reorder high items by project","description":"Updates the project high-item list with batch upsert semantics. Existing items are matched by sequence or title, ranks are recalculated by input order, and omitted items are removed.","tags":["High Items"],"parameters":[{"name":"projectId","in":"path","description":"Project ID whose high items to update","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"topItems":{"type":"array","items":{"type":"string"}},"sequences":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/notice-excel/export":{"path":"/api/v2/notice-excel/export","method":"GET","operationId":"export_7","summary":"Export notices to Excel","description":"Exports notices to an XLSX file and returns a download URI. Supports optional visibility filter. Requires admin permission.","tags":["NoticeExcel"],"parameters":[{"name":"visible","in":"query","description":"Filter by visibility (true/false, omit for all)","schema":{"type":"boolean"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"DELETE:/api/v2/notices/{id}":{"path":"/api/v2/notices/{id}","method":"DELETE","operationId":"delete_3","summary":"Delete notice","description":"Deletes a notice by ID. Requires admin permission. Returns 404 if notice does not exist.","tags":["Notice"],"parameters":[{"name":"id","in":"path","description":"Notice ID to delete","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/notices":{"path":"/api/v2/notices","method":"GET","operationId":"list_9","summary":"List notices","description":"Returns a paged list of notices. Supports optional visibility filter. Use page=0 to retrieve all notices without paging.","tags":["Notice"],"parameters":[{"name":"page","in":"query","description":"Page number (0 = all, default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 20)","schema":{"type":"integer","default":20,"format":"int32"}},{"name":"visible","in":"query","description":"Filter by visibility (true/false, omit for all)","schema":{"type":"boolean"}},{"name":"q","in":"query","description":"Search keyword for title and content (max 100 chars)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"title":{"type":"string"},"authorName":{"type":"string"},"createdAt":{"type":"string"},"viewCount":{"type":"integer"},"visible":{"type":"boolean"}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"}}}}}}}},"GET:/api/v2/notices/{id}":{"path":"/api/v2/notices/{id}","method":"GET","operationId":"getById","summary":"Get notice details","description":"Returns the full detail of a single notice by ID. Returns 404 if the notice does not exist.","tags":["Notice"],"parameters":[{"name":"id","in":"path","description":"Notice ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"title":{"type":"string"},"content":{"type":"string"},"authorName":{"type":"string"},"createdBy":{"type":"string"},"createdAt":{"type":"string"},"viewCount":{"type":"integer"},"visible":{"type":"boolean"},"fileUrl":{"type":"string"}}}}}}}},"PATCH:/api/v2/notices/visibility":{"path":"/api/v2/notices/visibility","method":"PATCH","operationId":"updateBulkVisibility","summary":"Bulk update notice visibility","description":"Updates the visibility of multiple notices at once. Each item specifies an ID and the desired visibility. Returns 404 if any notice ID does not exist.","tags":["Notice"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"visible":{"type":"boolean"}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"PATCH:/api/v2/notices/{id}/visibility":{"path":"/api/v2/notices/{id}/visibility","method":"PATCH","operationId":"updateVisibility","summary":"Update notice visibility","description":"Updates the visibility of a single notice. Returns 404 if the notice does not exist.","tags":["Notice"],"parameters":[{"name":"id","in":"path","description":"Notice ID","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"visible":{"type":"boolean"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"POST:/api/v2/notices":{"path":"/api/v2/notices","method":"POST","operationId":"create_4","summary":"Create notice","description":"Creates a new notice. Requires admin permission. Title and content are required fields.","tags":["Notice"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"content":{"type":"string"},"visible":{"type":"boolean"},"fileUrl":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"title":{"type":"string"},"content":{"type":"string"},"authorName":{"type":"string"},"createdBy":{"type":"string"},"createdAt":{"type":"string"},"viewCount":{"type":"integer"},"visible":{"type":"boolean"},"fileUrl":{"type":"string"}}}}}}}},"PUT:/api/v2/notices/{id}":{"path":"/api/v2/notices/{id}","method":"PUT","operationId":"update_3","summary":"Update notice","description":"Updates an existing notice by ID. Requires admin permission. Returns 404 if notice does not exist.","tags":["Notice"],"parameters":[{"name":"id","in":"path","description":"Notice ID to update","required":true,"schema":{"type":"integer","format":"int64"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"content":{"type":"string"},"visible":{"type":"boolean"},"fileUrl":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"title":{"type":"string"},"content":{"type":"string"},"authorName":{"type":"string"},"createdBy":{"type":"string"},"createdAt":{"type":"string"},"viewCount":{"type":"integer"},"visible":{"type":"boolean"},"fileUrl":{"type":"string"}}}}}}}},"DELETE:/api/v2/notices/batch":{"path":"/api/v2/notices/batch","method":"DELETE","operationId":"deleteBatch","summary":"Batch delete notices","description":"Deletes multiple notices by ID list. Requires admin permission. Returns 404 if any notice ID does not exist.","tags":["Notice"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"integer","format":"int64"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/process-symbol-excel/export":{"path":"/api/v2/process-symbol-excel/export","method":"GET","operationId":"export_8","summary":"Export process symbols to Excel","description":"Exports the current process symbol JSON snapshot list to an XLSX file as a helper route. The main persisted contract remains PUT /api/v2/process-symbols.","tags":["ProcessSymbolExcel"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"POST:/api/v2/process-symbol-excel/{uuid}":{"path":"/api/v2/process-symbol-excel/{uuid}","method":"POST","operationId":"importExcel_1","summary":"Import process symbols from Excel","description":"Parses an uploaded Excel file through the Excel helper route and delegates to the same full-replace save contract as PUT /api/v2/process-symbols.","tags":["ProcessSymbolExcel"],"parameters":[{"name":"uuid","in":"path","description":"UUID of uploaded Excel file","required":true,"schema":{"type":"string"}},{"name":"rowStart","in":"query","description":"Data start row (1-based, default: 2 to skip header)","schema":{"type":"integer","default":2,"format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string"},"description":{"type":"string"},"sortOrder":{"type":"integer"}}}}}}}},"x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file identifier returned by the upload endpoint."},"GET:/api/v2/process-symbol-excel/{uuid}/read":{"path":"/api/v2/process-symbol-excel/{uuid}/read","method":"GET","operationId":"readExcel","summary":"Preview process symbols from Excel","description":"Parses an uploaded Excel file through the helper route and returns the validated process symbol list without writing to the database. Use PUT /api/v2/process-symbols for persistence.","tags":["ProcessSymbolExcel"],"parameters":[{"name":"uuid","in":"path","description":"UUID of uploaded Excel file","required":true,"schema":{"type":"string"}},{"name":"rowStart","in":"query","description":"Data start row (1-based, default: 2 to skip header)","schema":{"type":"integer","default":2,"format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string"},"description":{"type":"string"},"sortOrder":{"type":"integer"}}}}}}}},"x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file identifier returned by the upload endpoint."},"GET:/api/v2/process-symbols":{"path":"/api/v2/process-symbols","method":"GET","operationId":"getAll","summary":"List all process symbols","description":"Returns the full JSON snapshot list of process flow chart symbols ordered by sortOrder for admin configuration. Excel helper routes remain auxiliary import/export/preview tools and do not define the main persisted contract.","tags":["ProcessSymbol"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string"},"description":{"type":"string"},"sortOrder":{"type":"integer"}}}}}}}}},"PUT:/api/v2/process-symbols":{"path":"/api/v2/process-symbols","method":"PUT","operationId":"replaceAll","summary":"Replace all process symbols","description":"Treats the provided JSON snapshot list as the full replace source of truth for process flow chart symbols. Performs a full replace in a single transaction, omitted rows are deleted, and the saved list is returned. Excel helper routes remain auxiliary and ultimately map back to this same persisted contract.","tags":["ProcessSymbol"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"required":["symbol"],"type":"object","properties":{"symbol":{"type":"string"},"description":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"symbol":{"type":"string"},"description":{"type":"string"},"sortOrder":{"type":"integer"}}}}}}}}},"GET:/api/v2/projects":{"path":"/api/v2/projects","method":"GET","operationId":"list_10","summary":"List project summaries","description":"Returns paged project summaries. scope: 'my' (default, user's projects), 'division', 'all' (admin, all active). deleted=true returns trashed projects. Supports divisionId, search, fmeaType, status, sort, pagination.","tags":["Project"],"parameters":[{"name":"scope","in":"query","description":"Search scope (default: my)","schema":{"type":"string","enum":["MY","DIVISION","ALL"],"default":"my"}},{"name":"deleted","in":"query","description":"Deleted-only view","schema":{"type":"boolean","default":false}},{"name":"divisionId","in":"query","description":"Division ID filter (used with scope=division or scope=all)","schema":{"type":"integer","format":"int32"}},{"name":"includeRelated","in":"query","description":"Whether to include mapped related divisions when divisionId is provided","schema":{"type":"boolean"}},{"name":"q","in":"query","description":"Unified keyword (project, title, model, item)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}},{"name":"fmeaType","in":"query","description":"FMEA type filter","schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"status","in":"query","description":"Project status filter","schema":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]}},{"name":"sort","in":"query","description":"Sort format: (project|name|type|status):(asc|desc)","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 50, max: 1000)","schema":{"type":"integer","default":50,"format":"int32"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"tag":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]},"name":{"type":"string"},"item":{"type":"string"},"model":{"type":"string"},"description":{"type":"string"},"leaderName":{"type":"string"},"startDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"status":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]},"completedDate":{"type":"string","format":"date"},"updateDueDate":{"type":"string","format":"date"},"divisionName":{"type":"string"},"divisionScope":{"type":"string"},"worksheetTemplateName":{"type":"string"}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"}}}}}}}},"GET:/api/v2/projects/{projectId}":{"path":"/api/v2/projects/{projectId}","method":"GET","operationId":"get_3","summary":"Get project details","description":"Returns the full project details for the given project ID. Throws 404 if the project does not exist.","tags":["Project"],"parameters":[{"name":"projectId","in":"path","description":"Project ID to retrieve","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"tag":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]},"active":{"type":"boolean"},"projectClass":{"type":"string"},"systemFunction":{"type":"string"},"systemRequirement":{"type":"string"},"item":{"type":"string"},"model":{"type":"string"},"startDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"completedDate":{"type":"string","format":"date"},"updateDueDate":{"type":"string","format":"date"},"evaluationCriteria":{"type":"string"},"description":{"type":"string"},"members":{"type":"array","items":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"division":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}},"role":{"type":"string","enum":["LEADER","MEMBER","REVIEWER","APPROVAL","COMPLETION_REVIEWER","NONE"]}}}},"useApproval":{"type":"boolean"},"score":{"type":"integer"},"status":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]},"divisionId":{"type":"integer"},"worksheetTemplateId":{"type":"integer"}}}}}}}},"GET:/api/v2/projects/my":{"path":"/api/v2/projects/my","method":"GET","operationId":"getSummaryList","summary":"Search my projects (deprecated)","description":"Deprecated. Use GET /api/v2/projects?scope=my instead. Returns paged project summaries filtered by search, fmeaType, status, and sort.","tags":["Project"],"parameters":[{"name":"q","in":"query","description":"Unified keyword (project, title, model, item)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}},{"name":"fmeaType","in":"query","description":"FMEA type filter","schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"status","in":"query","description":"Project status filter","schema":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]}},{"name":"sort","in":"query","description":"Sort format: (project|name|type|status):(asc|desc)","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 50, max: 1000)","schema":{"type":"integer","default":50,"format":"int32"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"tag":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]},"name":{"type":"string"},"item":{"type":"string"},"model":{"type":"string"},"description":{"type":"string"},"leaderName":{"type":"string"},"startDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"status":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]},"completedDate":{"type":"string","format":"date"},"updateDueDate":{"type":"string","format":"date"},"divisionName":{"type":"string"},"divisionScope":{"type":"string"},"worksheetTemplateName":{"type":"string"}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"}}}}}}},"deprecated":true},"GET:/api/v2/projects/{projectId}/summary":{"path":"/api/v2/projects/{projectId}/summary","method":"GET","operationId":"getSummary","summary":"Get project summary","description":"Returns a lightweight summary of a project including key metrics. Throws 404 if the project does not exist.","tags":["Project"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"tag":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]},"name":{"type":"string"},"item":{"type":"string"},"model":{"type":"string"},"description":{"type":"string"},"leaderName":{"type":"string"},"startDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"status":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]},"completedDate":{"type":"string","format":"date"},"updateDueDate":{"type":"string","format":"date"},"divisionName":{"type":"string"},"divisionScope":{"type":"string"},"worksheetTemplateName":{"type":"string"}}}}}}}},"GET:/api/v2/projects/{projectId}/members":{"path":"/api/v2/projects/{projectId}/members","method":"GET","operationId":"getMembers","summary":"List project members","description":"Returns project members. When search is provided, keyword matching is applied.","tags":["Project"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Unified keyword (id, name, email, department, role)","schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"division":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}},"role":{"type":"string","enum":["LEADER","MEMBER","REVIEWER","APPROVAL","COMPLETION_REVIEWER","NONE"]}}}}}}}}},"GET:/api/v2/projects/{projectId}/join-requests":{"path":"/api/v2/projects/{projectId}/join-requests","method":"GET","operationId":"getJoinRequestsByProjectId","summary":"List project join requests","description":"Returns all pending and processed join requests for a project. Requires at least MEMBER role in the project.","tags":["Project"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"requestId":{"type":"integer"},"projectId":{"type":"string"},"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"division":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["PENDING","APPROVED","REJECTED"]},"revisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"menuCode":{"type":"string","enum":["PROJECT","BLOCK","FMM","WORKSHEET","ATTACHED_FILE","WORKSHEET_UNIT","CONTROL_PLAN"]},"actionCode":{"type":"string","enum":["CREATE_PROJECT","MODIFY_PROJECT","DELETE_PROJECT","JOIN_REQUEST","JOIN_APPROVED","JOIN_REJECTED","CREATE","COPY","MODIFY","UPDATE","REVISE","DELETE"]},"projectId":{"type":"string"},"userId":{"type":"string"},"userName":{"type":"string"},"reportNo":{"type":"string"},"refId":{"type":"string"},"updatedDateTime":{"type":"string","format":"date-time"},"description":{"type":"string"},"updatingStatus":{"type":"integer"},"revisionNumber":{"type":"integer"}}}}}}}}}}}},"POST:/api/v2/projects/{projectId}/join-requests":{"path":"/api/v2/projects/{projectId}/join-requests","method":"POST","operationId":"createJoinRequest","summary":"Create a project join request","description":"Creates a join request for the authenticated user to join the specified project. Requires the user to not already be a member (NONE role). Returns the created request ID and a Location header.","tags":["Project"],"parameters":[{"name":"projectId","in":"path","description":"Target project ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"*/*":{"schema":{"type":"object","properties":{"reason":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"PUT:/api/v2/projects/{projectId}/join-requests":{"path":"/api/v2/projects/{projectId}/join-requests","method":"PUT","operationId":"updateJoinRequests","summary":"Approve or reject project join requests in batch","description":"Processes multiple join requests in a single call by approving or rejecting them. Requires at least MEMBER role in the project.","tags":["Project"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int32"},"id":{"type":"integer","format":"int32"},"accepted":{"type":"boolean"},"reason":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"PUT:/api/v2/projects/{projectId}/join-requests/{requestId}":{"path":"/api/v2/projects/{projectId}/join-requests/{requestId}","method":"PUT","operationId":"updateJoinRequest","summary":"Approve or reject a project join request","description":"Processes a single join request by approving or rejecting it. Requires at least MEMBER role in the project.","tags":["Project"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"requestId","in":"path","description":"Join request ID","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"accepted":{"type":"boolean"},"reason":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"GET:/api/v2/projects/{projectId}/high-items":{"path":"/api/v2/projects/{projectId}/high-items","method":"GET","operationId":"list_15","summary":"List high items by project","description":"Returns high items in the target project ordered by rank. Supports optional keyword search on high-item titles and is used by system-definition screens.","tags":["High Items"],"parameters":[{"name":"projectId","in":"path","description":"Project ID whose high items to list","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Keyword filter for high-item titles (optional)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"sequence":{"type":"integer"},"sortOrder":{"type":"integer"}}}}}}}}},"PATCH:/api/v2/projects/{projectId}":{"path":"/api/v2/projects/{projectId}","method":"PATCH","operationId":"patchProject","summary":"Partially update project details","description":"Applies partial updates to a project using the PATCH method. Only provided fields are updated; omitted fields remain unchanged. Returns the updated project details.","tags":["Project"],"parameters":[{"name":"projectId","in":"path","description":"Project ID to update","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"systemFunction":{"type":"string"},"systemRequirement":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"tag":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]},"active":{"type":"boolean"},"projectClass":{"type":"string"},"systemFunction":{"type":"string"},"systemRequirement":{"type":"string"},"item":{"type":"string"},"model":{"type":"string"},"startDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"completedDate":{"type":"string","format":"date"},"updateDueDate":{"type":"string","format":"date"},"evaluationCriteria":{"type":"string"},"description":{"type":"string"},"members":{"type":"array","items":{"type":"object","properties":{"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"division":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}},"role":{"type":"string","enum":["LEADER","MEMBER","REVIEWER","APPROVAL","COMPLETION_REVIEWER","NONE"]}}}},"useApproval":{"type":"boolean"},"score":{"type":"integer"},"status":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]},"divisionId":{"type":"integer"},"worksheetTemplateId":{"type":"integer"}}}}}}}},"POST:/api/v2/admin/projects/dashboard/refresh":{"path":"/api/v2/admin/projects/dashboard/refresh","method":"POST","operationId":"refreshWorksheetSnapshot","summary":"Refresh worksheet dashboard snapshots","description":"Manually refreshes worksheet dashboard snapshots. If divisionId is specified, only that division is refreshed; otherwise all cached divisions are refreshed sequentially. Divisions already being refreshed are skipped. Executes synchronously and returns the result after completion.","tags":["Admin - Dashboard"],"parameters":[{"name":"divisionId","in":"query","description":"Division ID to refresh; if omitted, all cached divisions are refreshed","schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"POST:/api/v2/projects":{"path":"/api/v2/projects","method":"POST","operationId":"createProject","summary":"Create a new project","description":"Creates a new FMEA project with the provided details. Validates name uniqueness, member existence, and date ranges. Returns the created project summary.","tags":["Project"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"required":["approverId","divisionId","dueDate","evaluationCriteria","item","leaderId","memberIds","name","reviewerIds","startDate","tag","type","worksheetTemplateId"],"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"tag":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]},"item":{"type":"string"},"model":{"type":"string"},"worksheetTemplateId":{"type":"integer","format":"int32"},"evaluationCriteria":{"type":"string"},"startDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"description":{"type":"string"},"divisionId":{"type":"integer","format":"int32"},"leaderId":{"type":"string"},"memberIds":{"type":"array","items":{"type":"string"}},"reviewerIds":{"type":"array","items":{"type":"string"}},"approverId":{"type":"string"},"completionReviewerId":{"type":"string"},"useApproval":{"type":"boolean"},"projectClass":{"type":"string"},"causeAnalysisLevel":{"type":"string","enum":["FIRST","SECOND"]},"relatedProjectIds":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"tag":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]},"name":{"type":"string"},"item":{"type":"string"},"model":{"type":"string"},"description":{"type":"string"},"leaderName":{"type":"string"},"startDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"status":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]},"completedDate":{"type":"string","format":"date"},"updateDueDate":{"type":"string","format":"date"},"divisionName":{"type":"string"},"divisionScope":{"type":"string"},"worksheetTemplateName":{"type":"string"}}}}}}}},"PUT:/api/v2/projects/{projectId}":{"path":"/api/v2/projects/{projectId}","method":"PUT","operationId":"updateProject","summary":"Update project details","description":"Updates an existing project's general information. Validates name uniqueness (excluding self), member existence, and date ranges. Returns the updated project summary.","tags":["Project"],"parameters":[{"name":"projectId","in":"path","description":"프로젝트 ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"required":["approverId","divisionId","dueDate","evaluationCriteria","item","leaderId","memberIds","name","reviewerIds","startDate","tag","type","worksheetTemplateId"],"type":"object","properties":{"name":{"type":"string"},"type":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"tag":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]},"item":{"type":"string"},"model":{"type":"string"},"worksheetTemplateId":{"type":"integer","format":"int32"},"evaluationCriteria":{"type":"string"},"startDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"description":{"type":"string"},"divisionId":{"type":"integer","format":"int32"},"leaderId":{"type":"string"},"memberIds":{"type":"array","items":{"type":"string"}},"reviewerIds":{"type":"array","items":{"type":"string"}},"approverId":{"type":"string"},"completionReviewerId":{"type":"string"},"useApproval":{"type":"boolean"},"projectClass":{"type":"string"},"causeAnalysisLevel":{"type":"string","enum":["FIRST","SECOND"]},"relatedProjectIds":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"tag":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]},"name":{"type":"string"},"item":{"type":"string"},"model":{"type":"string"},"description":{"type":"string"},"leaderName":{"type":"string"},"startDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"status":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]},"completedDate":{"type":"string","format":"date"},"updateDueDate":{"type":"string","format":"date"},"divisionName":{"type":"string"},"divisionScope":{"type":"string"},"worksheetTemplateName":{"type":"string"}}}}}}}},"DELETE:/api/v2/projects/groups/{groupId}":{"path":"/api/v2/projects/groups/{groupId}","method":"DELETE","operationId":"deleteGroup","summary":"Delete project group","description":"Deletes every stored row for an owned project group.","tags":["Project Group"],"parameters":[{"name":"groupId","in":"path","description":"Project group ID","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/projects/groups":{"path":"/api/v2/projects/groups","method":"GET","operationId":"getGroups","summary":"List project groups","description":"Returns the authenticated user's project groups as flat DTOs. Each item contains group metadata and projectIds only. Empty-group placeholder rows are hidden from the response.","tags":["Project Group"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"sortOrder":{"type":"integer"},"projectIds":{"type":"array","items":{"type":"string"}}}}}}}}}},"PATCH:/api/v2/projects/groups/{groupId}":{"path":"/api/v2/projects/groups/{groupId}","method":"PATCH","operationId":"renameGroup","summary":"Rename project group","description":"Renames an existing project group owned by the authenticated user. The new name is applied to every stored row of the group, and duplicate names are rejected within the same user scope.","tags":["Project Group"],"parameters":[{"name":"groupId","in":"path","description":"Project group ID","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"required":["name"],"type":"object","properties":{"name":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"sortOrder":{"type":"integer"},"projectIds":{"type":"array","items":{"type":"string"}}}}}}}}},"POST:/api/v2/projects/groups":{"path":"/api/v2/projects/groups","method":"POST","operationId":"createGroup","summary":"Create project group","description":"Creates a new project group for the authenticated user. The server assigns the next sort order in the user's list and stores an empty-group placeholder row. Duplicate names are rejected within the authenticated user's scope.","tags":["Project Group"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"required":["name"],"type":"object","properties":{"name":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"sortOrder":{"type":"integer"},"projectIds":{"type":"array","items":{"type":"string"}}}}}}}}},"PUT:/api/v2/projects/groups":{"path":"/api/v2/projects/groups","method":"PUT","operationId":"batchSaveGroups","summary":"Batch save project groups","description":"Persists the authenticated user's full project-group state in one request. The submitted list is treated as the final source of truth and may create new groups, rename existing groups, replace ordering, move project memberships, normalize empty groups to placeholder rows, and delete omitted owned groups.","tags":["Project Group"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"groups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"name":{"type":"string"},"sortOrder":{"type":"integer","format":"int32"},"projectIds":{"type":"array","items":{"type":"string"}}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"sortOrder":{"type":"integer"},"projectIds":{"type":"array","items":{"type":"string"}}}}}}}}}},"PUT:/api/v2/projects/groups/order":{"path":"/api/v2/projects/groups/order","method":"PUT","operationId":"reorderGroups","summary":"Reorder project groups","description":"Rewrites the authenticated user's project-group sort order. The request must contain the full owned group ID set exactly once, and the server normalizes the stored order to sequential values.","tags":["Project Group"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"required":["groupIds"],"type":"object","properties":{"groupIds":{"type":"array","items":{"type":"integer","format":"int32"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"sortOrder":{"type":"integer"},"projectIds":{"type":"array","items":{"type":"string"}}}}}}}}}},"PUT:/api/v2/projects/groups/ungrouped/projects/{projectId}":{"path":"/api/v2/projects/groups/ungrouped/projects/{projectId}","method":"PUT","operationId":"ungroupProject","summary":"Ungroup project","description":"Removes the authenticated user's grouping membership for a project. If the source group becomes empty, a placeholder row is restored.","tags":["Project Group"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"PUT:/api/v2/projects/groups/{groupId}/projects":{"path":"/api/v2/projects/groups/{groupId}/projects","method":"PUT","operationId":"assignProjects","summary":"Assign projects to group","description":"Moves accessible projects into an owned target group. Source memberships are removed in the authenticated user's scope, target placeholder rows are cleared on first assignment, and emptied source groups are restored as placeholder-only groups.","tags":["Project Group"],"parameters":[{"name":"groupId","in":"path","description":"Project group ID","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"required":["projectIds"],"type":"object","properties":{"projectIds":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"name":{"type":"string"},"sortOrder":{"type":"integer"},"projectIds":{"type":"array","items":{"type":"string"}}}}}}}}},"GET:/api/v2/recommendation-items":{"path":"/api/v2/recommendation-items","method":"GET","operationId":"getRecommendationItems","summary":"List recommended actions","description":"Returns paged recommended actions extracted from worksheet rows. scope controls the project set, and followUpOnly is forwarded as an internal row-filter flag for downstream query handling inside that project set. projectId is optional and narrows the selected project scope when provided.","tags":["Recommendation"],"parameters":[{"name":"projectId","in":"query","description":"Project ID filter","schema":{"type":"string"}},{"name":"status","in":"query","description":"Recommended action status filter","schema":{"type":"string","enum":["NOT_COMPLETED","IN_PROGRESS","DELAY","COMPLETED","ALL"],"default":"All"}},{"name":"q","in":"query","description":"Unified keyword for recommended action fields and worksheet cell values","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}},{"name":"scope","in":"query","description":"Project scope selector (default: my)","schema":{"type":"string","enum":["MY","DIVISION","ALL"],"default":"my"}},{"name":"divisionId","in":"query","description":"Division ID filter, required when scope=division","schema":{"type":"string"}},{"name":"followUpOnly","in":"query","description":"Whether to request internal follow-up row filtering inside the selected project scope (default: false)","schema":{"type":"boolean","default":false}},{"name":"dateFrom","in":"query","description":"Target completion date lower bound, format YYYYMMDD, inclusive","schema":{"type":"string"}},{"name":"dateTo","in":"query","description":"Target completion date upper bound, format YYYYMMDD, inclusive","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 50, max: 1000)","schema":{"type":"integer","default":50,"format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"projectId":{"type":"string"},"reportNo":{"type":"string"},"fmmId":{"type":"string"},"wsId":{"type":"integer"},"status":{"type":"string","enum":["UNKNOWN","COMPLETED","IN_PROGRESS","DELAY"]}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"},"includes":{"type":"object","properties":{"columnHeaders":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"key":{"type":"string"},"title":{"type":"string"},"type":{"type":"string"},"readOnly":{"type":"string"},"width":{"type":"integer"},"valign":{"type":"integer"},"halign":{"type":"integer"},"children":{"type":"array","items":{"type":"object","description":"(circular: ColumnHeader)"}}}}},"projects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"tag":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]},"name":{"type":"string"},"item":{"type":"string"},"model":{"type":"string"},"description":{"type":"string"},"leaderName":{"type":"string"},"startDate":{"type":"string","format":"date"},"dueDate":{"type":"string","format":"date"},"status":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]},"completedDate":{"type":"string","format":"date"},"updateDueDate":{"type":"string","format":"date"},"divisionName":{"type":"string"},"divisionScope":{"type":"string"},"worksheetTemplateName":{"type":"string"}}}}}}}}}}}}},"PUT:/api/v2/recommendation-items/rows":{"path":"/api/v2/recommendation-items/rows","method":"PUT","operationId":"batchUpdateRows","summary":"Batch update recommendation row cells","description":"Upserts cell values for recommendation rows. Each row's columns must be in the editable whitelist (42-48). All updates are in a single transaction.","tags":["Recommendation"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"rows":{"type":"array","items":{"type":"object","properties":{"rowId":{"type":"integer","format":"int32"},"columns":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"value":{"type":"string"}}}}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"updatedRows":{"type":"integer"},"updatedCells":{"type":"integer"}}}}}}}},"GET:/api/v2/projects/{projectId}/revisions":{"path":"/api/v2/projects/{projectId}/revisions","method":"GET","operationId":"list_16","summary":"List project revision history","description":"Retrieves paged revision (change history) records for a project. Supports optional filtering by target (domain type), action (operation type), refId (reference ID), and reportNo (report number). Results are sorted by updated_date DESC. Edit-lock records (empty updated_date) are automatically excluded.","tags":["Revision"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"target","in":"query","description":"Domain filter (target entity type). See RevisionMenuCode for allowed values.","schema":{"type":"string"}},{"name":"refId","in":"query","description":"Reference ID (FMM ID, block ID, etc.)","schema":{"type":"string"}},{"name":"reportNo","in":"query","description":"Worksheet report number","schema":{"type":"string"}},{"name":"action","in":"query","description":"Action type filter. See RevisionActionCode for allowed values.","schema":{"type":"string"}},{"name":"q","in":"query","description":"Search keyword for revision description (comma-separated OR)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Expand search with synonym dictionary (default: true)","schema":{"type":"boolean","default":true}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (1-1000, default: 50)","schema":{"type":"integer","default":50,"format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"menuCode":{"type":"string","enum":["PROJECT","BLOCK","FMM","WORKSHEET","ATTACHED_FILE","WORKSHEET_UNIT","CONTROL_PLAN"]},"actionCode":{"type":"string","enum":["CREATE_PROJECT","MODIFY_PROJECT","DELETE_PROJECT","JOIN_REQUEST","JOIN_APPROVED","JOIN_REJECTED","CREATE","COPY","MODIFY","UPDATE","REVISE","DELETE"]},"projectId":{"type":"string"},"userId":{"type":"string"},"userName":{"type":"string"},"reportNo":{"type":"string"},"refId":{"type":"string"},"updatedDateTime":{"type":"string","format":"date-time"},"description":{"type":"string"},"updatingStatus":{"type":"integer"},"revisionNumber":{"type":"integer"}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"}}}}}}}},"GET:/api/v2/scoring/criteria/tree":{"path":"/api/v2/scoring/criteria/tree","method":"GET","operationId":"getTree_1","summary":"Get scoring criteria tree","description":"Returns the full scoring criteria tree from root to leaf values. Includes scorePercent for s_Part nodes. Used to display the complete criteria hierarchy for completeness evaluation.","tags":["Scoring Criteria"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["SCORING_TYPE","S_PART","S_SCORING","S_VALUE"]},"score":{"type":"integer"},"scorePercent":{"type":"integer"},"children":{"type":"array","items":{"type":"object","description":"(circular: ScoringCriteriaTreeNodeDTO)"}}}}}}}}},"GET:/api/v2/scoring/criteria/{id}":{"path":"/api/v2/scoring/criteria/{id}","method":"GET","operationId":"getItem","summary":"Get scoring criteria item","description":"Helper read that returns a single scoring criteria item by ID. The main admin snapshot source read is GET /api/v2/scoring/criteria/tree. Returns 404 if the item does not exist.","tags":["Scoring Criteria"],"parameters":[{"name":"id","in":"path","description":"Unique ID of the scoring criteria item","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["SCORING_TYPE","S_PART","S_SCORING","S_VALUE"]},"depth":{"type":"integer"},"score":{"type":"integer"},"scorePercent":{"type":"integer"}}}}}}}},"GET:/api/v2/scoring/criteria/{id}/breadcrumb":{"path":"/api/v2/scoring/criteria/{id}/breadcrumb","method":"GET","operationId":"getBreadcrumb","summary":"Get breadcrumb path for scoring criteria item","description":"Helper read that returns the breadcrumb path from root to the specified item. Useful for navigation to show where an item sits in the hierarchy. The main admin snapshot source read is GET /api/v2/scoring/criteria/tree.","tags":["Scoring Criteria"],"parameters":[{"name":"id","in":"path","description":"ID of the scoring criteria item to get the breadcrumb path for","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["SCORING_TYPE","S_PART","S_SCORING","S_VALUE"]},"depth":{"type":"integer"},"score":{"type":"integer"},"scorePercent":{"type":"integer"}}}}}}}}},"GET:/api/v2/scoring/criteria/{id}/children":{"path":"/api/v2/scoring/criteria/{id}/children","method":"GET","operationId":"getChildren","summary":"Get children of scoring criteria item","description":"Helper read that returns the direct children of the specified scoring criteria item. Results are sorted by score descending. The main admin snapshot source read is GET /api/v2/scoring/criteria/tree.","tags":["Scoring Criteria"],"parameters":[{"name":"id","in":"path","description":"ID of the parent scoring criteria item","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["SCORING_TYPE","S_PART","S_SCORING","S_VALUE"]},"depth":{"type":"integer"},"score":{"type":"integer"},"scorePercent":{"type":"integer"}}}}}}}}},"PUT:/api/v2/scoring/criteria/tree":{"path":"/api/v2/scoring/criteria/tree","method":"PUT","operationId":"saveTreeSnapshot","summary":"Save scoring criteria tree snapshot","description":"Saves the entire scoring criteria tree as one snapshot. The request is rooted at the scoring tree root and includes title, description, score, type, and ordered children. Omitted nodes are deleted with their subtrees, and sibling order is persisted by tree array position.","tags":["Scoring Criteria"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["SCORING_TYPE","S_PART","S_SCORING","S_VALUE"]},"score":{"type":"integer","format":"int32"},"children":{"type":"array","items":{"type":"object","description":"(circular: ScoringCriteriaTreeSnapshotSaveRequest)"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"type":{"type":"string","enum":["SCORING_TYPE","S_PART","S_SCORING","S_VALUE"]},"score":{"type":"integer"},"scorePercent":{"type":"integer"},"children":{"type":"array","items":{"type":"object","description":"(circular: ScoringCriteriaTreeNodeDTO)"}}}}}}}}},"GET:/api/v2/search/failure-modes":{"path":"/api/v2/search/failure-modes","method":"GET","operationId":"searchFailureModes","summary":"Search failure modes globally","description":"Searches failure modes across all projects in the system. Supports keyword search (q, optional, comma-separated with synonym expansion), project-level filters (projectId, projectName, fmeaType, status), and sorting (sort=name,asc or sort=rpn,desc). Returns paged results with project summary information and S/O/D cause data.","tags":["Search"],"parameters":[{"name":"q","in":"query","description":"Search keyword for failure mode names (optional, max 100 characters, comma-separated OR search with synonym expansion)","schema":{"type":"string"}},{"name":"scope","in":"query","description":"Search scope (default: my)","schema":{"type":"string","enum":["MY","DIVISION","ALL"],"default":"my"}},{"name":"divisionId","in":"query","description":"Division ID (required when scope='division')","schema":{"type":"string"}},{"name":"projectName","in":"query","description":"Project name filter (partial match)","schema":{"type":"string"}},{"name":"fmeaType","in":"query","description":"FMEA type filter","schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"status","in":"query","description":"Project status filter","schema":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]}},{"name":"sort","in":"query","description":"Sort: 'name,asc', 'name,desc', 'rpn,asc', 'rpn,desc'. Default: name,asc","schema":{"type":"string"}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 50, max: 1000)","schema":{"type":"integer","default":50,"format":"int32"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}},{"name":"projectId","in":"query","description":"Project ID filter (repeatable for multiple projects)","schema":{"type":"array","items":{"type":"string"}}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"blockDiagramId":{"type":"string"},"blockType":{"type":"string","enum":["FMM_FUNCTION","FMM_STRUCTURE","FMM_FUNCTION_STRUCTURE","FMM_STRUCTURE_FUNCTION","FMM_PROCESS"]},"blockNodeId":{"type":"string"},"referencedBlockNodeId":{"type":"string"},"fmmDiagramType":{"type":"string","enum":["UNUSED"]},"complete":{"type":"string"},"project":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"leader":{"type":"string"},"divisionName":{"type":"string"}}},"maxSeverity":{"type":"integer"},"maxRpn":{"type":"integer"},"causes":{"type":"array","items":{"type":"object","properties":{"text":{"type":"string"},"severity":{"type":"integer"},"occurrence":{"type":"integer"},"detection":{"type":"integer"},"rpn":{"type":"integer"},"severityAfter":{"type":"integer"},"occurrenceAfter":{"type":"integer"},"detectionAfter":{"type":"integer"},"rpnAfter":{"type":"integer"}}}}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"}}}}}}}},"GET:/api/v2/search/projects":{"path":"/api/v2/search/projects","method":"GET","operationId":"searchProjects","summary":"Search projects globally","description":"Searches projects across the system with multiple filter options. Supports keyword search (q), scope filtering (my/division/all), FMEA type, status, date ranges, additional info filters, and more. When 'groupBy' is specified, returns grouped results instead of paged results. Additional info filters use repeated parameters (aiId, aiKeyword) for AND intersection.","tags":["Search"],"parameters":[{"name":"q","in":"query","description":"Search keyword for project title, item, model, or description (max 100 characters)","schema":{"type":"string"}},{"name":"scope","in":"query","description":"Search scope (default: my)","schema":{"type":"string","enum":["MY","DIVISION","ALL"],"default":"my"}},{"name":"divisionId","in":"query","description":"Division ID (required when scope='division')","schema":{"type":"string"}},{"name":"leader","in":"query","description":"Leader name filter (partial match)","schema":{"type":"string"}},{"name":"fmeaType","in":"query","description":"FMEA type filter","schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"status","in":"query","description":"Project status filter","schema":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]}},{"name":"tag","in":"query","description":"Project tag filter","schema":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]}},{"name":"item","in":"query","description":"Item/kind filter (partial match)","schema":{"type":"string"}},{"name":"model","in":"query","description":"Model/project number filter (partial match)","schema":{"type":"string"}},{"name":"dueDateFrom","in":"query","description":"Due date range start (YYYYMMDD format)","schema":{"type":"string"}},{"name":"dueDateTo","in":"query","description":"Due date range end (YYYYMMDD format)","schema":{"type":"string"}},{"name":"completedDateFrom","in":"query","description":"Completed date range start (YYYYMMDD format)","schema":{"type":"string"}},{"name":"completedDateTo","in":"query","description":"Completed date range end (YYYYMMDD format)","schema":{"type":"string"}},{"name":"worksheetTemplateId","in":"query","description":"Worksheet template ID filter (exact match)","schema":{"type":"string"}},{"name":"evaluationCriteria","in":"query","description":"Evaluation criteria filter (exact match)","schema":{"type":"string"}},{"name":"description","in":"query","description":"Description filter (partial match)","schema":{"type":"string"}},{"name":"groupBy","in":"query","description":"Group by field. When specified, returns grouped response without paging.","schema":{"type":"string","enum":["DIVISION","ITEM"]}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 50, max: 1000)","schema":{"type":"integer","default":50,"format":"int32"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}},{"name":"sort","in":"query","description":"Sort field (default: project ID desc)","schema":{"type":"string"}},{"name":"aiId","in":"query","description":"Additional info ID list (repeated parameter for AND intersection)","schema":{"type":"array","items":{"type":"string"}}},{"name":"aiKeyword","in":"query","description":"Additional info keyword list (paired with aiId)","schema":{"type":"array","items":{"type":"string"}}},{"name":"aiStartDate","in":"query","description":"Additional info start date list (paired with aiId, YYYYMMDD format)","schema":{"type":"array","items":{"type":"string"}}},{"name":"aiEndDate","in":"query","description":"Additional info end date list (paired with aiId, YYYYMMDD format)","schema":{"type":"array","items":{"type":"string"}}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"groups":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"label":{"type":"string"},"projectCount":{"type":"integer"},"projects":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"tag":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]},"item":{"type":"string"},"model":{"type":"string"},"description":{"type":"string"},"leaderName":{"type":"string"},"startDate":{"type":"string"},"dueDate":{"type":"string"},"completedDate":{"type":"string"},"status":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED"]},"divisionId":{"type":"string"},"divisionName":{"type":"string"},"worksheetTemplateName":{"type":"string"},"evaluationCriteria":{"type":"string"},"projectClass":{"type":"string"}}}}}}},"totalGroups":{"type":"integer"},"totalProjects":{"type":"integer"}}}}}}}},"GET:/api/v2/search/projects/export":{"path":"/api/v2/search/projects/export","method":"GET","operationId":"exportProjects","summary":"Export project search results as Excel","description":"Exports project search results as an Excel (.xlsx) file. Returns a download URI (FileDownloadResponseDTO) for the generated file. Supports the same filter parameters as the search endpoint (excluding groupBy, page, size). Download the file using the returned URI via GET /api/v1/files/{uuid}.","tags":["Search"],"parameters":[{"name":"q","in":"query","description":"Search keyword for project title, item, model, or description (max 100 characters)","schema":{"type":"string"}},{"name":"scope","in":"query","description":"Search scope (default: my)","schema":{"type":"string","enum":["MY","DIVISION","ALL"],"default":"my"}},{"name":"divisionId","in":"query","description":"Division ID (required when scope='division')","schema":{"type":"string"}},{"name":"leader","in":"query","description":"Leader name filter (partial match)","schema":{"type":"string"}},{"name":"fmeaType","in":"query","description":"FMEA type filter","schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},{"name":"status","in":"query","description":"Project status filter","schema":{"type":"string","enum":["IN_PROGRESS","REFUSED","SELF_COMPLETED","REVIEW","APPROVE","SCORE","COMPLETED","ASK_MODIFY_REVIEW","ASK_MODIFY_APPROVE","DELAY","NA","CAN_MODIFY"]}},{"name":"tag","in":"query","description":"Project tag filter","schema":{"type":"string","enum":["NORMAL","MASTER","REFERENCE"]}},{"name":"item","in":"query","description":"Item/kind filter (partial match)","schema":{"type":"string"}},{"name":"model","in":"query","description":"Model/project number filter (partial match)","schema":{"type":"string"}},{"name":"dueDateFrom","in":"query","description":"Due date range start (YYYYMMDD)","schema":{"type":"string"}},{"name":"dueDateTo","in":"query","description":"Due date range end (YYYYMMDD)","schema":{"type":"string"}},{"name":"completedDateFrom","in":"query","description":"Completed date range start (YYYYMMDD)","schema":{"type":"string"}},{"name":"completedDateTo","in":"query","description":"Completed date range end (YYYYMMDD)","schema":{"type":"string"}},{"name":"worksheetTemplateId","in":"query","description":"Worksheet template ID filter","schema":{"type":"string"}},{"name":"evaluationCriteria","in":"query","description":"Evaluation criteria filter","schema":{"type":"string"}},{"name":"description","in":"query","description":"Description filter (partial match)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}},{"name":"aiId","in":"query","description":"Additional info ID list (repeated for AND intersection)","schema":{"type":"array","items":{"type":"string"}}},{"name":"aiKeyword","in":"query","description":"Additional info keyword list (paired with aiId)","schema":{"type":"array","items":{"type":"string"}}},{"name":"aiStartDate","in":"query","description":"Additional info start date list (YYYYMMDD)","schema":{"type":"array","items":{"type":"string"}}},{"name":"aiEndDate","in":"query","description":"Additional info end date list (YYYYMMDD)","schema":{"type":"array","items":{"type":"string"}}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"downloadUri":{"type":"string"}}}}}}}},"GET:/api/v2/synonym-excel/export":{"path":"/api/v2/synonym-excel/export","method":"GET","operationId":"export_9","summary":"Export synonyms to Excel","description":"This helper route exports the current synonym snapshot to XLSX and returns a download URI. The main JSON snapshot source and save routes are GET /api/v2/synonyms and PUT /api/v2/synonyms.","tags":["SynonymExcel"],"parameters":[{"name":"q","in":"query","description":"Optional synonym keyword filter for exported rows","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"downloadUri":{"type":"string"}}}}}}}},"POST:/api/v2/synonym-excel/{uuid}":{"path":"/api/v2/synonym-excel/{uuid}","method":"POST","operationId":"importExcel_2","summary":"Import synonyms from Excel","description":"This helper route parses an uploaded Excel file referenced by uuid and imports synonym groups using the requested row and column range. The main JSON save route remains PUT /api/v2/synonyms.","tags":["SynonymExcel"],"parameters":[{"name":"uuid","in":"path","description":"Uploaded file UUID","required":true,"schema":{"type":"string"}},{"name":"rowStart","in":"query","description":"Data start row (1-based, default: 2 to skip export header)","schema":{"type":"integer","default":2,"format":"int32"}},{"name":"columnStart","in":"query","description":"Start column (1-based, default: 1)","schema":{"type":"integer","format":"int32"}},{"name":"columnEnd","in":"query","description":"End column (1-based, required)","schema":{"type":"integer","format":"int32"}},{"name":"merge","in":"query","description":"Merge rows into matched groups (default: false)","schema":{"type":"boolean"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}},"x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file identifier returned by the upload endpoint."},"GET:/api/v2/synonym-excel/{uuid}/read":{"path":"/api/v2/synonym-excel/{uuid}/read","method":"GET","operationId":"readExcel_1","summary":"Preview synonym import from Excel","description":"This helper route parses an uploaded Excel file referenced by uuid and returns the validated synonym groups that would be created or updated by import without writing to the database. The main JSON snapshot source and save routes remain GET /api/v2/synonyms and PUT /api/v2/synonyms.","tags":["SynonymExcel"],"parameters":[{"name":"uuid","in":"path","description":"Uploaded file UUID","required":true,"schema":{"type":"string"}},{"name":"rowStart","in":"query","description":"Data start row (1-based, default: 2 to skip export header)","schema":{"type":"integer","default":2,"format":"int32"}},{"name":"columnStart","in":"query","description":"Start column (1-based, default: 1)","schema":{"type":"integer","format":"int32"}},{"name":"columnEnd","in":"query","description":"End column (1-based, required)","schema":{"type":"integer","format":"int32"}},{"name":"merge","in":"query","description":"Merge rows into matched groups (default: false)","schema":{"type":"boolean"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"terms":{"type":"array","items":{"type":"string"}},"termCount":{"type":"integer"}}}}}}}},"x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file identifier returned by the upload endpoint."},"GET:/api/v2/synonyms":{"path":"/api/v2/synonyms","method":"GET","operationId":"list_11","summary":"List synonym snapshot groups","description":"Returns the full synonym group list as the JSON snapshot source for the admin toolbar. Optional q filtering is still available, but the response remains a full-list array response.","tags":["Synonym"],"parameters":[{"name":"q","in":"query","description":"Synonym keyword filter","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"terms":{"type":"array","items":{"type":"string"}},"termCount":{"type":"integer"}}}}}}}}},"GET:/api/v2/synonyms/expand":{"path":"/api/v2/synonyms/expand","method":"GET","operationId":"expand","summary":"Expand synonym terms","description":"This helper read expands a keyword into matching synonym terms. It is separate from the main GET /api/v2/synonyms snapshot source used by the admin toolbar.","tags":["Synonym"],"parameters":[{"name":"keyword","in":"query","description":"Keyword to expand into matching synonym terms","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"string"}}}}}}},"GET:/api/v2/synonyms/metadata":{"path":"/api/v2/synonyms/metadata","method":"GET","operationId":"metadata","summary":"Get synonym metadata","description":"This helper read returns synonym dictionary metadata such as group count and max term count. It is separate from the main GET /api/v2/synonyms snapshot source.","tags":["Synonym"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"maxTermCount":{"type":"integer"},"groupCount":{"type":"integer"}}}}}}}},"GET:/api/v2/synonyms/{groupId}":{"path":"/api/v2/synonyms/{groupId}","method":"GET","operationId":"get_4","summary":"Get synonym group","description":"This helper read returns a single synonym group with its ordered term list. The main admin snapshot source remains GET /api/v2/synonyms.","tags":["Synonym"],"parameters":[{"name":"groupId","in":"path","description":"Synonym group ID to retrieve","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"terms":{"type":"array","items":{"type":"string"}},"termCount":{"type":"integer"}}}}}}}},"PUT:/api/v2/synonyms":{"path":"/api/v2/synonyms","method":"PUT","operationId":"saveSnapshot_3","summary":"Save synonym snapshot","description":"Saves the full snapshot from the admin toolbar and returns the latest full list. This is the main JSON save path, omitted groups are deleted, and Excel helper routes remain secondary helpers.","tags":["Synonym"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"required":["groups"],"type":"object","properties":{"groups":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"terms":{"type":"array","items":{"type":"string"}}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"terms":{"type":"array","items":{"type":"string"}},"termCount":{"type":"integer"}}}}}}}}},"GET:/api/v2/open/metrics/{apType}/constants":{"path":"/api/v2/open/metrics/{apType}/constants","method":"GET","summary":"Get metric constants for an AP type","description":"Returns severity, occurrence, and detection metric constants for the given action priority type (AIAG or MSR). Used to populate evaluation criteria dropdowns and compute RPN values. This endpoint is open and does not require authentication.","tags":["Metrics"],"operationId":"getMetricConstants","parameters":[{"name":"apType","in":"path","description":"Action priority type","required":true,"schema":{"type":"string","enum":["AIAG","MSR"]}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"GET:/api/v2/system/context-version":{"path":"/api/v2/system/context-version","method":"GET","summary":"Get version info for a deployed web application context","description":"Reads the VERSION file from the given Tomcat webapp sub-path and returns the version string and build date. Returns 400 if contextPath is missing, 404 if the VERSION file does not exist or is unreadable.","tags":["System"],"operationId":"checkContext","parameters":[{"name":"contextPath","in":"query","description":"Tomcat webapp sub-path to read the VERSION file from (e.g. 'fmea-frontend'). Leading slashes are stripped.","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/system/health":{"path":"/api/v2/system/health","method":"GET","summary":"Health check","description":"Returns the current server status and UTC timestamp. Always returns HTTP 200 with status='UP' when the application is running. No authentication required.","tags":["System"],"operationId":"health","parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/system/settings":{"path":"/api/v2/system/settings","method":"GET","operationId":"getSettings","summary":"Get system settings","description":"Returns all system settings grouped into 13 categories. Requires admin permission. Mail password is always excluded from the response.","tags":["System Settings"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"company":{"type":"object","properties":{"name":{"type":"string"}}},"scoring":{"type":"object","properties":{"enabled":{"type":"boolean"},"threshold":{"type":"integer"},"alwaysEnabled":{"type":"boolean"}}},"projectPeriod":{"type":"object","properties":{"createMaxDurationDays":{"type":"integer"},"modifyMaxDurationDays":{"type":"integer"}}},"fmCheckprint":{"type":"object","properties":{"enabled":{"type":"boolean"},"designEnabled":{"type":"boolean"},"processEnabled":{"type":"boolean"},"equipmentEnabled":{"type":"boolean"}}},"fmmDisplay":{"type":"object","properties":{"showCreationInfo":{"type":"boolean"},"highlightNewFailureModes":{"type":"boolean"},"useBfmmType":{"type":"boolean"}}},"security":{"type":"object","properties":{"forcePasswordChangeOnFirstLogin":{"type":"boolean"},"enforcePasswordComplexity":{"type":"boolean"},"restrictCommonSequences":{"type":"boolean"},"preventPasswordReuse":{"type":"boolean"},"enforcePasswordExpiration":{"type":"boolean"},"passwordExpirationDays":{"type":"integer"},"maxLoginFailures":{"type":"integer"}}},"mail":{"type":"object","properties":{"enabled":{"type":"boolean"},"host":{"type":"string"},"port":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"},"senderAddress":{"type":"string"},"rpnThreshold":{"type":"integer"}}},"serverUrl":{"type":"object","properties":{"protocol":{"type":"string"},"host":{"type":"string"}}},"projectManagement":{"type":"object","properties":{"defaultApprovalOnCompletion":{"type":"boolean"},"restrictEditAfterApproval":{"type":"boolean"}}},"validationApproval":{"type":"object","properties":{"enabled":{"type":"boolean"},"checkEmptyRecommendedAction":{"type":"boolean"},"checkEmptyDetectionAction":{"type":"boolean"},"notifyFollowUpAssignees":{"type":"boolean"},"checkRpnThreshold":{"type":"boolean"},"checkUnresolvedHighItems":{"type":"boolean"}}},"revisionEditing":{"type":"object","properties":{"enabled":{"type":"boolean"},"allowRevisionNumberEdit":{"type":"boolean"},"allowRevisionDateEdit":{"type":"boolean"},"allowRevisionReasonEdit":{"type":"boolean"}}},"reviewer":{"type":"object","properties":{"checkReviewerEnabled":{"type":"boolean"}}},"blankText":{"type":"object","properties":{"texts":{"type":"array","items":{"type":"string"}}}}}}}}}}},"PUT:/api/v2/system/settings":{"path":"/api/v2/system/settings","method":"PUT","operationId":"updateSettings","summary":"Update system settings","description":"Updates system settings with partial merge at group level. Only groups included in the request body are updated. Null groups are skipped. Mail password null means keep existing value. Returns the complete settings after update.","tags":["System Settings"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"company":{"type":"object","properties":{"name":{"type":"string"}}},"scoring":{"type":"object","properties":{"enabled":{"type":"boolean"},"threshold":{"type":"integer","format":"int32"},"alwaysEnabled":{"type":"boolean"}}},"projectPeriod":{"type":"object","properties":{"createMaxDurationDays":{"type":"integer","format":"int32"},"modifyMaxDurationDays":{"type":"integer","format":"int32"}}},"fmCheckprint":{"type":"object","properties":{"enabled":{"type":"boolean"},"designEnabled":{"type":"boolean"},"processEnabled":{"type":"boolean"},"equipmentEnabled":{"type":"boolean"}}},"fmmDisplay":{"type":"object","properties":{"showCreationInfo":{"type":"boolean"},"highlightNewFailureModes":{"type":"boolean"},"useBfmmType":{"type":"boolean"}}},"security":{"type":"object","properties":{"forcePasswordChangeOnFirstLogin":{"type":"boolean"},"enforcePasswordComplexity":{"type":"boolean"},"restrictCommonSequences":{"type":"boolean"},"preventPasswordReuse":{"type":"boolean"},"enforcePasswordExpiration":{"type":"boolean"},"passwordExpirationDays":{"type":"integer","format":"int32"},"maxLoginFailures":{"type":"integer","format":"int32"}}},"mail":{"type":"object","properties":{"enabled":{"type":"boolean"},"host":{"type":"string"},"port":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"},"senderAddress":{"type":"string"},"rpnThreshold":{"type":"integer","format":"int32"}}},"serverUrl":{"type":"object","properties":{"protocol":{"type":"string"},"host":{"type":"string"}}},"projectManagement":{"type":"object","properties":{"defaultApprovalOnCompletion":{"type":"boolean"},"restrictEditAfterApproval":{"type":"boolean"}}},"validationApproval":{"type":"object","properties":{"enabled":{"type":"boolean"},"checkEmptyRecommendedAction":{"type":"boolean"},"checkEmptyDetectionAction":{"type":"boolean"},"notifyFollowUpAssignees":{"type":"boolean"},"checkRpnThreshold":{"type":"boolean"},"checkUnresolvedHighItems":{"type":"boolean"}}},"revisionEditing":{"type":"object","properties":{"enabled":{"type":"boolean"},"allowRevisionNumberEdit":{"type":"boolean"},"allowRevisionDateEdit":{"type":"boolean"},"allowRevisionReasonEdit":{"type":"boolean"}}},"reviewer":{"type":"object","properties":{"checkReviewerEnabled":{"type":"boolean"}}},"blankText":{"type":"object","properties":{"texts":{"type":"array","items":{"type":"string"}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"company":{"type":"object","properties":{"name":{"type":"string"}}},"scoring":{"type":"object","properties":{"enabled":{"type":"boolean"},"threshold":{"type":"integer"},"alwaysEnabled":{"type":"boolean"}}},"projectPeriod":{"type":"object","properties":{"createMaxDurationDays":{"type":"integer"},"modifyMaxDurationDays":{"type":"integer"}}},"fmCheckprint":{"type":"object","properties":{"enabled":{"type":"boolean"},"designEnabled":{"type":"boolean"},"processEnabled":{"type":"boolean"},"equipmentEnabled":{"type":"boolean"}}},"fmmDisplay":{"type":"object","properties":{"showCreationInfo":{"type":"boolean"},"highlightNewFailureModes":{"type":"boolean"},"useBfmmType":{"type":"boolean"}}},"security":{"type":"object","properties":{"forcePasswordChangeOnFirstLogin":{"type":"boolean"},"enforcePasswordComplexity":{"type":"boolean"},"restrictCommonSequences":{"type":"boolean"},"preventPasswordReuse":{"type":"boolean"},"enforcePasswordExpiration":{"type":"boolean"},"passwordExpirationDays":{"type":"integer"},"maxLoginFailures":{"type":"integer"}}},"mail":{"type":"object","properties":{"enabled":{"type":"boolean"},"host":{"type":"string"},"port":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"},"senderAddress":{"type":"string"},"rpnThreshold":{"type":"integer"}}},"serverUrl":{"type":"object","properties":{"protocol":{"type":"string"},"host":{"type":"string"}}},"projectManagement":{"type":"object","properties":{"defaultApprovalOnCompletion":{"type":"boolean"},"restrictEditAfterApproval":{"type":"boolean"}}},"validationApproval":{"type":"object","properties":{"enabled":{"type":"boolean"},"checkEmptyRecommendedAction":{"type":"boolean"},"checkEmptyDetectionAction":{"type":"boolean"},"notifyFollowUpAssignees":{"type":"boolean"},"checkRpnThreshold":{"type":"boolean"},"checkUnresolvedHighItems":{"type":"boolean"}}},"revisionEditing":{"type":"object","properties":{"enabled":{"type":"boolean"},"allowRevisionNumberEdit":{"type":"boolean"},"allowRevisionDateEdit":{"type":"boolean"},"allowRevisionReasonEdit":{"type":"boolean"}}},"reviewer":{"type":"object","properties":{"checkReviewerEnabled":{"type":"boolean"}}},"blankText":{"type":"object","properties":{"texts":{"type":"array","items":{"type":"string"}}}}}}}}}}},"GET:/api/v2/system/settings/public":{"path":"/api/v2/system/settings/public","method":"GET","operationId":"getPublicSettings","summary":"Get public system settings","description":"Returns system settings visible to all users. Excludes sensitive groups: security, mail, serverUrl.","tags":["System Settings"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"company":{"type":"object","properties":{"name":{"type":"string"}}},"scoring":{"type":"object","properties":{"enabled":{"type":"boolean"},"threshold":{"type":"integer"},"alwaysEnabled":{"type":"boolean"}}},"projectPeriod":{"type":"object","properties":{"createMaxDurationDays":{"type":"integer"},"modifyMaxDurationDays":{"type":"integer"}}},"fmCheckprint":{"type":"object","properties":{"enabled":{"type":"boolean"},"designEnabled":{"type":"boolean"},"processEnabled":{"type":"boolean"},"equipmentEnabled":{"type":"boolean"}}},"fmmDisplay":{"type":"object","properties":{"showCreationInfo":{"type":"boolean"},"highlightNewFailureModes":{"type":"boolean"},"useBfmmType":{"type":"boolean"}}},"security":{"type":"object","properties":{"forcePasswordChangeOnFirstLogin":{"type":"boolean"},"enforcePasswordComplexity":{"type":"boolean"},"restrictCommonSequences":{"type":"boolean"},"preventPasswordReuse":{"type":"boolean"},"enforcePasswordExpiration":{"type":"boolean"},"passwordExpirationDays":{"type":"integer"},"maxLoginFailures":{"type":"integer"}}},"mail":{"type":"object","properties":{"enabled":{"type":"boolean"},"host":{"type":"string"},"port":{"type":"string"},"username":{"type":"string"},"password":{"type":"string"},"senderAddress":{"type":"string"},"rpnThreshold":{"type":"integer"}}},"serverUrl":{"type":"object","properties":{"protocol":{"type":"string"},"host":{"type":"string"}}},"projectManagement":{"type":"object","properties":{"defaultApprovalOnCompletion":{"type":"boolean"},"restrictEditAfterApproval":{"type":"boolean"}}},"validationApproval":{"type":"object","properties":{"enabled":{"type":"boolean"},"checkEmptyRecommendedAction":{"type":"boolean"},"checkEmptyDetectionAction":{"type":"boolean"},"notifyFollowUpAssignees":{"type":"boolean"},"checkRpnThreshold":{"type":"boolean"},"checkUnresolvedHighItems":{"type":"boolean"}}},"revisionEditing":{"type":"object","properties":{"enabled":{"type":"boolean"},"allowRevisionNumberEdit":{"type":"boolean"},"allowRevisionDateEdit":{"type":"boolean"},"allowRevisionReasonEdit":{"type":"boolean"}}},"reviewer":{"type":"object","properties":{"checkReviewerEnabled":{"type":"boolean"}}},"blankText":{"type":"object","properties":{"texts":{"type":"array","items":{"type":"string"}}}}}}}}}}},"GET:/api/v2/projects/{projectId}/system-definition/conditions":{"path":"/api/v2/projects/{projectId}/system-definition/conditions","method":"GET","operationId":"listConditions","summary":"List system definition conditions","description":"Returns system definition conditions in the target project by scope and type. Optional filters apply to search, division, project title, model, and item.","tags":["System Definition"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"scope","in":"query","description":"Condition scope filter. If omitted, defaults to all.","schema":{"type":"string","enum":["OWNED","CANDIDATE","ALL"],"default":"all"}},{"name":"type","in":"query","description":"Condition type filter. If omitted, returns all types.","schema":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]}},{"name":"q","in":"query","description":"Condition keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}},{"name":"divisionId","in":"query","description":"Division filter for candidate scope (must be > 0)","schema":{"type":"integer","format":"int32"}},{"name":"projectTitle","in":"query","description":"Project title filter for candidate scope","schema":{"type":"string"}},{"name":"model","in":"query","description":"Model filter for candidate scope","schema":{"type":"string"}},{"name":"item","in":"query","description":"Item filter for candidate scope","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"sequence":{"type":"integer"},"type":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]},"scope":{"type":"string","enum":["OWNED","CANDIDATE","ALL"]},"title":{"type":"string"}}}}}}}}},"PUT:/api/v2/projects/{projectId}/system-definition/summary":{"path":"/api/v2/projects/{projectId}/system-definition/summary","method":"PUT","operationId":"updateSummary","summary":"Update system definition summary","description":"Updates system function and system requirement in the target project. For non-process projects, values are synchronized to the top rows of function and structure BOM.","tags":["System Definition"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"systemFunction":{"type":"string"},"systemRequirement":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"POST:/api/v2/projects/{projectId}/system-definition/conditions":{"path":"/api/v2/projects/{projectId}/system-definition/conditions","method":"POST","operationId":"createCondition","summary":"Create system definition condition","description":"Creates an owned condition in the target project for the requested type and title. If the same type/title already exists, the existing condition is returned.","tags":["System Definition"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"required":["title"],"type":"object","properties":{"type":{"type":"string"},"title":{"type":"string"}}}}},"required":true},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"sequence":{"type":"integer"},"type":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]},"scope":{"type":"string","enum":["OWNED","CANDIDATE","ALL"]},"title":{"type":"string"}}}}}}}},"DELETE:/api/v2/projects/{projectId}/system-definition/conditions":{"path":"/api/v2/projects/{projectId}/system-definition/conditions","method":"DELETE","operationId":"deleteConditions","summary":"Delete system definition conditions","description":"Deletes owned conditions in the target project by sequence list. All requested sequences must exist or the request fails without partial deletion.","tags":["System Definition"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sequences":{"type":"array","items":{"type":"integer","format":"int32"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"PATCH:/api/v2/projects/{projectId}/system-definition/conditions/{sequence}":{"path":"/api/v2/projects/{projectId}/system-definition/conditions/{sequence}","method":"PATCH","operationId":"updateCondition","summary":"Update system definition condition","description":"Updates the title of an owned condition identified by sequence in the target project. Duplicate titles within the same condition type are rejected.","tags":["System Definition"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"sequence","in":"path","description":"Condition sequence","required":true,"schema":{"type":"integer","format":"int32","minimum":1}}],"requestBody":{"content":{"application/json":{"schema":{"required":["title"],"type":"object","properties":{"title":{"type":"string"}}}}},"required":true},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"sequence":{"type":"integer"},"type":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]},"scope":{"type":"string","enum":["OWNED","CANDIDATE","ALL"]},"title":{"type":"string"}}}}}}}},"GET:/api/v2/projects/{projectId}/system-definition-excel/conditions/export":{"path":"/api/v2/projects/{projectId}/system-definition-excel/conditions/export","method":"GET","operationId":"exportConditions","summary":"Export system definition conditions to Excel UUID","description":"Exports owned condition titles by type from the target project into a temporary Excel file and returns its UUID.","tags":["System Definition"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"type","in":"query","description":"Condition type","required":true,"schema":{"type":"string","enum":["STRESS","DESIGN","PROCESS"]}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"uuid":{"type":"object"}}}}}}}},"POST:/api/v2/projects/{projectId}/system-definition-excel/conditions/import/{uuid}":{"path":"/api/v2/projects/{projectId}/system-definition-excel/conditions/import/{uuid}","method":"POST","operationId":"importConditions","summary":"Import system definition conditions from Excel","description":"Imports condition titles from an uploaded Excel file into the target project and type. Duplicate and blank titles are ignored.","tags":["System Definition"],"parameters":[{"name":"projectId","in":"path","description":"Project ID","required":true,"schema":{"type":"string"}},{"name":"uuid","in":"path","description":"Upload UUID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"type":{"type":"string"},"sheetIndex":{"type":"integer","format":"int32"},"titleColumnIndex":{"type":"integer","format":"int32"},"startRowNumber":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}},"x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file identifier returned by the upload endpoint."},"GET:/api/v2/template/action-status":{"path":"/api/v2/template/action-status","method":"GET","operationId":"getAll_1","summary":"Get all action statuses","description":"Returns the full action status list as the FE snapshot source while preserving the existing flat list response shape used by current consumers.","tags":["Template"],"parameters":[],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"title":{"type":"string"}}}}}}}}},"POST:/api/v2/tree-search/{domain}/query":{"path":"/api/v2/tree-search/{domain}/query","method":"POST","operationId":"query","summary":"Execute tree search query","description":"Executes a tree-search query for the selected domain using referenceNode, anchorPattern, or contextCompletion mode. Validates query structure, size limits, and domain availability, then returns paged tree search matches.","tags":["Tree Search"],"parameters":[{"name":"domain","in":"path","description":"Tree search domain path segment. Allowed values are fmm or block-diagram.","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"queryMode":{"type":"string","enum":["REFERENCE_NODE","ANCHOR_PATTERN","CONTEXT_COMPLETION"]},"query":{"oneOf":[{"type":"object","properties":{"anchor":{"type":"object","properties":{"typeKey":{"type":"string"},"name":{"type":"string"}}},"constraints":{"type":"array","items":{"type":"object","properties":{"direction":{"type":"string","enum":["ANCESTOR","DESCENDANT"]},"typeKey":{"type":"string"},"match":{"type":"object","properties":{"name":{"type":"string"}}},"matchType":{"type":"string","enum":["EXACT","CONTAINS"]},"depth":{"type":"object","properties":{"min":{"type":"integer"},"max":{"type":"integer"}}}}}}},"description":"queryMode=ANCHOR_PATTERN"},{"type":"object","properties":{"target":{"type":"object","properties":{"typeKey":{"type":"string"}}},"source":{"type":"object","properties":{"stored":{"type":"object","properties":{"projectId":{"type":"string"},"failureModeId":{"type":"string"}}},"snapshot":{"type":"object","properties":{"root":{"type":"object","properties":{"id":{"type":"string"},"typeKey":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"},"attributes":{"type":"object"},"children":{"type":"array","items":{"type":"object","description":"(circular: TreeSearchNodeInputDTO)"}}}}}}}},"exclude":{"type":"array","items":{"type":"string"}},"context":{"type":"array","items":{"type":"object","properties":{"typeKey":{"type":"string"},"name":{"type":"string"}}}}},"description":"queryMode=CONTEXT_COMPLETION"},{"type":"object","properties":{"root":{"type":"object","properties":{"id":{"type":"string"},"typeKey":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"},"attributes":{"type":"object"},"children":{"type":"array","items":{"type":"object","description":"(circular: TreeSearchNodeInputDTO)"}}}},"children":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"typeKey":{"type":"string"},"name":{"type":"string"},"parentId":{"type":"string"},"attributes":{"type":"object"},"children":{"type":"array","items":{"type":"object","description":"(circular: TreeSearchNodeInputDTO)"}}}}}},"description":"queryMode=REFERENCE_NODE"},{"type":"object","properties":{"raw":{"type":"object"}}}],"description":"Polymorphic, discriminated by 'queryMode'"},"scope":{"type":"object","properties":{"scope":{"type":"string","enum":["MY","DIVISION","ALL"]}}},"filter":{"type":"object","properties":{"includes":{"type":"object","properties":{"projectIds":{"type":"array","items":{"type":"string"}},"projectTypes":{"type":"array","items":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},"blockDiagramIds":{"type":"array","items":{"type":"string"}},"failureModeIds":{"type":"array","items":{"type":"string"}}}},"excludes":{"type":"object","properties":{"projectIds":{"type":"array","items":{"type":"string"}},"projectTypes":{"type":"array","items":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}},"blockDiagramIds":{"type":"array","items":{"type":"string"}},"failureModeIds":{"type":"array","items":{"type":"string"}}}}}},"options":{"type":"object","properties":{"ignoreSiblingOrder":{"type":"boolean"},"allowExtraChildren":{"type":"boolean"},"allowDescendantMatch":{"type":"boolean"},"depthTolerance":{"type":"integer","format":"int32"},"minScore":{"type":"number","format":"double"}}},"page":{"type":"integer","format":"int32"},"size":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"candidateId":{"type":"string"},"matchedNodeId":{"type":"string"},"projectId":{"type":"string"},"projectName":{"type":"string"},"domain":{"type":"string"},"score":{"type":"number","format":"double"},"reasons":{"type":"array","items":{"type":"string"}},"subtree":{"type":"object","properties":{"id":{"type":"string"},"typeKey":{"type":"string"},"name":{"type":"string"},"attributes":{"type":"object"},"children":{"type":"array","items":{"type":"object","description":"(circular: TreeSearchNodeDTO)"}}}}}}},"comparison":{"type":"object","properties":{"effectCandidates":{"type":"array","items":{"type":"object","properties":{"candidateId":{"type":"string"},"projectId":{"type":"string"},"typeKey":{"type":"string"},"name":{"type":"string"},"typedName":{"type":"string"},"score":{"type":"number","format":"double"}}}},"causeCandidates":{"type":"array","items":{"type":"object","properties":{"candidateId":{"type":"string"},"projectId":{"type":"string"},"typeKey":{"type":"string"},"name":{"type":"string"},"typedName":{"type":"string"},"score":{"type":"number","format":"double"}}}},"factorCandidates":{"type":"array","items":{"type":"object","properties":{"candidateId":{"type":"string"},"projectId":{"type":"string"},"typeKey":{"type":"string"},"name":{"type":"string"},"typedName":{"type":"string"},"score":{"type":"number","format":"double"}}}}}},"page":{"type":"integer"},"size":{"type":"integer"},"total":{"type":"integer","format":"int64"}}}}}}}},"POST:/api/v2/tree-search/{domain}/rebuild":{"path":"/api/v2/tree-search/{domain}/rebuild","method":"POST","operationId":"rebuild","summary":"Rebuild tree search index","description":"Triggers an asynchronous full rebuild of the Lucene tree search index for the specified domain. Requires ADMIN privileges. Returns 202 if rebuild started, 409 if already in progress.","tags":["Tree Search"],"parameters":[{"name":"domain","in":"path","description":"Tree search domain. Allowed values: fmm, block-diagram","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/user-excel/export":{"path":"/api/v2/user-excel/export","method":"GET","operationId":"export_10","summary":"Export users to Excel","description":"Exports users to an XLSX file and returns a download URI. Supports filtering by keyword, department, and user level. Requires admin permission.","tags":["UserExcel"],"parameters":[{"name":"q","in":"query","description":"Keyword search on user name or ID (max 100 characters)","schema":{"type":"string"}},{"name":"dept","in":"query","description":"Filter by department name (optional)","schema":{"type":"string"}},{"name":"level","in":"query","description":"Filter by user level (e.g. ADMIN, LEADER, READER)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"downloadUri":{"type":"string"}}}}}}}},"GET:/api/v2/users":{"path":"/api/v2/users","method":"GET","summary":"Search users","description":"Returns paged users filtered by search, dept, and level.","operationId":"list_12","tags":["User"],"parameters":[{"name":"q","in":"query","description":"Unified keyword (id, name, englishName, email, department)","schema":{"type":"string"}},{"name":"dept","in":"query","description":"Department exact-match filter","schema":{"type":"string"}},{"name":"level","in":"query","description":"User level filter (ADMIN, NORMAL, READER)","schema":{"type":"string","enum":["ADMIN","NORMAL","READER"]}},{"name":"page","in":"query","description":"Page number (default: 1)","schema":{"type":"integer","default":1,"format":"int32"}},{"name":"size","in":"query","description":"Page size (default: 50, max: 1000)","schema":{"type":"integer","default":50,"format":"int32"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"divisionId":{"type":"integer"}}}},"page":{"type":"integer"},"size":{"type":"integer"},"totalElements":{"type":"integer","format":"int64"},"totalPages":{"type":"integer"},"includes":{"type":"object","properties":{"divisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}}}}}}},"GET:/api/v2/users/{userId}":{"path":"/api/v2/users/{userId}","method":"GET","operationId":"get_5","summary":"Get user details","description":"Retrieves detailed user profile information by user ID. Use this endpoint to fetch user account details, profile data, or user metadata for display purposes. This is commonly used when you need to show user information in UI components, validate user existence, or retrieve user context for other operations. The endpoint returns the complete user DTO including all available user attributes. Requires NORMAL user level or higher authentication.","tags":["User"],"parameters":[{"name":"userId","in":"path","description":"User ID to retrieve","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"division":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}}}},"GET:/api/v2/users/my/project-join-requests":{"path":"/api/v2/users/my/project-join-requests","method":"GET","operationId":"listMyProjectJoinRequests","summary":"List my project join requests","description":"Retrieves all project join requests submitted by the currently authenticated user. Use this endpoint to list pending invitations, access requests, or project membership requests that you have submitted. The response includes the status of each request (pending, approved, rejected) and associated project details. This is useful for showing users their request history, checking request status, or managing pending access requests. The endpoint automatically filters results based on the authenticated user's identity from the session context. Requires READER user level or higher authentication. Supports optional filtering by specific project ID via the projectId query parameter.","tags":["User"],"parameters":[{"name":"projectId","in":"query","description":"Optional project ID filter","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"requestId":{"type":"integer"},"projectId":{"type":"string"},"user":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"division":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["PENDING","APPROVED","REJECTED"]},"revisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"menuCode":{"type":"string","enum":["PROJECT","BLOCK","FMM","WORKSHEET","ATTACHED_FILE","WORKSHEET_UNIT","CONTROL_PLAN"]},"actionCode":{"type":"string","enum":["CREATE_PROJECT","MODIFY_PROJECT","DELETE_PROJECT","JOIN_REQUEST","JOIN_APPROVED","JOIN_REJECTED","CREATE","COPY","MODIFY","UPDATE","REVISE","DELETE"]},"projectId":{"type":"string"},"userId":{"type":"string"},"userName":{"type":"string"},"reportNo":{"type":"string"},"refId":{"type":"string"},"updatedDateTime":{"type":"string","format":"date-time"},"description":{"type":"string"},"updatingStatus":{"type":"integer"},"revisionNumber":{"type":"integer"}}}}}}}}}}}},"GET:/api/v2/users/me":{"path":"/api/v2/users/me","method":"GET","operationId":"getMe","summary":"Get my info","description":"Returns the current user's profile including division, accessible divisions, and workspace settings. Used by the My Info page.","tags":["User"],"parameters":[],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"englishName":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"division":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}},"userLevel":{"type":"string","enum":["ADMIN","NORMAL","READER"]},"defaultProjectType":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"language":{"type":"string"},"accessPermissions":{"type":"string"},"accessibleDivisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}}}}},"PATCH:/api/v2/users/me":{"path":"/api/v2/users/me","method":"PATCH","operationId":"updateMe","summary":"Update my info","description":"Updates the current user's profile fields (name, englishName, email, department, defaultProjectType, language, workspaceMode). Returns the updated profile.","tags":["User"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"englishName":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"defaultProjectType":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"language":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"englishName":{"type":"string"},"email":{"type":"string"},"department":{"type":"string"},"division":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}},"userLevel":{"type":"string","enum":["ADMIN","NORMAL","READER"]},"defaultProjectType":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"language":{"type":"string"},"accessPermissions":{"type":"string"},"accessibleDivisions":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}}}}},"POST:/api/v2/users/me/password":{"path":"/api/v2/users/me/password","method":"POST","operationId":"changePassword_2","summary":"Change my password","description":"Changes the current user's password. Requires the current password for verification and a new password with confirmation.","tags":["User"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"currentPassword":{"type":"string"},"newPassword":{"type":"string"},"newPasswordConfirm":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/worksheet-template-excel/export":{"path":"/api/v2/worksheet-template-excel/export","method":"GET","operationId":"export_11","summary":"Export worksheet templates to Excel","description":"Exports worksheet templates to an XLSX file and returns a download URI. Supports filtering by FMEA type and keyword search. Requires admin permission.","tags":["WorksheetTemplateExcel"],"parameters":[{"name":"fmeaType","in":"query","description":"Filter by FMEA type (e.g. DESIGN, PROCESS, EQUIPMENT, FA)","schema":{"type":"string"}},{"name":"q","in":"query","description":"Keyword search on template name (max 100 characters)","schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"downloadUri":{"type":"string"}}}}}}}},"GET:/api/v2/worksheet-templates/{id}":{"path":"/api/v2/worksheet-templates/{id}","method":"GET","operationId":"get_7","summary":"Get worksheet template","description":"Returns a worksheet template. When search is provided, template headers are keyword-filtered.","tags":["Worksheet Templates"],"parameters":[{"name":"id","in":"path","description":"Worksheet template ID","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"q","in":"query","description":"Worksheet template header keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"projectType":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"category":{"type":"string","enum":["AIAG","AIAG-VDA","FMEA-MSR","STANDARD"]},"name":{"type":"string"},"order":{"type":"integer"},"defaultFlag":{"type":"boolean"},"active":{"type":"boolean"},"headers":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"worksheetTemplateId":{"type":"integer"},"columnId":{"type":"integer"},"columnKey":{"type":"string"},"dataType":{"type":"string","enum":["integer","boolean","text","date","refer"]},"parentId":{"type":"integer"},"groupHeader":{"type":"boolean"},"name":{"type":"string"},"width":{"type":"integer"},"readOnly":{"type":"boolean"},"mergeGroup":{"type":"integer"},"order":{"type":"integer"},"vAlign":{"type":"integer"},"hAlign":{"type":"integer"},"style":{"type":"string"},"description":{"type":"string"}}}}}}}}}}},"GET:/api/v2/worksheet-templates":{"path":"/api/v2/worksheet-templates","method":"GET","operationId":"list_13","summary":"List worksheet templates","description":"Returns worksheet templates filtered by FMEA type. When fmeaType is omitted, returns all templates for Design, Process, Equipment, and FA types, ordered by type and template order.","tags":["Worksheet Templates"],"parameters":[{"name":"fmeaType","in":"query","description":"FMEA type filter. Omit for all types.","schema":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"projectType":{"type":"string","enum":["DESIGN","PROCESS","EQUIPMENT","FA","FTA","CPLAN"]},"category":{"type":"string","enum":["AIAG","AIAG-VDA","FMEA-MSR","STANDARD"]},"name":{"type":"string"},"order":{"type":"integer"},"defaultFlag":{"type":"boolean"},"active":{"type":"boolean"}}}}}}}}},"GET:/api/v2/projects/{projectId}/worksheets":{"path":"/api/v2/projects/{projectId}/worksheets","method":"GET","summary":"List worksheet summaries for a project","description":"Returns summary information for all worksheets belonging to the given project. Each summary includes the report number, title, and status. Requires NORMAL user level.","tags":["Worksheet"],"parameters":[{"name":"projectId","in":"path","description":"Project ID to list worksheets for","required":true,"schema":{"type":"string"}}],"operationId":"getSummaries","responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"reportNo":{"type":"string"},"name":{"type":"string"},"item":{"type":"string"},"analysisLevel":{"type":"string"},"blockDiagramType":{"type":"string","enum":["FUNCTION","STRUCTURE","FUNCTION_STRUCTURE","STRUCTURE_FUNCTION","PROCESS","SUPER_SYSTEM","FUNCTION_ANALYSIS"]},"templateName":{"type":"string"},"description":{"type":"string"},"improvementMetrics":{"type":"object","properties":{"before":{"type":"object","properties":{"count":{"type":"integer"},"total":{"type":"integer"},"average":{"type":"integer"}}},"after":{"type":"object","properties":{"count":{"type":"integer"},"total":{"type":"integer"},"average":{"type":"integer"}}}}},"createdBy":{"type":"string"},"createdAt":{"type":"string","format":"date-time"},"updatedBy":{"type":"string"},"updatedAt":{"type":"string","format":"date-time"}}}}}}}}},"POST:/api/v2/projects/{projectId}/worksheets":{"path":"/api/v2/projects/{projectId}/worksheets","method":"POST","summary":"Create a new worksheet in a project","description":"Creates a new worksheet under the given project using the provided creation DTO. Returns HTTP 201 Created with a Location header pointing to the new worksheet. Requires NORMAL user level and project MEMBER role.","tags":["Worksheet"],"parameters":[{"name":"projectId","in":"path","description":"Project ID to create the worksheet under","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"blockDiagramId":{"type":"string"},"analysisLevel":{"type":"string"},"nextReportNo":{"type":"string"},"failureModeIds":{"type":"array","items":{"type":"string"}},"worksheetTemplateId":{"type":"integer","format":"int32"},"description":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"*/*":{}}}},"operationId":"create_5"},"GET:/api/v2/projects/{projectId}/worksheets/{reportNoSimple}":{"path":"/api/v2/projects/{projectId}/worksheets/{reportNoSimple}","method":"GET","summary":"Get worksheet detail by report number","description":"Returns the full worksheet detail for the given report number within a project. Report number format: 'N' for primary only (e.g. '3'), or 'N-M' for primary-secondary (e.g. '3-1'). The '#' prefix is optional and will be stripped. Requires NORMAL user level.","tags":["Worksheet"],"parameters":[{"name":"projectId","in":"path","description":"Project ID the worksheet belongs to","required":true,"schema":{"type":"string"}},{"name":"reportNoSimple","in":"path","description":"Report number: 'N' (primary) or 'N-M' (primary-secondary), e.g. '3-1'","required":true,"schema":{"type":"string"}}],"operationId":"get_6","responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"analysisLevel":{"type":"string"},"reportNo":{"type":"string"},"serial":{"type":"integer"},"blockDiagram":{"type":"object","properties":{"id":{"type":"string"},"type":{"type":"string","enum":["FUNCTION","STRUCTURE","FUNCTION_STRUCTURE","STRUCTURE_FUNCTION","PROCESS","SUPER_SYSTEM","FUNCTION_ANALYSIS"]},"alias":{"type":"string"},"order":{"type":"integer"},"description":{"type":"string"},"numberFormat":{"type":"string"}}},"worksheetTemplateId":{"type":"integer"},"failureModeWorksheets":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"reportNo":{"type":"string"},"failureModeId":{"type":"string"},"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"order":{"type":"integer"},"columns":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"value":{"type":"string"},"style":{"type":"string"}}}},"followUps":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"}}}},"fmmNodeId":{"type":"string"}}}},"order":{"type":"integer"}}}},"description":{"type":"string"}}}}}}}},"PUT:/api/v2/projects/{projectId}/worksheets/{reportNoSimple}":{"path":"/api/v2/projects/{projectId}/worksheets/{reportNoSimple}","method":"PUT","summary":"Save worksheet data by report number","description":"Saves (updates) the worksheet content for the given report number. Accepts a WorksheetSaveDTO containing row data and column values. Requires NORMAL user level and project MEMBER role.","tags":["Worksheet"],"parameters":[{"name":"projectId","in":"path","description":"Project ID the worksheet belongs to","required":true,"schema":{"type":"string"}},{"name":"reportNoSimple","in":"path","description":"Report number: 'N' (primary) or 'N-M' (primary-secondary), e.g. '3-1'","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"failureModeWorksheets":{"type":"array","items":{"required":["id"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"clientId":{"type":"string"},"failureModeId":{"type":"string"},"rows":{"type":"array","items":{"required":["id"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"clientId":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"value":{"type":"string"},"style":{"type":"string"}}}},"followUps":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"}}}},"fmmNodeId":{"type":"string"}}}},"order":{"type":"integer","format":"int32"}}}},"clientId":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string"},"id":{"type":"string"},"target":{"type":"string","enum":["WORKSHEET_ID","FAILURE_MODE_WORKSHEET_ID","WORKSHEET_ROW_ID","BLOCK_NODE_ID","BLOCK_REFERENCED_ID","FMM_OBJECT_ID"]}}}}}}}},"operationId":"save_7"},"DELETE:/api/v2/projects/{projectId}/worksheets/{reportNoSimple}":{"path":"/api/v2/projects/{projectId}/worksheets/{reportNoSimple}","method":"DELETE","summary":"Delete worksheet by report number","description":"Deletes the worksheet identified by the report number within the project. Returns HTTP 200 on success. Requires NORMAL user level and project MEMBER role.","tags":["Worksheet"],"parameters":[{"name":"projectId","in":"path","description":"Project ID the worksheet belongs to","required":true,"schema":{"type":"string"}},{"name":"reportNoSimple","in":"path","description":"Report number: 'N' (primary) or 'N-M' (primary-secondary), e.g. '3-1'","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"failureModeWorksheets":{"type":"array","items":{"required":["id"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"clientId":{"type":"string"},"failureModeId":{"type":"string"},"rows":{"type":"array","items":{"required":["id"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"clientId":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"value":{"type":"string"},"style":{"type":"string"}}}},"followUps":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"}}}},"fmmNodeId":{"type":"string"}}}},"order":{"type":"integer","format":"int32"}}}},"clientId":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"*/*":{}}}},"operationId":"delete_4"},"PUT:/api/v2/projects/{projectId}/worksheet-excel/{uuid}":{"path":"/api/v2/projects/{projectId}/worksheet-excel/{uuid}","method":"PUT","summary":"Re-import a worksheet from an uploaded Excel file","description":"Updates an existing worksheet by re-importing data from a previously uploaded Excel file. Overwrites the worksheet content according to the provided column mapping configuration. Returns 204 No Content on success.","tags":["Worksheet Excel"],"parameters":[{"name":"projectId","in":"path","description":"Project ID that owns the worksheet","required":true,"schema":{"type":"string"}},{"name":"uuid","in":"path","description":"UUID of the uploaded Excel file (returned by POST /api/v2/files)","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"reportNo":{"type":"string"},"mappings":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int32"},"columnId":{"type":"integer","format":"int32"}}}},"startRow":{"type":"integer","format":"int32"},"templateId":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"*/*":{}}}},"operationId":"update_4","x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file ID returned by the upload endpoint."},"POST:/api/v2/projects/{projectId}/worksheet-excel/{uuid}":{"path":"/api/v2/projects/{projectId}/worksheet-excel/{uuid}","method":"POST","summary":"Import a new worksheet from an uploaded Excel file","description":"Creates a new worksheet by importing data from a previously uploaded Excel file. The file must be uploaded first via POST /api/v2/files. The request body specifies column mapping configuration. Returns the assigned report number (reportNoSetDTO) and a Location header pointing to the new worksheet.","tags":["Worksheet Excel"],"parameters":[{"name":"projectId","in":"path","description":"Project ID that will own the new worksheet","required":true,"schema":{"type":"string"}},{"name":"uuid","in":"path","description":"UUID of the uploaded Excel file (returned by POST /api/v2/files)","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"reportNo":{"type":"string"},"mappings":{"type":"array","items":{"type":"object","properties":{"index":{"type":"integer","format":"int32"},"columnId":{"type":"integer","format":"int32"}}}},"startRow":{"type":"integer","format":"int32"},"templateId":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"*/*":{}}}},"operationId":"add","x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file ID returned by the upload endpoint."},"GET:/api/v2/projects/{projectId}/worksheet-excel/{reportNoSimple}":{"path":"/api/v2/projects/{projectId}/worksheet-excel/{reportNoSimple}","method":"GET","summary":"Get Excel download link for a worksheet","description":"Generates and returns a download link (FileDownloadResponseDTO) for exporting a worksheet as an Excel file. The report number identifies the worksheet (primary 'N' or primary-secondary 'N-M'). Use GET /api/v1/files/{uuid} with the returned URI to download the file.","tags":["Worksheet Excel"],"parameters":[{"name":"projectId","in":"path","description":"Project ID that owns the worksheet","required":true,"schema":{"type":"string"}},{"name":"reportNoSimple","in":"path","description":"Worksheet report number: 'N' (primary) or 'N-M' (primary-secondary). '#' prefix is stripped.","required":true,"schema":{"type":"string"}}],"operationId":"getDownloadLink_1","responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"fileName":{"type":"string"},"downloadUri":{"type":"string"}}}}}}}},"GET:/api/v2/projects/{projectId}/worksheet-excel/{uuid}/metadata":{"path":"/api/v2/projects/{projectId}/worksheet-excel/{uuid}/metadata","method":"GET","summary":"Get Excel file metadata for a worksheet import","description":"Reads metadata (sheet names, column headers) from a previously uploaded Excel file. The file must be uploaded first via POST /api/v2/files. The returned metadata is used to configure mapping before triggering import.","tags":["Worksheet Excel"],"parameters":[{"name":"projectId","in":"path","description":"Project ID that owns the worksheet","required":true,"schema":{"type":"string"}},{"name":"uuid","in":"path","description":"UUID of the uploaded Excel file (returned by POST /api/v2/files)","required":true,"schema":{"type":"string"}}],"operationId":"getMetadata","x-dependency-warning":"REQUIRES PRIOR FILE UPLOAD via [POST /api/v2/files]. The {uuid} parameter is the file ID returned by the upload endpoint.","responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"projectId":{"type":"string"},"reportNo":{"type":"string"},"startRow":{"type":"integer"},"latestModified":{"type":"string","format":"date-time"},"targetModified":{"type":"string","format":"date-time"},"status":{"type":"string","enum":["CREATABLE","UPDATABLE","OUTDATED","UNKNOWN"]}}}}}}}},"GET:/api/v2/projects/{projectId}/worksheet-excel/{reportNoSimple}/sheets":{"path":"/api/v2/projects/{projectId}/worksheet-excel/{reportNoSimple}/sheets","method":"GET","summary":"List POISheet sheets for a worksheet Excel","description":"Returns the list of POISheet sheet objects contained in the Excel file associated with the specified worksheet. Useful for rendering multi-sheet Excel content in the worksheet editor.","tags":["Worksheet Excel"],"operationId":"getSheets","parameters":[{"name":"projectId","in":"path","description":"Project ID that owns the worksheet","required":true,"schema":{"type":"string"}},{"name":"reportNoSimple","in":"path","description":"Worksheet report number: 'N' (primary) or 'N-M' (primary-secondary). '#' prefix is stripped.","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object"}}}}}}},"GET:/api/v2/projects/{projectId}/worksheets/failuremode/{failureModeId}":{"path":"/api/v2/projects/{projectId}/worksheets/failuremode/{failureModeId}","method":"GET","summary":"Get worksheet by failure mode ID","description":"Returns the worksheet associated with the specified failure mode within the given project. Returns the worksheet DTO including S/O/D data and all worksheet rows. Requires NORMAL user level.","tags":["Worksheet"],"parameters":[{"name":"projectId","in":"path","description":"Project ID the failure mode belongs to","required":true,"schema":{"type":"string"}},{"name":"failureModeId","in":"path","description":"Failure mode ID to retrieve the associated worksheet for","required":true,"schema":{"type":"string"}}],"operationId":"getByFailureMode","responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"reportNo":{"type":"string"},"failureModeId":{"type":"string"},"rows":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"order":{"type":"integer"},"columns":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"value":{"type":"string"},"style":{"type":"string"}}}},"followUps":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"}}}},"fmmNodeId":{"type":"string"}}}},"order":{"type":"integer"}}}}}}}},"POST:/api/v2/projects/{projectId}/worksheets/failuremode/{failureModeId}":{"path":"/api/v2/projects/{projectId}/worksheets/failuremode/{failureModeId}","method":"POST","summary":"Create worksheet row for a failure mode","description":"Creates a new worksheet row linked to the specified failure mode within the project. Optionally associates the row with a block diagram node via blockDiagramId. Returns HTTP 201 Created with the created worksheet row DTO. Requires NORMAL user level and project MEMBER role.","tags":["Worksheet"],"parameters":[{"name":"projectId","in":"path","description":"Project ID the failure mode belongs to","required":true,"schema":{"type":"string"}},{"name":"failureModeId","in":"path","description":"Failure mode ID to create a worksheet row for","required":true,"schema":{"type":"string"}},{"name":"blockDiagramId","in":"query","description":"Optional block diagram node ID to associate with the new worksheet row","schema":{"type":"string"}}],"operationId":"createByFailureMode","responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string"},"id":{"type":"string"},"target":{"type":"string","enum":["WORKSHEET_ID","FAILURE_MODE_WORKSHEET_ID","WORKSHEET_ROW_ID","BLOCK_NODE_ID","BLOCK_REFERENCED_ID","FMM_OBJECT_ID"]}}}}}}}}},"GET:/api/v2/projects/{projectId}/worksheets/{reportNo}/headers":{"path":"/api/v2/projects/{projectId}/worksheets/{reportNo}/headers","method":"GET","summary":"Get worksheet headers","description":"Returns worksheet headers copied for the worksheet. When search is provided, keyword matching is applied.","tags":["Worksheet"],"parameters":[{"name":"projectId","in":"path","description":"Project ID the worksheet belongs to","required":true,"schema":{"type":"string"}},{"name":"reportNo","in":"path","description":"Worksheet report number (primary, e.g. '3')","required":true,"schema":{"type":"string"}},{"name":"q","in":"query","description":"Worksheet header keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}}],"operationId":"getHeaders","responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"columnId":{"type":"integer"},"columnKey":{"type":"string"},"dataType":{"type":"string","enum":["integer","boolean","text","date","refer"]},"parentId":{"type":"integer"},"groupHeader":{"type":"boolean"},"name":{"type":"string"},"width":{"type":"integer"},"readOnly":{"type":"boolean"},"mergeGroup":{"type":"integer"},"order":{"type":"integer"},"vAlign":{"type":"integer"},"hAlign":{"type":"integer"},"style":{"type":"string"},"description":{"type":"string"}}}}}}}}},"PUT:/api/v2/projects/{projectId}/worksheets/{reportNo}/{failureModeId}":{"path":"/api/v2/projects/{projectId}/worksheets/{reportNo}/{failureModeId}","method":"PUT","summary":"Save worksheet data for a specific failure mode","description":"Saves worksheet content for the worksheet row associated with the given failure mode. The report number identifies the worksheet; the failure mode ID identifies the row. Requires NORMAL user level and project MEMBER role.","tags":["Worksheet"],"parameters":[{"name":"projectId","in":"path","description":"Project ID the worksheet belongs to","required":true,"schema":{"type":"string"}},{"name":"reportNo","in":"path","description":"Worksheet report number (primary, e.g. '3')","required":true,"schema":{"type":"string"}},{"name":"failureModeId","in":"path","description":"Failure mode ID whose worksheet row will be updated","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"required":["id"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"clientId":{"type":"string"},"failureModeId":{"type":"string"},"rows":{"type":"array","items":{"required":["id"],"type":"object","properties":{"id":{"type":"integer","format":"int32"},"clientId":{"type":"string"},"columns":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer","format":"int32"},"value":{"type":"string"},"style":{"type":"string"}}}},"followUps":{"type":"array","items":{"type":"object","properties":{"userId":{"type":"string"}}}},"fmmNodeId":{"type":"string"}}}},"order":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"clientId":{"type":"string"},"id":{"type":"string"},"target":{"type":"string","enum":["WORKSHEET_ID","FAILURE_MODE_WORKSHEET_ID","WORKSHEET_ROW_ID","BLOCK_NODE_ID","BLOCK_REFERENCED_ID","FMM_OBJECT_ID"]}}}}}}}},"operationId":"saveByFailureMode"},"GET:/api/v2/worksheet-templates/{id}/headers":{"path":"/api/v2/worksheet-templates/{id}/headers","method":"GET","summary":"Get worksheet template headers","description":"Returns worksheet template headers. When search is provided, keyword matching is applied.","tags":["Worksheet Templates"],"parameters":[{"name":"id","in":"path","description":"Worksheet template ID","required":true,"schema":{"type":"integer","format":"int32"}},{"name":"q","in":"query","description":"Worksheet template header keyword search (trimmed, max 100 characters)","schema":{"type":"string"}},{"name":"useSynonym","in":"query","description":"Whether to expand q with synonym dictionary terms (default: true)","schema":{"type":"boolean","default":true}}],"operationId":"getHeaders_1","responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","properties":{"id":{"type":"integer"},"worksheetTemplateId":{"type":"integer"},"columnId":{"type":"integer"},"columnKey":{"type":"string"},"dataType":{"type":"string","enum":["integer","boolean","text","date","refer"]},"parentId":{"type":"integer"},"groupHeader":{"type":"boolean"},"name":{"type":"string"},"width":{"type":"integer"},"readOnly":{"type":"boolean"},"mergeGroup":{"type":"integer"},"order":{"type":"integer"},"vAlign":{"type":"integer"},"hAlign":{"type":"integer"},"style":{"type":"string"},"description":{"type":"string"}}}}}}}}}}