{ "skill_name": "vdi2230-dimensionamento-viti", "evals": [ { "id": 1, "prompt": "Ho una flangia in acciaio S355 con due metà che devo serrare insieme. La flangia è spessa 40mm in totale, il diametro flangia è 80mm e i fori sono da 17mm. Il carico assiale che arriva sulla connessione è circa 50kN statico. Che vite uso e con che coppia la servo?", "expected_output": "La skill deve: (1) raccogliere i dati mancanti con domande mirate o assumere default sensati, (2) eseguire lo script vdi2230_calc.py o auto_size.py, (3) restituire almeno: la dimensione vite consigliata (verosimilmente M16 8.8 o M14 10.9), la coppia di serraggio MA in Nm, e il precarico FM. Le verifiche R7-R12 devono essere presentate tutte.", "assertions": [ { "text": "Il risultato include una dimensione vite specifica (es. M14, M16) e una classe di resistenza", "type": "output_contains_pattern", "pattern": "M\\d{1,2}.*(?:8\\.8|10\\.9|12\\.9)" }, { "text": "Il risultato include la coppia di serraggio MA in Nm", "type": "output_contains_keyword", "keyword": "Nm" }, { "text": "Il risultato include almeno un valore di precarico FM in kN", "type": "output_contains_keyword", "keyword": "kN" }, { "text": "Sono presenti le verifiche R7-R12 con esito ✅ o ❌", "type": "output_contains_keyword", "keyword": "R7" }, { "text": "Lo script Python è stato eseguito (non calcolo manuale)", "type": "output_contains_keyword", "keyword": "vdi2230_calc" } ] }, { "id": 2, "prompt": "Devo verificare se una vite M10 classe 8.8 regge su un supporto in alluminio EN-AW 6082. La vite è avvitata direttamente nell'alluminio (no dado), lunghezza avvitamento 16mm. Carico: FA max = 8000N, FA min = 1000N (carico a fatica), nessuna forza trasversale. lK = 20mm, DA = 30mm, foro da 11mm.", "expected_output": "La skill deve: (1) riconoscere il caso ESV (vite in foro filettato) e alluminio come materiale critico per pG e meff, (2) eseguire il calcolo, (3) segnalare se la lunghezza di avvitamento 16mm è sufficiente (meff_min per alluminio ≈ 2·d = 20mm → probabile fallimento R11), (4) fornire azione correttiva concreta.", "assertions": [ { "text": "Il tipo giunzione ESV è correttamente identificato", "type": "output_contains_keyword", "keyword": "ESV" }, { "text": "Il materiale alluminio è considerato nel calcolo", "type": "output_contains_keyword", "keyword": "alluminio" }, { "text": "La verifica R11 (lunghezza avvitamento) appare nel report", "type": "output_contains_keyword", "keyword": "R11" }, { "text": "Se R11 fallisce, è presente un'azione correttiva (aumentare meff o inserto)", "type": "output_contains_keyword", "keyword": "avvitamento" }, { "text": "La verifica a fatica R9 è presente dato il carico variabile", "type": "output_contains_keyword", "keyword": "R9" } ] }, { "id": 3, "prompt": "Sizing automatico: ho un coperchio da pressione con tenuta verso 8 bar interni. Area guarnizione circa 1200mm². Il coperchio è in ghisa GJL-250, spessore 35mm, flangia da 60mm. I bulloni saranno in posizione simmetrica, con foro da 14mm. Carico assiale sui bulloni trascurabile (è solo pressione). Dimmi qual è il bullone minimo e con che coppia.", "expected_output": "La skill deve: (1) convertire 8 bar in N/mm² (0.8 N/mm²) e calcolare FKP = AD·pi = 1200·0.8 = 960N, (2) usare auto_size.py per trovare il diametro minimo, (3) usare pG adeguato per ghisa (400-600 N/mm²), (4) restituire la soluzione minima con coppia MA.", "assertions": [ { "text": "La pressione 8 bar è convertita in N/mm² (0.8) per il calcolo", "type": "output_contains_keyword", "keyword": "0.8" }, { "text": "Il materiale ghisa è considerato con pG appropriato (≤ 600 N/mm²)", "type": "output_contains_keyword", "keyword": "ghisa" }, { "text": "Auto-sizing è stato usato o il diametro minimo è stato trovato iterativamente", "type": "output_contains_keyword", "keyword": "auto_size" }, { "text": "Il risultato include la coppia di serraggio MA", "type": "output_contains_keyword", "keyword": "MA" } ] }, { "id": 4, "prompt": "Qual è la coppia di serraggio per una M20 classe 10.9 con coefficiente d'attrito 0.14? È una vite passante con dado, condizione di consegna senza lubrificante.", "expected_output": "Domanda rapida — la skill deve rispondere leggendo MA dalla tabella A1 fm_table.json senza eseguire il calcolo completo R0-R13. Il valore atteso è MA ≈ 661 Nm (tabella A1, M20 10.9, µ=0.14). Non deve chiedere lK, DA, dh o altri parametri geometrici non necessari per questa risposta.", "assertions": [ { "text": "Il valore MA restituito è nell'intervallo corretto 600-800 Nm per M20 10.9 µ=0.14", "type": "numeric_range", "min": 600, "max": 800, "unit": "Nm" }, { "text": "Il coefficiente di attrito µ=0.14 è usato nel calcolo", "type": "output_contains_keyword", "keyword": "0.14" }, { "text": "Il precarico FM è riportato (da tabella A1: ≈ 181 kN per M20 10.9 µ=0.14)", "type": "output_contains_keyword", "keyword": "kN" }, { "text": "La risposta NON chiede lK, DA, dh o altri parametri geometrici — sono inutili per una semplice lettura di MA/FM da tabella", "type": "behavior", "description": "Per domande pure MA/FM con size+classe+µ noti, la skill usa fm_table lookup diretto senza script completo" } ] }, { "id": 5, "prompt": "Ho già fatto il calcolo VDI 2230 e mi è venuto fuori che R9 (fatica) non passa: σa = 38 MPa ma σAS = 31 MPa. SD = 0.82. Cosa posso fare per farlo passare senza cambiare il diametro?", "expected_output": "La skill deve fornire azioni correttive specifiche per R9 senza ridimensionamento: (1) passare a filetto rullato post-tempra SG (+20-30% su σAS), (2) aumentare il precarico FM che riduce l'ampiezza relativa, (3) progetto a vita finita se NZ è basso. Deve spiegare il meccanismo fisico dietro ogni azione.", "assertions": [ { "text": "È menzionato il trattamento SG (rullato post-tempra) come alternativa a SV", "type": "output_contains_keyword", "keyword": "SG" }, { "text": "È spiegato come aumentare il precarico riduce σa", "type": "output_contains_keyword", "keyword": "precarico" }, { "text": "La risposta non suggerisce inutilmente di aumentare il diametro", "type": "behavior", "description": "Il progettista ha esplicitamente chiesto soluzioni senza cambio diametro" }, { "text": "Il meccanismo fisico è spiegato (σAS dipende da FSm/F0.2min per SG)", "type": "output_contains_keyword", "keyword": "σAS" } ] } , { "id": 6, "prompt": "Ho un coperchio in alluminio EN-AW 6082 su un carter in acciaio. Le viti M10 classe 8.8 vengono serrate a freddo (20°C) ma in esercizio il carter raggiunge 120°C. lK=30mm, DA=28mm, dh=11mm. FA_max=5000N statico. Che succede al precarico in esercizio e la vite regge?", "expected_output": "La skill deve: (1) riconoscere il caso termico critico acciaio-alluminio (alpha_P alluminio ≈ 2,3e-5 vs alpha_S acciaio ≈ 1,15e-5), (2) calcolare la variazione ΔFVth con dT_P_K=100K, (3) verificare che il precarico residuo in esercizio FM_min - ΔFVth sia ancora sufficiente (FKerf). Se il precarico si azzera la giunzione apre. Deve anche verificare pG per alluminio (pG=300-450 N/mm²).", "assertions": [ { "text": "La variazione termica ΔFVth è calcolata e presentata", "type": "output_contains_keyword", "keyword": "termico" }, { "text": "Il coefficiente di dilatazione diverso tra alluminio e acciaio è menzionato", "type": "output_contains_keyword", "keyword": "dilatazione" }, { "text": "La verifica R10 usa pG corretto per alluminio (≤ 450 N/mm²)", "type": "output_contains_keyword", "keyword": "alluminio" }, { "text": "È valutato se il precarico residuo in esercizio è ancora sufficiente", "type": "output_contains_keyword", "keyword": "FM_min" }, { "text": "Se il precarico si riduce pericolosamente, la skill suggerisce contromisure (es. ridurre fZ, aumentare FM_min, usare rondella dura, serrare a caldo)", "type": "behavior", "description": "La skill deve proporre azioni correttive concrete al progettista se la verifica termica fallisce" } ] }, { "id": 7, "prompt": "Ho 4 viti M14 classe 10.9 su una flangia in acciaio che deve reggere contemporaneamente una forza assiale FA_tot = 60 kN e un momento torcente MT = 800 Nm attorno all'asse del giunto. Il raggio del cerchio viti è 50mm. lK=45mm, DA=42mm, dh=15mm. Le viti reggono?", "expected_output": "La skill deve: (1) dividere FA_tot per N=4 viti → FA_bolt=15000N, (2) calcolare FQ_bolt = MT/(N·r_bc) = 800000/(4·50) = 4000N per vite, (3) eseguire il calcolo con FA_max_N=15000 e FQ_max_N=4000, (4) verificare R12 anti-scorrimento (critico per FQ). Deve dichiarare esplicitamente il calcolo per-vite.", "assertions": [ { "text": "FA_bolt = FA_tot/N = 15000 N è dichiarato esplicitamente", "type": "output_contains_keyword", "keyword": "15000" }, { "text": "FQ_bolt = 4000 N è calcolato dal momento torcente", "type": "output_contains_keyword", "keyword": "4000" }, { "text": "La verifica R12 anti-scorrimento è presente nel report", "type": "output_contains_keyword", "keyword": "R12" }, { "text": "Il numero di viti N=4 è usato nel calcolo per-vite", "type": "output_contains_keyword", "keyword": "4" }, { "text": "Lo script è eseguito con FQ_max_N e FA_max_N entrambi forniti", "type": "output_contains_keyword", "keyword": "FQ" } ] } ] }