Files
breakpilot-compliance/ai-compliance-sdk/internal/iace/models_production_line.go
T
Benjamin Admin e7f2f98da3 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>
2026-05-07 10:53:26 +02:00

96 lines
3.7 KiB
Go

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"`
}