# Factory, Configurazioni e Product Tree

Usa questa reference quando il task riguarda bootstrap di factory client, classificazione di configurazioni, file `.cfg` o `.json`, oppure perimetro Platform.

## Factory client

Quando un componente risiede nel client:

- creare `client/cflib/clientfactory.cfc` se non esiste;
- registrare in `client/cfg/gr931_cfc2create.cfm` la factory `clientfactory`;
- aggiungere in `clientfactory.cfc` la chiave del componente con il path corretto;
- eseguire reset application per ricaricare la factory.

Per esempi concreti usa anche `../templates/client-core/zeroquattro/`.

## Classificazione veloce della configurazione

### `.cfm` di cfg

Usa file `.cfm` quando devi caricare configurazioni standard di livello / factory / procedure.

Regole minime:
- supportati suffissi ambiente: `dev`, `qa`, `prod`, `demo`, `test`, `test2`, `preprod`;
- un file senza suffisso viene caricato in tutti gli ambienti;
- il tipo ambiente dipende da `glb.ambiente` in `app.ini`.

### `.json` configurabile

Usa i file `.json` per parametri configurabili dalla funzionalita' "Configurazione di sistema".

Regole minime:
- i namespace core finiscono in `framework/cfg` o `net/cfg` secondo la suite;
- le personalizzazioni client stanno in `client/cfg`;
- per custom client usare namespace `{suite}.{solution}.custom`;
- la chiave `LABEL` non deve includere `SUITE.SOLUTION`.

### `cfgset`

Usa `client/cfg/cfgset/...` quando devi versionare ed esportare personalizzazioni applicate via GUI.

Regola base:
- non ridefinire in JSON client un parametro gia esistente a core solo per cambiarne il valore;
- personalizzalo da GUI e versiona l'export nel `cfgset`.

### GUI "Configurazione di sistema"

Usala quando il parametro e' configurabile dall'applicazione e deve essere modificabile senza deploy o riavvio.

## Product tree / perimetro

- Tutte le pagine standard Platform sotto un core devono stare nel perimetro.
- Il client puro non e' soggetto a product tree.
- `client/core` e high value vanno comunque aggiunti al perimetro per facilitare il porting.

Versioni:
- fino a 6.4 inclusa: `perimetro.properties`
- fino a 7.0.1 inclusa: `framework/update/applicationmap/producttree.cfg`
- da 7.0.2: file `<suite>.<solution>.cfg` sotto `framework/update/applicationmap/`

## Verifiche minime

- factory caricata dal `gr931` corretto;
- scelta corretta tra codice, `.cfg`, `.json`, `cfgset` e GUI;
- namespace e file coerenti;
- per pagine core o client/core, perimetro aggiornato.
