# Checklist QA (/it/in-store/getting-started/checklist)



Prima di rilasciare l'applicazione, esegua questa checklist di controllo qualità (QA). Copre i test funzionali, la gestione degli errori e gli scenari di esperienza utente, per ridurre al minimo i problemi sul campo. Spunti ogni controllo man mano che lo verifica.

<ChecklistProgress />

## 1. Test funzionali [#1-functional-testing]

### Flussi di transazione [#transaction-flows]

<ChecklistItem id="TF-1" code="TF-1" title="Pagamento riuscito">
  Verifichi una transazione standard approvata con l'importo 

  `1.01`

   (codice 

  `00`

  ) nell'

  [ambiente sandbox](./testing)

  .
</ChecklistItem>

<ChecklistItem id="TF-2" code="TF-2" title="Autenticazione della carta rifiutata">
  Simuli una transazione rifiutata con l'importo 

  `1.07`

   (codice 

  `06`

  ) e si assicuri che l'app la gestisca correttamente senza arrestarsi in modo anomalo.
</ChecklistItem>

<ChecklistItem id="TF-3" code="TF-3" title="Carta scaduta">
  Simuli una carta scaduta con l'importo 

  `6.05`

   (codice 

  `54`

  ) e controlli il messaggio mostrato all'utente.
</ChecklistItem>

<ChecklistItem id="TF-4" code="TF-4" title="PIN errato">
  Simuli l'inserimento di un PIN errato con l'importo 

  `6.06`

   (codice 

  `55`

  ) e controlli il messaggio mostrato all'utente.
</ChecklistItem>

<ChecklistItem id="TF-5" code="TF-5" title="Tentativi PIN esauriti">
  Simuli il raggiungimento del limite di tentativi PIN con l'importo 

  `8.06`

   (codice 

  `75`

  ) e si assicuri che l'app lo tratti come un errore definitivo.
</ChecklistItem>

<ChecklistItem id="TF-6" code="TF-6" title="Transazione annullata">
  Avvii un pagamento e lo annulli dall'interfaccia dell'SDK (tasto Indietro o chiusura). Si assicuri che l'app torni correttamente alla schermata precedente.
</ChecklistItem>

<ChecklistItem id="TF-7" code="TF-7" title="Generazione della ricevuta">
  Verifichi che i dati della transazione (codice di autorizzazione, TID, data) vengano registrati correttamente e riportati sulle ricevute stampate o inviate via email.
</ChecklistItem>

### Interazioni con l'hardware [#hardware-interactions]

<ChecklistItem id="HI-1" code="HI-1" title="Lettura NFC">
  Esegua test con carte fisiche (Visa, Mastercard) e wallet digitali (Apple Pay, Google Pay).
</ChecklistItem>

<ChecklistItem id="HI-2" code="HI-2" title="Lettura interrotta">
  Allontani la carta subito dopo averla avvicinata, ma prima del “bip”. Si assicuri che l'SDK chieda di avvicinarla di nuovo oppure fallisca in modo controllato.
</ChecklistItem>

<ChecklistItem id="HI-3" code="HI-3" title="Perdita di connessione">
  Disattivi internet/Wi-Fi durante una transazione. Verifichi che l'app segnali un errore di connessione e non si blocchi.
</ChecklistItem>

## 2. Onboarding e configurazione [#2-onboarding--configuration]

### Configurazione dell'esercente [#merchant-setup]

<ChecklistItem id="MS-1" code="MS-1" title="Onboarding di un nuovo utente">
  Esegua l'intero flusso di onboarding con un account nuovo.
</ChecklistItem>

<ChecklistItem id="MS-2" code="MS-2" title="Controllo dello stato">
  Verifichi che 

  `Accept.merchant.onboardingStatus()`

   restituisca 

  `RequiresAction`

   per un esercente in attesa e 

  `ReadyForPayments`

   per un esercente approvato.
</ChecklistItem>

## 3. Sicurezza e conformità [#3-security--compliance]

### Integrità del dispositivo [#device-integrity]

<ChecklistItem id="DI-1" code="DI-1" title="Rilevamento del root">
  Se dispone di un dispositivo di test con root, verifichi che l'SDK si rifiuti di inizializzarsi.
</ChecklistItem>

<ChecklistItem id="DI-2" code="DI-2" title="Autorizzazioni">
  Revochi le autorizzazioni (fotocamera, posizione) e provi ad avviare l'SDK. Si assicuri che l'app chieda all'utente di concederle.
</ChecklistItem>

### Gestione dei dati [#data-handling]

<ChecklistItem id="DH-1" code="DH-1" title="Gestione dei token">
  Verifichi che il token dell'SDK ottenuto da 

  `POST /merchant/auth/login`

   venga recuperato dal Suo backend per ogni sessione e non sia mai scritto direttamente nel codice (hardcoded).
