Files
prep-step/CLAUDE.md
T
davideandClaude Opus 5 13f6de6402 Copia in raw anche i modelli citati per riferimento esterno
Terzo caso di "[-4] Dati di input non completi" in Creo Distributed
Batch, dopo i soppressi e le copie ambigue del commit precedente: falliva
9255728001, e solo lui fra i sei assiemi del batch.

Il file in raw/ era identico bit per bit a quello sulla share, quindi non
era il modello: mancava il contorno. Il suo sottoassieme _200 e' legato
ad altri due (9255708017, 9255708018) da assembly feature e datum
copiati, e monta una vite V6-12--_-_U5933_C il cui generico uni5933.prt
non era in raw/. Nessuno dei sei file compariva in "members" ne' fra i
piazzamenti: i due lettori esistenti non potevano vederli.

Quei modelli stanno in una tabella a parte del .asm - array \xf2\xf7\x05
… \xf3 con elementi \xe3\xe2<tipo><nome>\0 - che ora si legge con
EstraiCodiciRiferimentiEsterni, riusando la normalizzazione di #AF<n> e
istanza<generico> gia' fatta per i membri. A differenza dei soppressi si
ricorre dentro: Creo carica il modello citato con tutto il suo albero, e
infatti 9255700182 arriva solo per quella via.

La tabella contiene anche nomi di feature (MIRROR3, CHAMFER1) che dal
record non si distinguono dai modelli. Non e' un problema: come per i
soppressi si cerca ogni nome nell'indice e si ignora quello che non c'e'.
Per lo stesso motivo questi codici restano fuori dai "non trovati", e la
coda di scansione porta ora un flag che tiene fuori anche i rami
raggiunti per riferimento esterno - la lista dei componenti mancanti
continua a parlare solo della distinta.

Documentato in docs/formato-asm-record.md §7.5.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-22 14:09:48 +02:00

5.6 KiB

CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

Cos'è questo progetto

PrepStep è il nome tecnico del progetto (cartella, namespace, csproj, eseguibile PrepStep.exe); il nome mostrato all'utente finale è Cevolani StepPrep (<Product>/ <AssemblyTitle> in PrepStep/PrepStep.csproj, usato nel titolo della finestra insieme alla versione, <Version>, attualmente 0.1.0). È un'app Windows Forms (.NET 10, WinForms) che indicizza e permette di cercare i file CAD Pro-ENGINEER/Creo contenuti in tutte le cartelle di primo livello di un disco/share di rete (radice di default X:\), salvando i metadati in un DB SQLite locale (cad_index.db). Il flusso a valle (fasi 2-5, vedi sotto) prepara i file raw/ da passare a Creo Distributed Batch per l'esportazione STEP: la app è quindi un pre-processo per quel passaggio, non lo sostituisce.

Comandi

Tutti da eseguire dentro PrepStep/.

dotnet build -c Release
dotnet run -c Release

Pubblicazione come eseguibile standalone (single-file, self-contained, Windows x64):

dotnet publish -c Release -r win-x64 --self-contained true -p:PublishSingleFile=true -o publish

PrepStep.Tests/ (xUnit) contiene unit e integration test — vedi dotnet test da dentro quella cartella. Riferimento al progetto principale via ProjectReference + InternalsVisibleTo (in PrepStep.csproj), così i test possono chiamare direttamente Indexer.ParseFilename e AssemblyComponentScanner.EstraiCodiciReferenziati senza esporli come API pubblica.

Architettura

Il programma è tutto in PrepStep/ (nessun altro progetto nella solution). Dettaglio completo file-per-file in docs/architettura.md; qui solo il flusso che conta per capire il prodotto.

Form1.cs è un wizard a 5 fasi (una sola visibile alla volta, _panelFasi[], si avanza con "Avanti" solo se AvantiConsentito), UI costruita interamente in codice (BuildUi, nessun designer visuale):

  1. Database — carica/aggiorna cad_index.db (Indexer.ScanAsync, radice disco di default X:\ hardcoded in RadiceDiscoDefault); qui vive anche la cartella di lavoro (destinazione di CSV/raw//step/), proposta dall'ultima usata o dalla cartella del DB se non c'è ancora nulla di salvato — vedi docs/db-cad-index.md per il dettaglio di schema e risoluzione del percorso DB.
  2. Importa Distinta Base — DistintaBaseImporter.ConvertiInCsv genera il CSV componente;descrizione nella cartella di lavoro; se il file segue la convenzione del gestionale (DBP_<codice>_<timestamp>), aggiunge l'assieme generale come riga in più (da quel momento è un componente come tutti gli altri, nessun caso speciale nel resto del codice).
  3. Crea cartella raw — TrovaPercorsiCad + CopiaFileTrovati (parallela, vedi docs/copia-raw-parallela.md) copiano in raw/ i file CAD dei componenti del CSV trovati nell'indice.
  4. Trova componenti referenziati — legge i .asm in raw/ per risolvere ricorsivamente sotto-assiemi/parti (RisolviAlberoComponenti), copiandoli anch'essi in raw/. Usa AsmRecordReader (parser esatto dei record binari, docs/formato-asm-record.md) e ripiega su AssemblyComponentScanner (euristica testuale, docs/formato-asm.md) solo se il file non rispetta il formato validato (InvalidDataException). Tre punti da non confondere, tutti imparati facendo fallire Creo (docs/formato-asm-record.md §7.3, §7.4 e §7.5): i componenti soppressi non sono nella distinta ma il loro file serve per aprire l'assieme (EstraiCodiciSoppressi, copiati senza finire fra i "non trovati"); i riferimenti esterni (assembly feature, datum copiati) citano modelli che non sono né membri né piazzamenti, e che Creo carica con tutto il loro albero (EstraiCodiciRiferimentiEsterni, anche questi fuori dai "non trovati", ma con ricorsione); e quando lo stesso codice esiste in più cartelle della share — succede per il 13% dei codici — va copiata la copia nella stessa cartella dell'assieme che la referenzia (ScegliPerCartella), perché il .asm non registra quale usa e sbagliarla impedisce a Creo di aprire l'assieme.
  5. Verifica completezza — mostra i .asm della distinta già in raw/, trascinabili su Creo per l'esportazione STEP (Distributed Batch, manuale, fuori dall'app); "Verifica completezza assiemi" controlla ricorsivamente sull'indice (non su raw/, stessa AsmRecordReader/fallback della fase 4) se tutti i sotto-componenti di ogni assieme sono presenti.

Script standalone (scripts/)

scripts/ contiene C# file-based apps (.NET 10, dotnet run scripts/Nome.cs -- arg1 arg2, lanciati dalla root del repo — non da dentro PrepStep/, che ha un .csproj WinExe: dotnet run lì avvia la GUI vera invece dello script). Elenco e dettaglio di ciascuno in docs/architettura.md.

Il pattern da preservare: gli script referenziano PrepStep/PrepStep.csproj via #:project invece di duplicare la logica di lettura dei .asm, che vive solo nel progetto principale — un'unica fonte di verità condivisa da GUI e script. Due famiglie distinte, non intercambiabili:

  • ExtractCreoStrings.cs/BomViaDb.cs usano AssemblyComponentScanner (euristica testuale, docs/formato-asm.md) e risolvono i sottoassiemi contro cad_index.db.
  • CreoBom.cs usa AsmRecordReader (parser esatto dei record binari, docs/formato-asm-record.md, condiviso con la GUI in fase 4/5) e risolve i sottoassiemi cercandoli in cartelle locali (-p), non contro cad_index.db.