Normalizza il suffisso #AF di ConfigName; documenta il limite sulle family table di assiemi
Test end-to-end su un albero reale (9284218024b.asm, confrontato con la sua BOM Creo di riferimento tramite scripts/CreoBom.cs) oltre gli 8 campioni usati per il reverse engineering iniziale. Trovato: i componenti creati da un pattern/array feature hanno un ConfigName con suffisso "<codice>#AF<n>" (n = indice nel pattern), non un'istanza di family table vera - la BOM di Creo lo ignora e unisce le occorrenze duplicate. AsmRecordReader ora rimuove questo suffisso prima di usare il nome istanza. Trovato ma non risolto: un intero ASSIEME (non solo le parti normalizzate) puo' avere una family table, risolta da Creo con un meccanismo diverso da ConfigName (non decodificato). AsmRecordReader non lo rileva e non lancia eccezione in questo caso: il fallback automatico di Form1 non scatta, e il risultato puo' essere silenziosamente incompleto. Documentato come limite noto in formato-asm-record.md e in CLAUDE.md - nessun fix applicato finche' il meccanismo non e' meglio compreso. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
cce377a091
commit
28a72c80b2
4 files changed
+70
-3
No files matched your search
@@ -184,7 +184,7 @@ Il collegamento sta in un record di **parametro** applicato al membro:
|
||||
nessun altro. L'algoritmo è quindi: leggere `members`, costruire la mappa
|
||||
`id membro → nome istanza` dai record `ConfigName`
|
||||
(`AsmRecordReader.LeggiMembri`, dizionario `istanze`), e sostituire il nome dove la
|
||||
mappa ha una voce. Il generico resta disponibile come `Membro.File`.
|
||||
mappa ha una voce. Il generico resta disponibile come `Membro.Generico`.
|
||||
|
||||
> **Avvertenza.** `ConfigName` sta in mezzo a parametri palesemente aziendali
|
||||
> (`TIPO_PARTE`, `CLASSE_RICAR`, `GR_PRODOTTO`, `TECN_RIORDINO`), quindi
|
||||
@@ -192,6 +192,25 @@ mappa ha una voce. Il generico resta disponibile come `Membro.File`.
|
||||
> interna. Regge sui campioni disponibili, ma su file provenienti da
|
||||
> un'altra installazione va riverificato prima di fidarsene.
|
||||
|
||||
### 4.0.1 Eccezione: componenti da pattern/array feature (`#AF<n>`)
|
||||
|
||||
Un componente creato da un **pattern/array feature** (stessa geometria ripetuta N volte da
|
||||
una feature di pattern, non N placement manuali distinti) ha un `ConfigName` con un nome
|
||||
nella forma `<codice>#AF<n>` (`n` = indice dell'istanza nel pattern), es.
|
||||
`9244250136_C01#AF0`. **Non è un'istanza di family table**: è un tag interno di
|
||||
disambiguazione fra le ripetizioni del pattern. La BOM reale di Creo lo **ignora** e mostra
|
||||
il codice pulito, unendo le occorrenze duplicate in una sola riga con la quantità totale.
|
||||
|
||||
Osservato su `9244250136.asm`: 4 dei suoi 8 membri hanno `ConfigName` con suffisso `#AF`,
|
||||
due dei quali (`_C03#AF0` e `_C03#AF1`) sono lo **stesso codice** con `n` diverso — la BOM li
|
||||
mostra come un'unica riga `9244250136_C03` con quantità 2. Senza normalizzare il suffisso,
|
||||
ogni istanza del pattern risulterebbe un componente distinto (e con nome sbagliato).
|
||||
`AsmRecordReader` rimuove `#AF\d+$` da ogni valore di `ConfigName` prima di usarlo
|
||||
(`SuffissoArrayFeatureRegex`). Scoperto durante un test end-to-end su un albero reale più
|
||||
ampio degli 8 campioni originali (`9284218024b.asm`, confrontato con la sua BOM Creo di
|
||||
riferimento) — non era presente in nessuno degli 8 campioni usati per il reverse engineering
|
||||
iniziale.
|
||||
|
||||
### 4.1 Una seconda pista, che NON va usata per la BOM
|
||||
|
||||
Altrove nel file compaiono stringhe nella forma `istanza<generico>`:
|
||||
@@ -291,6 +310,24 @@ sbagliato.
|
||||
|
||||
Elencato esplicitamente per non far passare per dimostrato ciò che non lo è:
|
||||
|
||||
- **⚠️ Family table di ASSIEMI (non solo di parti), risultato silenziosamente sbagliato.**
|
||||
Non solo le parti normalizzate (§4) possono essere family table: un intero **assieme** può
|
||||
esserlo. Osservato su `2546220101.asm` (dentro l'albero di `9284218024b.asm`): il file
|
||||
generico ha una propria sezione `members` che elenca il contenuto di UNA rappresentazione
|
||||
(nell'esempio, 3 cuscinetti + 1 sotto-assieme), ma la BOM Creo per lo stesso file mostra 4
|
||||
**istanze diverse** (`2546220101_C01`.."_C04", tre "Parte" e una "Sottoassieme" - tipi
|
||||
diversi fra loro!), ciascuna con un proprio contenuto potenzialmente diverso. Il nome
|
||||
istanza qui **non** passa da un record `ConfigName` (verificato: nessuna occorrenza
|
||||
letterale di `ConfigName` nel file) ma da un meccanismo diverso, imparentato con la
|
||||
"seconda pista" del §4.1 (`\xe3<id>\xe2\x02<stringa>\0`, senza il bracket
|
||||
`<generico>` in questo caso) - non decodificato. **`AsmRecordReader.LeggiMembri` non lo
|
||||
rileva e non lancia eccezione**: restituisce silenziosamente il contenuto della
|
||||
rappresentazione di default sotto un solo nome, invece delle 4 istanze corrette - a
|
||||
differenza degli altri limiti di questa sezione, qui il fallimento non è segnalato in
|
||||
nessun modo al chiamante (né un conteggio che non torna, né un'eccezione). Scoperto sullo
|
||||
stesso test end-to-end del punto `#AF` sopra, mai osservato negli 8 campioni originali.
|
||||
**Prima di fidarsi del parser esatto su un albero con assiemi a family table, verificare a
|
||||
mano contro la BOM Creo.**
|
||||
- **Stato soppresso / escluso.** Nessuna evidenza cercata o trovata. Non si sa
|
||||
se un componente soppresso compaia in `members`, né con quale marcatore. Sui
|
||||
campioni disponibili il totale coincideva con la BOM, il che *suggerisce* che
|
||||
|
||||
Reference in new issue
Block a user