</ChecklistItem>

<ChecklistItem id="DH-2" code="DH-2" title="Nessun dato sensibile">
  Si assicuri che i log dell'app 

  **non**

   riportino numeri di carta completi né dati grezzi della traccia magnetica (track data).
</ChecklistItem>

## 4. Casi limite [#4-edge-cases]

<ChecklistItem id="EC-1" code="EC-1" title="App in background">
  Riduca a icona l'app durante una transazione e la ripristini. La transazione dovrebbe riprendere oppure fallire in modo sicuro.
</ChecklistItem>

<ChecklistItem id="EC-2" code="EC-2" title="Chiamata in arrivo">
  Chiami il dispositivo di test durante un pagamento. L'SDK dovrebbe gestire l'interruzione (di solito mettendo in pausa o facendo fallire la transazione).
</ChecklistItem>

<ChecklistItem id="EC-3" code="EC-3" title="Batteria scarica">
  Verifichi il comportamento quando il dispositivo è in modalità “Risparmio energetico” (le prestazioni di alcuni chip NFC peggiorano).
</ChecklistItem>

## 5. Sessioni con tag NFC (facoltative) [#5-nfc-tag-sessions-optional]

Solo se l'app legge o scrive tag NFC con [`com.tapaya:accept-nfc`](../integration/nfc_tags). Esegua questi controlli su un telefono e, se supporta i terminali Sunmi della serie P, anche su uno di questi con `accept-nfc-sunmi`.

<ChecklistItem id="NT-1" code="NT-1" title="Verifica del supporto">
  Verifichi che 

  `isSupported()`

   restituisca 

  `true`

   sul telefono e sul terminale Sunmi, e 

  `false`

   su un dispositivo senza NFC.
</ChecklistItem>

<ChecklistItem id="NT-2" code="NT-2" title="Lettura e scrittura">
  Avvicini un tag NTAG o Ultralight, controlli che la sessione riporti l'UID corretto, quindi esegua 

  `writePage`

   e rilegga la pagina con 

  `readPages`

  .
</ChecklistItem>

<ChecklistItem id="NT-3" code="NT-3" title="Chiave errata">
  Su MIFARE Classic, esegua l'autenticazione con una chiave errata e verifichi 

  `AUTH_FAILED`

  , poi la ripeta con la chiave corretta e verifichi che riesca.
</ChecklistItem>

<ChecklistItem id="NT-4" code="NT-4" title="Annullare l'attesa dell'avvicinamento">
  Annulli 

  `openSession()`

   mentre attende l'avvicinamento e apra subito una nuova sessione.
</ChecklistItem>

<ChecklistItem id="NT-5" code="NT-5" title="Il pagamento ha la precedenza">
  Avvii un pagamento durante una sessione. La sessione termina come 

  `PAYMENT`

   e il pagamento va a buon fine.
</ChecklistItem>

<ChecklistItem id="NT-6" code="NT-6" title="Tag rimosso">
  Rimuova il tag durante una sessione e verifichi che questa termini come 

  `CARD_REMOVED`

  .
</ChecklistItem>

<ChecklistItem id="NT-7" code="NT-7" title="NFC disattivato">
  Su un telefono, disattivi l'NFC e verifichi che 

  `openSession()`

   generi l'errore 

  `NFC_DISABLED`

  .
</ChecklistItem>

<ChecklistItem id="NT-8" code="NT-8" title="App in background">
  Su un telefono, porti l'app in background durante una sessione e verifichi che questa termini come 

  `ACTIVITY_PAUSED`

  .
</ChecklistItem>

## 6. Preparazione alla produzione [#6-production-readiness]

<ChecklistItem id="PR-1" code="PR-1" title="Cambio di ambiente">
  **CRITICO:**

   si assicuri che per la build di produzione sia impostato 

  `isProduction = true`

  .
</ChecklistItem>

<ChecklistItem id="PR-2" code="PR-2" title="Token di produzione">
  Verifichi che il backend punti agli endpoint di produzione della Tapaya API.
</ChecklistItem>

<ChecklistItem id="PR-3" code="PR-3" title="Controllo della versione">
  Si assicuri di utilizzare l'ultima versione stabile di Tapaya Accept SDK.
</ChecklistItem>

<ChecklistProgress />

<Callout title="Approvazione finale" type="tip">
  Esegua la checklist sulla release candidate finale, sui dispositivi su cui distribuirà l'app. Usi **Reset** per iniziare un nuovo ciclo da zero, perché le spunte dei cicli di test precedenti restano salvate in questo browser.
</Callout>
