fmea-api-mcp-server 1.1.61 → 1.1.62
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
|
-
{"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"}}}},"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":"Exports all classification groups and their items to an XLSX file and returns a download URI. 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/groups/{groupId}":{"path":"/api/v2/classifications/groups/{groupId}","method":"DELETE","operationId":"deleteGroup","summary":"Delete classification group","description":"Deletes the specified classification group and all its associated items.","tags":["Classification"],"parameters":[{"name":"groupId","in":"path","description":"Classification group ID to delete","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"DELETE:/api/v2/classifications/items/{itemId}":{"path":"/api/v2/classifications/items/{itemId}","method":"DELETE","operationId":"deleteItem_1","summary":"Delete classification item","description":"Deletes the specified classification item from its group.","tags":["Classification"],"parameters":[{"name":"itemId","in":"path","description":"Classification item ID to delete","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"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 associated with the specified classification item and resets the item symbol type to text.","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 all classification groups with their nested items. Each group contains items with symbol type (text or image) and optional image URL. 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":"Returns classification items associated with the specified project. Falls back to the default group items if the project has no project_class configured.","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":"Returns items from the system default classification group (the group with setdefault='Y'). Used when no project-specific classification is configured.","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":"Returns classification items belonging to the specified group. 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"}}}}}}}}},"PATCH:/api/v2/classifications/default":{"path":"/api/v2/classifications/default","method":"PATCH","operationId":"changeDefault","summary":"Change default classification group","description":"Sets the specified classification group as the system default.","tags":["Classification"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"groupId":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"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"}}}}}}}}}}},"POST:/api/v2/classifications/groups":{"path":"/api/v2/classifications/groups","method":"POST","operationId":"createGroup","summary":"Create classification group","description":"Creates a new classification group with the given name and optional description.","tags":["Classification"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"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"}}}}}}}}}}},"POST:/api/v2/classifications/groups/{groupId}/items":{"path":"/api/v2/classifications/groups/{groupId}/items","method":"POST","operationId":"createItem_1","summary":"Create classification item","description":"Creates a new classification item under the specified group.","tags":["Classification"],"parameters":[{"name":"groupId","in":"path","description":"Classification group ID to add the item to","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"symbol":{"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"}}}}}}}},"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 an image file for the specified classification item symbol. The image is resized to 22x22 pixels. Accepted formats: gif, jpg, png, bmp. Dangerous file types (jsp, php, asp) are rejected.","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/groups/{groupId}":{"path":"/api/v2/classifications/groups/{groupId}","method":"PUT","operationId":"updateGroup","summary":"Update classification group","description":"Updates the name and description of the specified classification group.","tags":["Classification"],"parameters":[{"name":"groupId","in":"path","description":"Classification group ID to update","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"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"}}}}}}}}}}},"PUT:/api/v2/classifications/items/{itemId}":{"path":"/api/v2/classifications/items/{itemId}","method":"PUT","operationId":"updateItem_1","summary":"Update classification item","description":"Updates the label, symbol type, and optional image URL of the specified classification item.","tags":["Classification"],"parameters":[{"name":"itemId","in":"path","description":"Classification item ID to update","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"symbol":{"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"}}}}}}}},"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_11","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 (stress/design/process)","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"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 divisions to an XLSX file and returns a download URI. Supports optional search filter. Requires admin permission.","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":"Search divisions","operationId":"list_7","description":"Returns paged divisions filtered by division name.","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":"object","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":"Retrieves detailed information for a specific division (organizational unit, department, business unit) using its unique identifier. Returns the complete division profile including metadata, hierarchy, and configuration settings. Use this endpoint when you need to fetch division details for display, editing, or as a reference in other operations. Common use cases include: populating division dropdowns, validating division access permissions, retrieving division context for projects or PFMEA records, and displaying organizational structure information.","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"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}},"DELETE:/api/v2/divisions/{divisionId}":{"path":"/api/v2/divisions/{divisionId}","method":"DELETE","operationId":"delete_2","summary":"Delete a division","description":"Deletes a division and its access list entries. Resets user mappings for divisions that referenced the deleted one. Fails if users are assigned to the division.","tags":["Division"],"parameters":[{"name":"divisionId","in":"path","description":"Division ID to delete","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/divisions/{divisionId}/authorized-divisions":{"path":"/api/v2/divisions/{divisionId}/authorized-divisions","method":"GET","operationId":"getAuthorizedDivisions","summary":"Get authorized divisions","description":"Returns the list of divisions that the specified division is authorized to access.","tags":["Division"],"parameters":[{"name":"divisionId","in":"path","description":"Division ID to query authorized 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"},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}}},"POST:/api/v2/divisions":{"path":"/api/v2/divisions","method":"POST","operationId":"create_3","summary":"Create a division","description":"Creates a new division with optional aliases and code. Automatically assigns global-access users to the new division.","tags":["Division"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"code":{"type":"string"}}}}}},"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"},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}}}}},"PUT:/api/v2/divisions/{divisionId}":{"path":"/api/v2/divisions/{divisionId}","method":"PUT","operationId":"update_2","summary":"Update a division","description":"Updates division name, aliases, and code. Cascades code changes to associated projects.","tags":["Division"],"parameters":[{"name":"divisionId","in":"path","description":"Division ID to update","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"code":{"type":"string"}}}}}},"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"},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}}}}},"PUT:/api/v2/divisions/{divisionId}/authorized-divisions":{"path":"/api/v2/divisions/{divisionId}/authorized-divisions","method":"PUT","operationId":"updateAuthorizedDivisions","summary":"Update authorized divisions","description":"Replaces the authorized division list for the specified division. Self-division ID is automatically excluded. User-division mappings are rebuilt after update.","tags":["Division"],"parameters":[{"name":"divisionId","in":"path","description":"Division ID to update authorized divisions for","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}}},"DELETE:/api/v2/divisions/batch":{"path":"/api/v2/divisions/batch","method":"DELETE","operationId":"deleteBatch","summary":"Delete divisions in batch","description":"Deletes multiple divisions by IDs. All divisions must have no users assigned. Cascade deletes authorized-division mappings and user-division mappings.","tags":["Division"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"integer","format":"int32"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/projects/{projectId}/documents/categories/{documentCategory}":{"path":"/api/v2/projects/{projectId}/documents/categories/{documentCategory}","method":"GET","operationId":"listByCategory","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"]}}],"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"]}}}}}}}}},"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"]}}],"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"},"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/{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"},"fileSize":{"type":"string"},"uploadDate":{"type":"string","format":"date"},"category":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM"]}}}}}}}},"DELETE:/api/v2/projects/{projectId}/documents/{documentId}":{"path":"/api/v2/projects/{projectId}/documents/{documentId}","method":"DELETE","operationId":"delete_8","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"},"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/{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"]}},{"name":"documentPath","in":"path","description":"Virtual document path prefix for filtering","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"},"fileSize":{"type":"string"},"uploadDate":{"type":"string","format":"date"},"category":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM"]}}}}}}}}},"DELETE:/api/v2/evaluation/{fmeaType}/{criteriaId}":{"path":"/api/v2/evaluation/{fmeaType}/{criteriaId}","method":"DELETE","operationId":"deleteCriteriaEndpoint","summary":"Delete evaluation criteria (cascade)","description":"Deletes the evaluation criteria and all its descendants (S/O/D nodes, rating items, significance_criteria). Returns 400 if any item is in use by a project.","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":{}}}}},"DELETE:/api/v2/evaluation/{fmeaType}/{criteriaId}/{category}/{itemId}":{"path":"/api/v2/evaluation/{fmeaType}/{criteriaId}/{category}/{itemId}","method":"DELETE","operationId":"deleteRatingEndpoint","summary":"Delete rating item","description":"Deletes the rating item under the specified S/O/D category. Returns 404 if item does not exist.","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"]}},{"name":"itemId","in":"path","description":"Unique ID of the rating item","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/evaluation":{"path":"/api/v2/evaluation","method":"GET","operationId":"getAllEvaluation","summary":"Get all evaluation criteria by FMEA type","description":"Returns all FMEA types with their criteria lists. Each entry includes the FMEA type name and its child criteria. Used for overview of all evaluation criteria across FMEA types. 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"}}}}}}}}}}}},"GET:/api/v2/evaluation/{fmeaType}":{"path":"/api/v2/evaluation/{fmeaType}","method":"GET","operationId":"getCriteriaByFmeaType","summary":"List criteria for a specific FMEA type","description":"Returns the evaluation criteria list for the specified FMEA type. Returns an empty list if the FMEA type has no criteria configured. Returns 400 if the fmeaType is invalid. 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":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"defaultSelected":{"type":"boolean"},"displayed":{"type":"boolean"}}}}}}}}},"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":"Returns severity, occurrence, and detection rating items for the specified criteria under the given FMEA type. Rating items are sorted by level descending (10 → 1). Returns 404 if the criteria does not exist or does not belong to the specified FMEA type.","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":"Returns the significance criteria (S/O/D/RPN thresholds) for the specified evaluation criteria under the given FMEA type. Returns an empty DTO if not configured.","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":"Returns rating items for the specified category (severity, occurrence, or detection) under the given criteria and FMEA type. Returns 400 if category is invalid.","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"}}}}}}}}},"PATCH:/api/v2/evaluation/{fmeaType}/display":{"path":"/api/v2/evaluation/{fmeaType}/display","method":"PATCH","operationId":"updateDisplayEndpoint","summary":"Bulk update criteria display visibility","description":"Updates the display visibility of evaluation criteria items for the specified FMEA type. At least one item must remain visible.","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":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"display":{"type":"boolean"}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"POST:/api/v2/evaluation/{fmeaType}":{"path":"/api/v2/evaluation/{fmeaType}","method":"POST","operationId":"createCriteriaEndpoint","summary":"Create evaluation criteria","description":"Creates a new evaluation criteria under the specified FMEA type. Auto-generates Severity, Occurrence, and Detection sub-categories and a significance_criteria row. Returns 400 if the fmeaType is invalid or unsupported for evaluation.","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":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"count":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"defaultSelected":{"type":"boolean"},"displayed":{"type":"boolean"}}}}}}}},"POST:/api/v2/evaluation/{fmeaType}/{criteriaId}/{category}":{"path":"/api/v2/evaluation/{fmeaType}/{criteriaId}/{category}","method":"POST","operationId":"createRatingEndpoint","summary":"Create rating item","description":"Creates a new rating item under the specified S/O/D category. Returns 400 if category is invalid.","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":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"count":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}}}}}},"PUT:/api/v2/evaluation/{fmeaType}/default/{criteriaId}":{"path":"/api/v2/evaluation/{fmeaType}/default/{criteriaId}","method":"PUT","operationId":"setDefaultEndpoint","summary":"Set default evaluation criteria","description":"Sets the specified criteria as the default for the FMEA type. Unsets the previous default under the same parent.","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 criteria to set as default","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"PUT:/api/v2/evaluation/{fmeaType}/{criteriaId}":{"path":"/api/v2/evaluation/{fmeaType}/{criteriaId}","method":"PUT","operationId":"updateCriteriaEndpoint","summary":"Update evaluation criteria","description":"Updates the evaluation criteria for the specified FMEA type and criteria ID. Syncs mainproject when the name is changed. Returns 404 if criteria does not exist or does not belong to the FMEA type.","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":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"count":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"defaultSelected":{"type":"boolean"},"displayed":{"type":"boolean"}}}}}}}},"PUT:/api/v2/evaluation/{fmeaType}/{criteriaId}/significance":{"path":"/api/v2/evaluation/{fmeaType}/{criteriaId}/significance","method":"PUT","operationId":"saveSignificanceEndpoint","summary":"Save significance criteria (with fmeaType)","description":"Creates or updates the significance criteria (S/O/D/RPN thresholds) for the specified evaluation criteria under the given FMEA type.","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":{"content":{"application/json":{"schema":{"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":{"rpn":{"type":"integer"},"s":{"type":"integer"},"o":{"type":"integer"},"d":{"type":"integer"},"rpnRating":{"type":"string"},"limitType":{"type":"string"}}}}}}}},"PUT:/api/v2/evaluation/{fmeaType}/{criteriaId}/{category}/{itemId}":{"path":"/api/v2/evaluation/{fmeaType}/{criteriaId}/{category}/{itemId}","method":"PUT","operationId":"updateRatingEndpoint","summary":"Update rating item","description":"Updates the rating item for the specified S/O/D category. Returns 404 if item does not exist.","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"]}},{"name":"itemId","in":"path","description":"Unique ID of the rating item","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"count":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}}}}}},"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 and returns a download URI. 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"}}}}}}}},"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."},"DELETE:/api/v2/fm-checkpoint/{id}":{"path":"/api/v2/fm-checkpoint/{id}","method":"DELETE","operationId":"deleteItem_2","summary":"Delete FM checkpoint item","description":"Deletes the specified FM checkpoint item and all its descendants recursively. Returns 400 if the item is ROOT or CATEGORY (system-fixed). Returns 404 if the ID does not exist.","tags":["FM Checkpoint"],"parameters":[{"name":"id","in":"path","description":"Unique ID of the FM checkpoint item to delete","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/fm-checkpoint/tree":{"path":"/api/v2/fm-checkpoint/tree","method":"GET","operationId":"getTree","summary":"Get FM checkpoint tree","description":"Returns the full tree structure of failure mode checkpoint items. Returned as a recursive children structure from ROOT down to ITEM leaf nodes. Used to display the checkpoint tree in the setup page.","tags":["FM Checkpoint"],"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: FmCheckpointTreeNodeDTO)"}}}}}}}}},"GET:/api/v2/fm-checkpoint/{id}":{"path":"/api/v2/fm-checkpoint/{id}","method":"GET","operationId":"getItem","summary":"Get FM checkpoint item","description":"Returns the details of a single FM checkpoint item. Returns 404 if the ID does not exist.","tags":["FM Checkpoint"],"parameters":[{"name":"id","in":"path","description":"Unique ID of the FM checkpoint item","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"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/fm-checkpoint/{id}/items":{"path":"/api/v2/fm-checkpoint/{id}/items","method":"GET","operationId":"getItems","summary":"List child FM checkpoint items","description":"Returns the direct child FM checkpoint items of the specified parent. Returns 404 if the parent ID does not exist.","tags":["FM Checkpoint"],"parameters":[{"name":"id","in":"path","description":"Parent FM checkpoint item ID","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"},"parentId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["ROOT","CATEGORY","GROUP","ITEM"]},"order":{"type":"integer"}}}}}}}}},"POST:/api/v2/fm-checkpoint/{parentId}/items":{"path":"/api/v2/fm-checkpoint/{parentId}/items","method":"POST","operationId":"createItem_2","summary":"Create FM checkpoint item","description":"Adds a new FM checkpoint item under the specified parent. The child type is automatically determined by the parent's type. Returns 400 if the parent is ROOT (CATEGORY is system-fixed) or ITEM (leaf node), or if the title is blank or duplicated.","tags":["FM Checkpoint"],"parameters":[{"name":"parentId","in":"path","description":"ID of the parent FM checkpoint item","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"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"}}}}}}}},"PUT:/api/v2/fm-checkpoint/{id}":{"path":"/api/v2/fm-checkpoint/{id}","method":"PUT","operationId":"updateItem_2","summary":"Update FM checkpoint item","description":"Updates the title and description of the specified FM checkpoint item. Returns 400 if the item is ROOT or CATEGORY (system-fixed), or if the title is blank or duplicated under the same parent.","tags":["FM Checkpoint"],"parameters":[{"name":"id","in":"path","description":"Unique ID of the FM checkpoint item to update","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"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/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_4","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_3","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_3","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_8","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_6","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_4","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_5","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_4","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_1","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_7","summary":"Export process symbols to Excel","description":"Exports all process symbols to an XLSX file and returns a download URI.","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","summary":"Import process symbols from Excel","description":"Parses an uploaded Excel file and replaces all 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-symbols":{"path":"/api/v2/process-symbols","method":"GET","operationId":"getAll","summary":"List all process symbols","description":"Returns all process flow chart symbols ordered by sortOrder. Used for process flow diagram symbol configuration.","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":"Replaces all process flow chart symbols with the provided list. Performs a full replace (delete all + insert all) in a single transaction. Returns the saved symbol list.","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"},"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"},"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"},"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"},"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_1","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_1","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. projectId is optional and narrows query 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":"Search scope (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":"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"}}}}}}}},"DELETE:/api/v2/scoring/criteria/{id}":{"path":"/api/v2/scoring/criteria/{id}","method":"DELETE","operationId":"deleteItem_3","summary":"Delete scoring criteria item","description":"Deletes a scoring criteria item and all its descendants recursively. Returns 404 if the item does not exist.","tags":["Scoring Criteria"],"parameters":[{"name":"id","in":"path","description":"Unique ID of the scoring criteria item to delete","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"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_1","summary":"Get scoring criteria item","description":"Returns a single scoring criteria item by ID. 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":"Returns the breadcrumb path from root to the specified item. Useful for navigation to show where an item sits in the hierarchy.","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":"Returns the direct children of the specified scoring criteria item. Results are sorted by score descending.","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"}}}}}}}}},"POST:/api/v2/scoring/criteria/{parentId}/items":{"path":"/api/v2/scoring/criteria/{parentId}/items","method":"POST","operationId":"createItem_3","summary":"Create scoring criteria item","description":"Creates a new scoring criteria item under the specified parent. The child type is auto-determined based on the parent type. Score validation applies for s_Scoring type (0-10).","tags":["Scoring Criteria"],"parameters":[{"name":"parentId","in":"path","description":"ID of the parent scoring criteria item","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"score":{"type":"integer","format":"int32"}}}}}},"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"}}}}}}}},"PUT:/api/v2/scoring/criteria/{id}":{"path":"/api/v2/scoring/criteria/{id}","method":"PUT","operationId":"updateItem_3","summary":"Update scoring criteria item","description":"Updates the title, description, and/or score of a scoring criteria item. Duplicate title validation applies within the same parent.","tags":["Scoring Criteria"],"parameters":[{"name":"id","in":"path","description":"Unique ID of the scoring criteria item to update","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"score":{"type":"integer","format":"int32"}}}}}},"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/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_8","summary":"Export synonyms to Excel","description":"Exports synonym groups to an XLSX file and returns a download URI. Optional q filter narrows the exported groups before generating the workbook.","tags":["SynonymExcel"],"parameters":[{"name":"q","in":"query","description":"Optional synonym keyword filter for exported rows","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":{"fileName":{"type":"string"},"downloadUri":{"type":"string"}}}}}}}},"POST:/api/v2/synonym-excel/{uuid}":{"path":"/api/v2/synonym-excel/{uuid}","method":"POST","operationId":"importExcel_1","summary":"Import synonyms from Excel","description":"Imports synonym groups from a previously uploaded Excel file referenced by uuid. Supports row and column range selection and optional merge into existing groups by first term.","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: 1)","schema":{"type":"integer","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 into existing groups when first term matches (default: false)","schema":{"type":"boolean"}}],"requestBody":null,"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."},"DELETE:/api/v2/synonyms":{"path":"/api/v2/synonyms","method":"DELETE","operationId":"deleteBatch_2","summary":"Delete synonym groups","description":"Deletes multiple synonym groups using the provided ID list and returns no content.","tags":["Synonym"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"integer","format":"int32"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"DELETE:/api/v2/synonyms/{groupId}":{"path":"/api/v2/synonyms/{groupId}","method":"DELETE","operationId":"delete_5","summary":"Delete synonym group","description":"Deletes a single synonym group by group ID. Returns 404 if the group does not exist.","tags":["Synonym"],"parameters":[{"name":"groupId","in":"path","description":"Synonym group ID to delete","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/synonyms":{"path":"/api/v2/synonyms","method":"GET","operationId":"list_11","summary":"List synonym groups","description":"Returns synonym groups with optional keyword filtering and paging.","tags":["Synonym"],"parameters":[{"name":"q","in":"query","description":"Synonym keyword filter","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":{"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":"Returns expanded synonym terms matching the provided keyword using partial keyword search across synonym groups.","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":"Returns synonym dictionary metadata including maximum term count per group and total group count.","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":"Returns a single synonym group with its ordered term list. Returns 404 if the group does not exist.","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"}}}}}}}},"POST:/api/v2/synonyms":{"path":"/api/v2/synonyms","method":"POST","operationId":"create_6","summary":"Create synonym group","description":"Creates a synonym group from non-blank terms only and returns the created ordered group.","tags":["Synonym"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"terms":{"type":"array","items":{"type":"string"}}}}}}},"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/{groupId}":{"path":"/api/v2/synonyms/{groupId}","method":"PUT","operationId":"update_5","summary":"Update synonym group","description":"Replaces all terms in the specified synonym group and returns the updated ordered group.","tags":["Synonym"],"parameters":[{"name":"groupId","in":"path","description":"Synonym group ID to update","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"terms":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"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 all action status items. Used for populating action status dropdowns in worksheets.","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/template/action-status":{"path":"/api/v2/template/action-status","method":"POST","operationId":"create_7","summary":"Create action status","description":"Creates a new action status. Returns 201 with Location header. Requires ADMIN role. Throws 409 if title already exists.","tags":["Template"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"required":["title"],"type":"object","properties":{"title":{"maxLength":30,"minLength":0,"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"GET:/api/v2/template/action-status/{id}":{"path":"/api/v2/template/action-status/{id}","method":"GET","operationId":"getById_1","summary":"Get action status by ID","description":"Returns a single action status by ID. Returns 404 if not found.","tags":["Template"],"parameters":[{"name":"id","in":"path","description":"Unique ID of the action status","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"title":{"type":"string"}}}}}}}},"PUT:/api/v2/template/action-status/{id}":{"path":"/api/v2/template/action-status/{id}","method":"PUT","operationId":"update_6","summary":"Update action status","description":"Updates an existing action status title. Returns updated DTO. Requires ADMIN role. Throws 404 if not found, 409 if title conflicts.","tags":["Template"],"parameters":[{"name":"id","in":"path","description":"Unique ID of the action status to update","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"required":["title"],"type":"object","properties":{"title":{"maxLength":30,"minLength":0,"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"DELETE:/api/v2/template/action-status/{id}":{"path":"/api/v2/template/action-status/{id}","method":"DELETE","operationId":"delete_6","summary":"Delete action status","description":"Deletes an action status by ID. Returns 204 No Content. Requires ADMIN role. Throws 404 if not found.","tags":["Template"],"parameters":[{"name":"id","in":"path","description":"Unique ID of the action status to delete","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"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_9","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"},"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"},"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"},"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"},"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"},"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"},"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"},"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_10","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_8"},"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_7"},"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_7","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
|
+
{"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":"Exports all classification groups and their items to an XLSX file and returns a download URI. 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/groups/{groupId}":{"path":"/api/v2/classifications/groups/{groupId}","method":"DELETE","operationId":"deleteGroup","summary":"Delete classification group","description":"Deletes the specified classification group and all its associated items.","tags":["Classification"],"parameters":[{"name":"groupId","in":"path","description":"Classification group ID to delete","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"DELETE:/api/v2/classifications/items/{itemId}":{"path":"/api/v2/classifications/items/{itemId}","method":"DELETE","operationId":"deleteItem_1","summary":"Delete classification item","description":"Deletes the specified classification item from its group.","tags":["Classification"],"parameters":[{"name":"itemId","in":"path","description":"Classification item ID to delete","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"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 associated with the specified classification item and resets the item symbol type to text.","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 all classification groups with their nested items. Each group contains items with symbol type (text or image) and optional image URL. 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":"Returns classification items associated with the specified project. Falls back to the default group items if the project has no project_class configured.","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":"Returns items from the system default classification group (the group with setdefault='Y'). Used when no project-specific classification is configured.","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":"Returns classification items belonging to the specified group. 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"}}}}}}}}},"PATCH:/api/v2/classifications/default":{"path":"/api/v2/classifications/default","method":"PATCH","operationId":"changeDefault","summary":"Change default classification group","description":"Sets the specified classification group as the system default.","tags":["Classification"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"groupId":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"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"}}}}}}}}}}},"POST:/api/v2/classifications/groups":{"path":"/api/v2/classifications/groups","method":"POST","operationId":"createGroup","summary":"Create classification group","description":"Creates a new classification group with the given name and optional description.","tags":["Classification"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"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"}}}}}}}}}}},"POST:/api/v2/classifications/groups/{groupId}/items":{"path":"/api/v2/classifications/groups/{groupId}/items","method":"POST","operationId":"createItem_1","summary":"Create classification item","description":"Creates a new classification item under the specified group.","tags":["Classification"],"parameters":[{"name":"groupId","in":"path","description":"Classification group ID to add the item to","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"symbol":{"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"}}}}}}}},"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 an image file for the specified classification item symbol. The image is resized to 22x22 pixels. Accepted formats: gif, jpg, png, bmp. Dangerous file types (jsp, php, asp) are rejected.","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/groups/{groupId}":{"path":"/api/v2/classifications/groups/{groupId}","method":"PUT","operationId":"updateGroup","summary":"Update classification group","description":"Updates the name and description of the specified classification group.","tags":["Classification"],"parameters":[{"name":"groupId","in":"path","description":"Classification group ID to update","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"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"}}}}}}}}}}},"PUT:/api/v2/classifications/items/{itemId}":{"path":"/api/v2/classifications/items/{itemId}","method":"PUT","operationId":"updateItem_1","summary":"Update classification item","description":"Updates the label, symbol type, and optional image URL of the specified classification item.","tags":["Classification"],"parameters":[{"name":"itemId","in":"path","description":"Classification item ID to update","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"symbol":{"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"}}}}}}}},"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_11","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 (stress/design/process)","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object"}}}}}},"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 divisions to an XLSX file and returns a download URI. Supports optional search filter. Requires admin permission.","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":"Search divisions","operationId":"list_7","description":"Returns paged divisions filtered by division name.","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":"object","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":"Retrieves detailed information for a specific division (organizational unit, department, business unit) using its unique identifier. Returns the complete division profile including metadata, hierarchy, and configuration settings. Use this endpoint when you need to fetch division details for display, editing, or as a reference in other operations. Common use cases include: populating division dropdowns, validating division access permissions, retrieving division context for projects or PFMEA records, and displaying organizational structure information.","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"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}},"DELETE:/api/v2/divisions/{divisionId}":{"path":"/api/v2/divisions/{divisionId}","method":"DELETE","operationId":"delete_2","summary":"Delete a division","description":"Deletes a division and its access list entries. Resets user mappings for divisions that referenced the deleted one. Fails if users are assigned to the division.","tags":["Division"],"parameters":[{"name":"divisionId","in":"path","description":"Division ID to delete","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/divisions/{divisionId}/authorized-divisions":{"path":"/api/v2/divisions/{divisionId}/authorized-divisions","method":"GET","operationId":"getAuthorizedDivisions","summary":"Get authorized divisions","description":"Returns the list of divisions that the specified division is authorized to access.","tags":["Division"],"parameters":[{"name":"divisionId","in":"path","description":"Division ID to query authorized 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"},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}}},"POST:/api/v2/divisions":{"path":"/api/v2/divisions","method":"POST","operationId":"create_3","summary":"Create a division","description":"Creates a new division with optional aliases and code. Automatically assigns global-access users to the new division.","tags":["Division"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"code":{"type":"string"}}}}}},"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"},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}}}}},"PUT:/api/v2/divisions/{divisionId}":{"path":"/api/v2/divisions/{divisionId}","method":"PUT","operationId":"update_2","summary":"Update a division","description":"Updates division name, aliases, and code. Cascades code changes to associated projects.","tags":["Division"],"parameters":[{"name":"divisionId","in":"path","description":"Division ID to update","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string"},"aliases":{"type":"array","items":{"type":"string"}},"code":{"type":"string"}}}}}},"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"},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}}}}},"PUT:/api/v2/divisions/{divisionId}/authorized-divisions":{"path":"/api/v2/divisions/{divisionId}/authorized-divisions","method":"PUT","operationId":"updateAuthorizedDivisions","summary":"Update authorized divisions","description":"Replaces the authorized division list for the specified division. Self-division ID is automatically excluded. User-division mappings are rebuilt after update.","tags":["Division"],"parameters":[{"name":"divisionId","in":"path","description":"Division ID to update authorized divisions for","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"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"},"no":{"type":"integer"},"name":{"type":"string"},"code":{"type":"string"},"relatedDivisions":{"type":"array","items":{"type":"object","description":"(circular: DivisionDTO)"}}}}}}}}}},"DELETE:/api/v2/divisions/batch":{"path":"/api/v2/divisions/batch","method":"DELETE","operationId":"deleteBatch","summary":"Delete divisions in batch","description":"Deletes multiple divisions by IDs. All divisions must have no users assigned. Cascade deletes authorized-division mappings and user-division mappings.","tags":["Division"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"integer","format":"int32"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/projects/{projectId}/documents/categories/{documentCategory}":{"path":"/api/v2/projects/{projectId}/documents/categories/{documentCategory}","method":"GET","operationId":"listByCategory","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"]}}],"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"]}}}}}}}}},"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"]}}],"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"},"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/{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"},"fileSize":{"type":"string"},"uploadDate":{"type":"string","format":"date"},"category":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM"]}}}}}}}},"DELETE:/api/v2/projects/{projectId}/documents/{documentId}":{"path":"/api/v2/projects/{projectId}/documents/{documentId}","method":"DELETE","operationId":"delete_8","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"},"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/{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"]}},{"name":"documentPath","in":"path","description":"Virtual document path prefix for filtering","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"},"fileSize":{"type":"string"},"uploadDate":{"type":"string","format":"date"},"category":{"type":"string","enum":["SYSTEM_DEFINITION","WORKSHEET","BLOCK_DIAGRAM","FMM_DIAGRAM"]}}}}}}}}},"DELETE:/api/v2/evaluation/{fmeaType}/{criteriaId}":{"path":"/api/v2/evaluation/{fmeaType}/{criteriaId}","method":"DELETE","operationId":"deleteCriteriaEndpoint","summary":"Delete evaluation criteria (cascade)","description":"Deletes the evaluation criteria and all its descendants (S/O/D nodes, rating items, significance_criteria). Returns 400 if any item is in use by a project.","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":{}}}}},"DELETE:/api/v2/evaluation/{fmeaType}/{criteriaId}/{category}/{itemId}":{"path":"/api/v2/evaluation/{fmeaType}/{criteriaId}/{category}/{itemId}","method":"DELETE","operationId":"deleteRatingEndpoint","summary":"Delete rating item","description":"Deletes the rating item under the specified S/O/D category. Returns 404 if item does not exist.","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"]}},{"name":"itemId","in":"path","description":"Unique ID of the rating item","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/evaluation":{"path":"/api/v2/evaluation","method":"GET","operationId":"getAllEvaluation","summary":"Get all evaluation criteria by FMEA type","description":"Returns all FMEA types with their criteria lists. Each entry includes the FMEA type name and its child criteria. Used for overview of all evaluation criteria across FMEA types. 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"}}}}}}}}}}}},"GET:/api/v2/evaluation/{fmeaType}":{"path":"/api/v2/evaluation/{fmeaType}","method":"GET","operationId":"getCriteriaByFmeaType","summary":"List criteria for a specific FMEA type","description":"Returns the evaluation criteria list for the specified FMEA type. Returns an empty list if the FMEA type has no criteria configured. Returns 400 if the fmeaType is invalid. 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":"array","items":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"defaultSelected":{"type":"boolean"},"displayed":{"type":"boolean"}}}}}}}}},"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":"Returns severity, occurrence, and detection rating items for the specified criteria under the given FMEA type. Rating items are sorted by level descending (10 → 1). Returns 404 if the criteria does not exist or does not belong to the specified FMEA type.","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":"Returns the significance criteria (S/O/D/RPN thresholds) for the specified evaluation criteria under the given FMEA type. Returns an empty DTO if not configured.","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":"Returns rating items for the specified category (severity, occurrence, or detection) under the given criteria and FMEA type. Returns 400 if category is invalid.","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"}}}}}}}}},"PATCH:/api/v2/evaluation/{fmeaType}/display":{"path":"/api/v2/evaluation/{fmeaType}/display","method":"PATCH","operationId":"updateDisplayEndpoint","summary":"Bulk update criteria display visibility","description":"Updates the display visibility of evaluation criteria items for the specified FMEA type. At least one item must remain visible.","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":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object","properties":{"id":{"type":"string"},"display":{"type":"boolean"}}}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"POST:/api/v2/evaluation/{fmeaType}":{"path":"/api/v2/evaluation/{fmeaType}","method":"POST","operationId":"createCriteriaEndpoint","summary":"Create evaluation criteria","description":"Creates a new evaluation criteria under the specified FMEA type. Auto-generates Severity, Occurrence, and Detection sub-categories and a significance_criteria row. Returns 400 if the fmeaType is invalid or unsupported for evaluation.","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":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"count":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"defaultSelected":{"type":"boolean"},"displayed":{"type":"boolean"}}}}}}}},"POST:/api/v2/evaluation/{fmeaType}/{criteriaId}/{category}":{"path":"/api/v2/evaluation/{fmeaType}/{criteriaId}/{category}","method":"POST","operationId":"createRatingEndpoint","summary":"Create rating item","description":"Creates a new rating item under the specified S/O/D category. Returns 400 if category is invalid.","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":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"count":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}}}}}},"PUT:/api/v2/evaluation/{fmeaType}/default/{criteriaId}":{"path":"/api/v2/evaluation/{fmeaType}/default/{criteriaId}","method":"PUT","operationId":"setDefaultEndpoint","summary":"Set default evaluation criteria","description":"Sets the specified criteria as the default for the FMEA type. Unsets the previous default under the same parent.","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 criteria to set as default","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"PUT:/api/v2/evaluation/{fmeaType}/{criteriaId}":{"path":"/api/v2/evaluation/{fmeaType}/{criteriaId}","method":"PUT","operationId":"updateCriteriaEndpoint","summary":"Update evaluation criteria","description":"Updates the evaluation criteria for the specified FMEA type and criteria ID. Syncs mainproject when the name is changed. Returns 404 if criteria does not exist or does not belong to the FMEA type.","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":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"count":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"defaultSelected":{"type":"boolean"},"displayed":{"type":"boolean"}}}}}}}},"PUT:/api/v2/evaluation/{fmeaType}/{criteriaId}/significance":{"path":"/api/v2/evaluation/{fmeaType}/{criteriaId}/significance","method":"PUT","operationId":"saveSignificanceEndpoint","summary":"Save significance criteria (with fmeaType)","description":"Creates or updates the significance criteria (S/O/D/RPN thresholds) for the specified evaluation criteria under the given FMEA type.","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":{"content":{"application/json":{"schema":{"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":{"rpn":{"type":"integer"},"s":{"type":"integer"},"o":{"type":"integer"},"d":{"type":"integer"},"rpnRating":{"type":"string"},"limitType":{"type":"string"}}}}}}}},"PUT:/api/v2/evaluation/{fmeaType}/{criteriaId}/{category}/{itemId}":{"path":"/api/v2/evaluation/{fmeaType}/{criteriaId}/{category}/{itemId}","method":"PUT","operationId":"updateRatingEndpoint","summary":"Update rating item","description":"Updates the rating item for the specified S/O/D category. Returns 404 if item does not exist.","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"]}},{"name":"itemId","in":"path","description":"Unique ID of the rating item","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"count":{"type":"integer","format":"int32"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"level":{"type":"integer"}}}}}}}},"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 and returns a download URI. 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"}}}}}}}},"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."},"DELETE:/api/v2/fm-checkpoint/{id}":{"path":"/api/v2/fm-checkpoint/{id}","method":"DELETE","operationId":"deleteItem_2","summary":"Delete FM checkpoint item","description":"Deletes the specified FM checkpoint item and all its descendants recursively. Returns 400 if the item is ROOT or CATEGORY (system-fixed). Returns 404 if the ID does not exist.","tags":["FM Checkpoint"],"parameters":[{"name":"id","in":"path","description":"Unique ID of the FM checkpoint item to delete","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/fm-checkpoint/tree":{"path":"/api/v2/fm-checkpoint/tree","method":"GET","operationId":"getTree","summary":"Get FM checkpoint tree","description":"Returns the full tree structure of failure mode checkpoint items. Returned as a recursive children structure from ROOT down to ITEM leaf nodes. Used to display the checkpoint tree in the setup page.","tags":["FM Checkpoint"],"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: FmCheckpointTreeNodeDTO)"}}}}}}}}},"GET:/api/v2/fm-checkpoint/{id}":{"path":"/api/v2/fm-checkpoint/{id}","method":"GET","operationId":"getItem","summary":"Get FM checkpoint item","description":"Returns the details of a single FM checkpoint item. Returns 404 if the ID does not exist.","tags":["FM Checkpoint"],"parameters":[{"name":"id","in":"path","description":"Unique ID of the FM checkpoint item","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"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/fm-checkpoint/{id}/items":{"path":"/api/v2/fm-checkpoint/{id}/items","method":"GET","operationId":"getItems","summary":"List child FM checkpoint items","description":"Returns the direct child FM checkpoint items of the specified parent. Returns 404 if the parent ID does not exist.","tags":["FM Checkpoint"],"parameters":[{"name":"id","in":"path","description":"Parent FM checkpoint item ID","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"},"parentId":{"type":"string"},"title":{"type":"string"},"description":{"type":"string"},"type":{"type":"string","enum":["ROOT","CATEGORY","GROUP","ITEM"]},"order":{"type":"integer"}}}}}}}}},"POST:/api/v2/fm-checkpoint/{parentId}/items":{"path":"/api/v2/fm-checkpoint/{parentId}/items","method":"POST","operationId":"createItem_2","summary":"Create FM checkpoint item","description":"Adds a new FM checkpoint item under the specified parent. The child type is automatically determined by the parent's type. Returns 400 if the parent is ROOT (CATEGORY is system-fixed) or ITEM (leaf node), or if the title is blank or duplicated.","tags":["FM Checkpoint"],"parameters":[{"name":"parentId","in":"path","description":"ID of the parent FM checkpoint item","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"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"}}}}}}}},"PUT:/api/v2/fm-checkpoint/{id}":{"path":"/api/v2/fm-checkpoint/{id}","method":"PUT","operationId":"updateItem_2","summary":"Update FM checkpoint item","description":"Updates the title and description of the specified FM checkpoint item. Returns 400 if the item is ROOT or CATEGORY (system-fixed), or if the title is blank or duplicated under the same parent.","tags":["FM Checkpoint"],"parameters":[{"name":"id","in":"path","description":"Unique ID of the FM checkpoint item to update","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"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/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_4","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_3","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_3","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_8","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_6","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_4","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_5","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_4","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_1","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_7","summary":"Export process symbols to Excel","description":"Exports all process symbols to an XLSX file and returns a download URI.","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","summary":"Import process symbols from Excel","description":"Parses an uploaded Excel file and replaces all 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-symbols":{"path":"/api/v2/process-symbols","method":"GET","operationId":"getAll","summary":"List all process symbols","description":"Returns all process flow chart symbols ordered by sortOrder. Used for process flow diagram symbol configuration.","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":"Replaces all process flow chart symbols with the provided list. Performs a full replace (delete all + insert all) in a single transaction. Returns the saved symbol list.","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"},"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"},"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"},"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"},"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_1","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_1","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. projectId is optional and narrows query 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":"Search scope (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":"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"}}}}}}}},"DELETE:/api/v2/scoring/criteria/{id}":{"path":"/api/v2/scoring/criteria/{id}","method":"DELETE","operationId":"deleteItem_3","summary":"Delete scoring criteria item","description":"Deletes a scoring criteria item and all its descendants recursively. Returns 404 if the item does not exist.","tags":["Scoring Criteria"],"parameters":[{"name":"id","in":"path","description":"Unique ID of the scoring criteria item to delete","required":true,"schema":{"type":"string"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"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_1","summary":"Get scoring criteria item","description":"Returns a single scoring criteria item by ID. 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":"Returns the breadcrumb path from root to the specified item. Useful for navigation to show where an item sits in the hierarchy.","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":"Returns the direct children of the specified scoring criteria item. Results are sorted by score descending.","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"}}}}}}}}},"POST:/api/v2/scoring/criteria/{parentId}/items":{"path":"/api/v2/scoring/criteria/{parentId}/items","method":"POST","operationId":"createItem_3","summary":"Create scoring criteria item","description":"Creates a new scoring criteria item under the specified parent. The child type is auto-determined based on the parent type. Score validation applies for s_Scoring type (0-10).","tags":["Scoring Criteria"],"parameters":[{"name":"parentId","in":"path","description":"ID of the parent scoring criteria item","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"score":{"type":"integer","format":"int32"}}}}}},"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"}}}}}}}},"PUT:/api/v2/scoring/criteria/{id}":{"path":"/api/v2/scoring/criteria/{id}","method":"PUT","operationId":"updateItem_3","summary":"Update scoring criteria item","description":"Updates the title, description, and/or score of a scoring criteria item. Duplicate title validation applies within the same parent.","tags":["Scoring Criteria"],"parameters":[{"name":"id","in":"path","description":"Unique ID of the scoring criteria item to update","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"score":{"type":"integer","format":"int32"}}}}}},"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/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_8","summary":"Export synonyms to Excel","description":"Exports synonym groups to an XLSX file and returns a download URI. Optional q filter narrows the exported groups before generating the workbook.","tags":["SynonymExcel"],"parameters":[{"name":"q","in":"query","description":"Optional synonym keyword filter for exported rows","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":{"fileName":{"type":"string"},"downloadUri":{"type":"string"}}}}}}}},"POST:/api/v2/synonym-excel/{uuid}":{"path":"/api/v2/synonym-excel/{uuid}","method":"POST","operationId":"importExcel_1","summary":"Import synonyms from Excel","description":"Imports synonym groups from a previously uploaded Excel file referenced by uuid. Supports row and column range selection and optional merge into existing groups by first term.","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: 1)","schema":{"type":"integer","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 into existing groups when first term matches (default: false)","schema":{"type":"boolean"}}],"requestBody":null,"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."},"DELETE:/api/v2/synonyms":{"path":"/api/v2/synonyms","method":"DELETE","operationId":"deleteBatch_2","summary":"Delete synonym groups","description":"Deletes multiple synonym groups using the provided ID list and returns no content.","tags":["Synonym"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"ids":{"type":"array","items":{"type":"integer","format":"int32"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"DELETE:/api/v2/synonyms/{groupId}":{"path":"/api/v2/synonyms/{groupId}","method":"DELETE","operationId":"delete_5","summary":"Delete synonym group","description":"Deletes a single synonym group by group ID. Returns 404 if the group does not exist.","tags":["Synonym"],"parameters":[{"name":"groupId","in":"path","description":"Synonym group ID to delete","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":null,"responses":{"default":{"description":"default response","content":{"application/json":{}}}}},"GET:/api/v2/synonyms":{"path":"/api/v2/synonyms","method":"GET","operationId":"list_11","summary":"List synonym groups","description":"Returns synonym groups with optional keyword filtering and paging.","tags":["Synonym"],"parameters":[{"name":"q","in":"query","description":"Synonym keyword filter","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":{"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":"Returns expanded synonym terms matching the provided keyword using partial keyword search across synonym groups.","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":"Returns synonym dictionary metadata including maximum term count per group and total group count.","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":"Returns a single synonym group with its ordered term list. Returns 404 if the group does not exist.","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"}}}}}}}},"POST:/api/v2/synonyms":{"path":"/api/v2/synonyms","method":"POST","operationId":"create_6","summary":"Create synonym group","description":"Creates a synonym group from non-blank terms only and returns the created ordered group.","tags":["Synonym"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"terms":{"type":"array","items":{"type":"string"}}}}}}},"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/{groupId}":{"path":"/api/v2/synonyms/{groupId}","method":"PUT","operationId":"update_5","summary":"Update synonym group","description":"Replaces all terms in the specified synonym group and returns the updated ordered group.","tags":["Synonym"],"parameters":[{"name":"groupId","in":"path","description":"Synonym group ID to update","required":true,"schema":{"type":"integer","format":"int32"}}],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"terms":{"type":"array","items":{"type":"string"}}}}}}},"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"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 all action status items. Used for populating action status dropdowns in worksheets.","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/template/action-status":{"path":"/api/v2/template/action-status","method":"POST","operationId":"create_7","summary":"Create action status","description":"Creates a new action status. Returns 201 with Location header. Requires ADMIN role. Throws 409 if title already exists.","tags":["Template"],"parameters":[],"requestBody":{"content":{"application/json":{"schema":{"required":["title"],"type":"object","properties":{"title":{"maxLength":30,"minLength":0,"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"GET:/api/v2/template/action-status/{id}":{"path":"/api/v2/template/action-status/{id}","method":"GET","operationId":"getById_1","summary":"Get action status by ID","description":"Returns a single action status by ID. Returns 404 if not found.","tags":["Template"],"parameters":[{"name":"id","in":"path","description":"Unique ID of the action status","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"integer"},"title":{"type":"string"}}}}}}}},"PUT:/api/v2/template/action-status/{id}":{"path":"/api/v2/template/action-status/{id}","method":"PUT","operationId":"update_6","summary":"Update action status","description":"Updates an existing action status title. Returns updated DTO. Requires ADMIN role. Throws 404 if not found, 409 if title conflicts.","tags":["Template"],"parameters":[{"name":"id","in":"path","description":"Unique ID of the action status to update","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"required":["title"],"type":"object","properties":{"title":{"maxLength":30,"minLength":0,"type":"string"}}}}}},"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"DELETE:/api/v2/template/action-status/{id}":{"path":"/api/v2/template/action-status/{id}","method":"DELETE","operationId":"delete_6","summary":"Delete action status","description":"Deletes an action status by ID. Returns 204 No Content. Requires ADMIN role. Throws 404 if not found.","tags":["Template"],"parameters":[{"name":"id","in":"path","description":"Unique ID of the action status to delete","required":true,"schema":{"type":"string"}}],"responses":{"default":{"description":"default response","content":{"*/*":{}}}}},"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_9","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"},"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"},"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"},"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"},"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"},"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"},"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"},"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_10","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_8"},"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_7"},"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_7","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"}}}}}}}}}}
|