feat: IACE CE-Compliance Module — Normen, Risikobewertung, Production Lines
Major features: - 215 norms library with section references + Beuth URLs (A/B1/B2/C norms) - 173 hazard patterns with detail fields (scenario, trigger, harm, zone) - Deterministic pattern matching: Component × Lifecycle × Pattern cross-product - SIL/PL auto-calculation from S×E×P risk graph - Risk assessment table with editable S/E/P dropdowns - Production Line Dashboard with animated station flow (Running Dots) - IACE process flow + norms coverage on start page - Non-blocking cookie banner, ProcessFlow SSR fix - 104 Playwright E2E tests passing Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,95 @@
|
||||
package iace
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
// ============================================================================
|
||||
// Production Line Entities
|
||||
// ============================================================================
|
||||
|
||||
// ProductionLine represents a chain of IACE projects forming a production line
|
||||
type ProductionLine struct {
|
||||
ID uuid.UUID `json:"id"`
|
||||
TenantID uuid.UUID `json:"tenant_id"`
|
||||
Name string `json:"name"`
|
||||
Description string `json:"description,omitempty"`
|
||||
Layout json.RawMessage `json:"layout,omitempty"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
UpdatedAt time.Time `json:"updated_at"`
|
||||
}
|
||||
|
||||
// ProductionLineStation links a production line to an IACE project as a station
|
||||
type ProductionLineStation struct {
|
||||
ID uuid.UUID `json:"id"`
|
||||
LineID uuid.UUID `json:"line_id"`
|
||||
ProjectID uuid.UUID `json:"project_id"`
|
||||
StationType string `json:"station_type"`
|
||||
StationLabel string `json:"station_label,omitempty"`
|
||||
SortOrder int `json:"sort_order"`
|
||||
PositionX float64 `json:"position_x"`
|
||||
PositionY float64 `json:"position_y"`
|
||||
Metadata json.RawMessage `json:"metadata,omitempty"`
|
||||
CreatedAt time.Time `json:"created_at"`
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// Dashboard Aggregation Types
|
||||
// ============================================================================
|
||||
|
||||
// StationDashboard contains the per-station risk and compliance summary
|
||||
type StationDashboard struct {
|
||||
Station ProductionLineStation `json:"station"`
|
||||
ProjectName string `json:"project_name"`
|
||||
MachineType string `json:"machine_type"`
|
||||
Status string `json:"status"`
|
||||
RiskSummary map[string]int `json:"risk_summary"`
|
||||
HazardCount int `json:"hazard_count"`
|
||||
MitigationCount int `json:"mitigation_count"`
|
||||
CompletenessPct int `json:"completeness_pct"`
|
||||
SILMax string `json:"sil_max"`
|
||||
PLMax string `json:"pl_max"`
|
||||
}
|
||||
|
||||
// LineDashboard aggregates all stations for a production line overview
|
||||
type LineDashboard struct {
|
||||
Line ProductionLine `json:"line"`
|
||||
Stations []StationDashboard `json:"stations"`
|
||||
Transfers []TransferInfo `json:"transfers"`
|
||||
Aggregate map[string]int `json:"aggregate"`
|
||||
}
|
||||
|
||||
// TransferInfo describes a material/data flow between adjacent stations
|
||||
type TransferInfo struct {
|
||||
FromStation int `json:"from_station"`
|
||||
ToStation int `json:"to_station"`
|
||||
Type string `json:"type"`
|
||||
Label string `json:"label"`
|
||||
}
|
||||
|
||||
// ============================================================================
|
||||
// API Request/Response Types
|
||||
// ============================================================================
|
||||
|
||||
// CreateProductionLineRequest is the API request for creating a production line
|
||||
type CreateProductionLineRequest struct {
|
||||
Name string `json:"name" binding:"required"`
|
||||
Description string `json:"description,omitempty"`
|
||||
}
|
||||
|
||||
// AddStationRequest is the API request for adding a station to a production line
|
||||
type AddStationRequest struct {
|
||||
ProjectID uuid.UUID `json:"project_id" binding:"required"`
|
||||
StationType string `json:"station_type,omitempty"`
|
||||
StationLabel string `json:"station_label,omitempty"`
|
||||
SortOrder int `json:"sort_order"`
|
||||
}
|
||||
|
||||
// ProductionLineListResponse is the API response for listing production lines
|
||||
type ProductionLineListResponse struct {
|
||||
Lines []ProductionLine `json:"lines"`
|
||||
Total int `json:"total"`
|
||||
}
|
||||
Reference in New Issue
Block a user