236 lines
6.2 KiB
Markdown
Executable File
236 lines
6.2 KiB
Markdown
Executable File
# Checklist operativa `.200` -> `.202` Mini AI
|
|
|
|
Questa checklist serve sulla macchina `.200` per verificare che la mini AI della `.202` sia davvero attiva, raggiungibile e letta correttamente da NetGescon.
|
|
|
|
## Obiettivo
|
|
|
|
Verificare tre punti distinti:
|
|
|
|
1. la configurazione Laravel/NetGescon sulla `.200`
|
|
2. la raggiungibilita HTTP della mini AI sulla `.202`
|
|
3. il funzionamento del comando applicativo `netgescon:mini-ai-incassi`
|
|
|
|
Se uno di questi tre passaggi fallisce, la UI puo mostrare messaggi come:
|
|
|
|
- `Mini AI non abilitata`
|
|
- `Q/A #22 · Mini AI non abilitata: impostare MINI_AI_ENABLED=true`
|
|
|
|
## Configurazione attesa nel `.env` della `.200`
|
|
|
|
Nel file `.env` del progetto NetGescon devono essere presenti almeno queste variabili:
|
|
|
|
```env
|
|
MINI_AI_ENABLED=true
|
|
MINI_AI_BASE_URL=http://192.168.0.202:8000
|
|
MINI_AI_RECONCILIATION_PATH=/api/v1/reconciliation/incassi
|
|
MINI_AI_TIMEOUT=30
|
|
```
|
|
|
|
Se sulla `.202` e attiva autenticazione bearer, aggiungere anche:
|
|
|
|
```env
|
|
MINI_AI_TOKEN=<token-locale-della-202>
|
|
```
|
|
|
|
## 1. Verifica del file `.env`
|
|
|
|
Dal root del progetto NetGescon sulla `.200`:
|
|
|
|
```bash
|
|
grep -E 'MINI_AI_ENABLED|MINI_AI_BASE_URL|MINI_AI_RECONCILIATION_PATH|MINI_AI_TIMEOUT|MINI_AI_TOKEN' .env
|
|
```
|
|
|
|
Controlli attesi:
|
|
|
|
- `MINI_AI_ENABLED=true`
|
|
- `MINI_AI_BASE_URL=http://192.168.0.202:8000`
|
|
- `MINI_AI_RECONCILIATION_PATH=/api/v1/reconciliation/incassi`
|
|
|
|
## 2. Pulizia cache Laravel
|
|
|
|
Se il file `.env` e corretto ma la UI continua a dire che la mini AI non e abilitata, svuotare la cache configurazione:
|
|
|
|
```bash
|
|
php artisan config:clear
|
|
php artisan cache:clear
|
|
```
|
|
|
|
## 3. Verifica configurazione letta da Laravel
|
|
|
|
Eseguire:
|
|
|
|
```bash
|
|
php artisan tinker --execute='dump(config("services.mini_ai"));'
|
|
```
|
|
|
|
Esito atteso minimo:
|
|
|
|
```php
|
|
array:4 [
|
|
"enabled" => true
|
|
"base_url" => "http://192.168.0.202:8000"
|
|
"reconciliation_path" => "/api/v1/reconciliation/incassi"
|
|
"timeout" => 30
|
|
]
|
|
```
|
|
|
|
Se `enabled` risulta `false` o `null`, il problema e interno alla `.200` e non dipende dalla `.202`.
|
|
|
|
## 4. Test HTTP diretto verso la `.202`
|
|
|
|
Questo test bypassa Laravel e verifica solo che la `.202` risponda davvero.
|
|
|
|
```bash
|
|
curl -sS -X POST 'http://192.168.0.202:8000/api/v1/reconciliation/incassi' \
|
|
-H 'Content-Type: application/json' \
|
|
-d '{
|
|
"task": "reconcile_incassi_movimenti_bancari",
|
|
"mode": "read_only_suggestions",
|
|
"snapshot": {
|
|
"records": [
|
|
{
|
|
"legacy_key": "inc:test",
|
|
"incasso_id": 1,
|
|
"importo": 10.00,
|
|
"data": "2025-04-30",
|
|
"descrizione": "Canone mensile banca aprile"
|
|
}
|
|
]
|
|
}
|
|
}'
|
|
```
|
|
|
|
Esito atteso:
|
|
|
|
```json
|
|
{
|
|
"summary": "1 record analizzati; 1 ignore.",
|
|
"warnings": [
|
|
"Alcuni record sono stati classificati come spese bancarie o non riconciliabili."
|
|
],
|
|
"suggestions": [
|
|
{
|
|
"legacy_key": "inc:test",
|
|
"confidence": 0.98,
|
|
"suggested_incasso_id": 1,
|
|
"suggested_movimento_id": null,
|
|
"suggested_action": "ignore",
|
|
"reason": "Caso facile: spesa bancaria ricorrente o onere banca; non va collegato a incassi condominiali."
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
Se questo `curl` fallisce, il problema e di rete o endpoint. Se invece funziona, la `.202` e sana.
|
|
|
|
## 5. Test comando NetGescon a secco
|
|
|
|
Una volta verificata la config, eseguire:
|
|
|
|
```bash
|
|
php artisan netgescon:mini-ai-incassi --codice-stabile=0016 --limit=2 --dry-run
|
|
```
|
|
|
|
Se il comando e configurato correttamente, deve:
|
|
|
|
- generare la richiesta
|
|
- inviare la POST alla `.202`
|
|
- ricevere una risposta JSON valida
|
|
- salvare il traffico in `ai_requests`
|
|
|
|
## 6. Test con caso reale `mov:15523`
|
|
|
|
```bash
|
|
php artisan netgescon:mini-ai-incassi --movimento-id=15523 --limit=30 --dry-run > payload-barone-15523.json
|
|
|
|
curl -sS -X POST 'http://192.168.0.202:8000/api/v1/reconciliation/incassi' \
|
|
-H 'Content-Type: application/json' \
|
|
-d @payload-barone-15523.json
|
|
```
|
|
|
|
Esito atteso sintetico:
|
|
|
|
- `legacy_key = mov:15523`
|
|
- `suggested_movimento_id = 15523`
|
|
- `suggested_action = link`
|
|
- `confidence ~= 0.98`
|
|
- `allocations[]` valorizzato
|
|
- totale `allocations.amount = 1285.70`
|
|
|
|
## 7. Test con caso reale `mov:15953`
|
|
|
|
```bash
|
|
php artisan netgescon:mini-ai-incassi --movimento-id=15953 --limit=40 --dry-run > payload-barone-15953.json
|
|
|
|
curl -sS -X POST 'http://192.168.0.202:8000/api/v1/reconciliation/incassi' \
|
|
-H 'Content-Type: application/json' \
|
|
-d @payload-barone-15953.json
|
|
```
|
|
|
|
Esito atteso sintetico:
|
|
|
|
- `legacy_key = mov:15953`
|
|
- `suggested_movimento_id = 15953`
|
|
- `suggested_action = link`
|
|
- `confidence ~= 0.98`
|
|
- `allocations[]` valorizzato
|
|
- presente conguaglio negativo `rate_id=42546 amount=-0.61`
|
|
- totale `allocations.amount = 960.79`
|
|
|
|
## 8. Test con caso alias `mov:15803`
|
|
|
|
```bash
|
|
php artisan netgescon:mini-ai-incassi --movimento-id=15803 --limit=40 --dry-run > payload-curatola-15803.json
|
|
|
|
curl -sS -X POST 'http://192.168.0.202:8000/api/v1/reconciliation/incassi' \
|
|
-H 'Content-Type: application/json' \
|
|
-d @payload-curatola-15803.json
|
|
```
|
|
|
|
Esito atteso sintetico:
|
|
|
|
- `legacy_key = mov:15803`
|
|
- `suggested_movimento_id = 15803`
|
|
- `suggested_action = link`
|
|
- `confidence ~= 0.98`
|
|
- `allocations[]` con 12 rate
|
|
- totale `allocations.amount = 1968.23`
|
|
- il motivo puo citare la coerenza di `payer_reference` e alias anagrafici
|
|
|
|
## 9. Diagnosi rapida per errore `Mini AI non abilitata`
|
|
|
|
Se compare ancora il messaggio:
|
|
|
|
- `Mini AI non abilitata`
|
|
|
|
allora il problema e quasi certamente questo:
|
|
|
|
1. `MINI_AI_ENABLED` non e presente o non e `true`
|
|
2. Laravel usa ancora config cache vecchia
|
|
3. il codice della `.200` legge un path config diverso dal `.env`
|
|
|
|
Controllo minimo:
|
|
|
|
```bash
|
|
php artisan tinker --execute='dump(config("services.mini_ai"));'
|
|
```
|
|
|
|
Finche questo comando non mostra `enabled => true`, la `.200` non chiamera la `.202`.
|
|
|
|
## 10. Se serve prova completa da UI
|
|
|
|
Dopo i controlli sopra:
|
|
|
|
1. aprire `admin-filament/contabilita/incassi`
|
|
2. verificare che non compaia piu `Mini AI non abilitata`
|
|
3. inviare un caso test
|
|
4. controllare che `ai_requests` riceva richiesta e risposta
|
|
|
|
## Criterio finale di ok
|
|
|
|
Il collegamento `.200` -> `.202` e considerato corretto quando:
|
|
|
|
- `config("services.mini_ai")` restituisce `enabled => true`
|
|
- il `curl` diretto verso `192.168.0.202:8000` risponde JSON valido
|
|
- `php artisan netgescon:mini-ai-incassi ...` produce richieste e risposte salvate
|
|
- la UI non mostra piu `Mini AI non abilitata` |