CUP Mock — Guida Tecnica

Torna alla UI
Guida Tecnica API Guida Tecnica Viste

Guida Tecnica API

Indice rapido API
Base URL: https://cupmock.ccup.it/api
Content-Type: application/json
Auth: se configurata, header X-API-Key: <key>
Timezone: Europe/Rome (datetime in formato YYYY-MM-DD HH:MM:SS)

Regole generali

  • Tutti gli endpoint REST sono POST e restituiscono JSON.
  • Le risposte di errore seguono il formato: {"ok": false, "error": "codice_errore"}.
  • request_id è consigliato per tracciamento e idempotenza lato cliente.
  • ids_slot è un array di interi (ID slot presenti in vista_agende_slot_disponibili).
  • Se il gestionale non gestisce id_slot, potete usare slots con codice_agenda + datetime_start_slot.
  • Ricette elettroniche: non esiste alcuna vista DB. Il cliente interroga un servizio esterno (SSN) e restituisce i dati via REST.

Workflow consigliato

  1. Leggere disponibilità da vista_agende_slot_disponibili.
  2. Bloccare slot selezionati con /v1/bookings/blocca.
  3. Inserire prenotazione con /v1/bookings/insert.
  4. Se l’utente annulla prima del commit, liberare con /v1/bookings/libera.

Errori standard

CodiceSignificato
missing_paramsParametri richiesti mancanti.
missing_idsArray ids_slot mancante.
invalid_idsArray ids_slot non valido o vuoto.
not_foundRecord non trovato.
booking_existsCodice prenotazione già presente.
missing_request_idrequest_id mancante.
table_missingTabella sorgente non presente nel DB.
unauthorizedAPI key non valida.

Ricette elettroniche

POST /v1/ricette_elettroniche

Recupera i dati utente e la prestazione associata ad una NRE (ricetta elettronica).

Nota: questa informazione non proviene da viste DB. Il cliente interroga il servizio SSN e risponde via REST. Nel mock i dati arrivano dalla tabella ricette_elettroniche (pagina Admin).

Request
{
  "codice_fiscale": "RSSMRA80A01H501Z",
  "codice_ricetta": "1900A1234567890"
}
Response
{
  "ok": true,
  "codice_ricetta_15_cifre": "1900A1234567890",
  "codice_fiscale": "RSSMRA80A01H501Z",
  "nome": "Mario",
  "cognome": "Rossi",
  "tel1": "3357378145",
  "tel2": "",
  "tel3": "",
  "prestazioni": [
    {
      "codice_prestazione": "88.93.B",
      "data_emissione": "2026-03-05 00:00:00",
      "gg_validita": 30
    }
  ]
}
Errori: missing_params, not_found, table_missing, unauthorized
Esempio cURL (simula la chiamata di TheWoice verso il vostro endpoint)
curl -X POST https://cupmock.ccup.it/api/v1/ricette_elettroniche \
  -H "Content-Type: application/json" \
  -H "X-API-Key: <key>" \
  -d '{"codice_fiscale":"RSSMRA80A01H501Z","codice_ricetta":"1900A1234567890"}'

Blocca slot

POST /v1/bookings/blocca

Riserva uno o più slot (es. pre‑prenotazione). Gli slot diventano temporaneamente non disponibili.

{
  "request_id": "uuid",
  "ids_slot": [1001, 1002]
}
Alternativa se non avete id_slot:
{
  "request_id": "uuid",
  "slots": [
    {"codice_agenda": "AGENDA_01", "datetime_start_slot": "2026-03-07 09:00:00"}
  ]
}
Errori: missing_ids, invalid_ids, unauthorized
Esempio cURL (simula la chiamata di TheWoice verso il vostro endpoint)
curl -X POST https://cupmock.ccup.it/api/v1/bookings/blocca \
  -H "Content-Type: application/json" \
  -H "X-API-Key: <key>" \
  -d '{"request_id":"uuid","ids_slot":[1001,1002]}'

Libera slot

POST /v1/bookings/libera

Rilascia slot precedentemente bloccati.

{
  "request_id": "uuid",
  "ids_slot": [1001, 1002]
}
Alternativa se non avete id_slot:
{
  "request_id": "uuid",
  "slots": [
    {"codice_agenda": "AGENDA_01", "datetime_start_slot": "2026-03-07 09:00:00"}
  ]
}
Errori: missing_ids, invalid_ids, unauthorized
Esempio cURL (simula la chiamata di TheWoice verso il vostro endpoint)
curl -X POST https://cupmock.ccup.it/api/v1/bookings/libera \
  -H "Content-Type: application/json" \
  -H "X-API-Key: <key>" \
  -d '{"request_id":"uuid","ids_slot":[1001,1002]}'

Insert prenotazione

POST /v1/bookings/insert

Crea una prenotazione, legandola ad agenda, prestazione e slot selezionati.

{
  "request_id": "uuid",
  "booking_code": "ABC123456",
  "codice_agenda": "AGENDA_01",
  "codice_prestazione": "PREST_001",
  "NRE": "1900A4833547605",
  "codice_fiscale": "RSSMRA80A01H501Z",
  "channel": "voice",
  "ids_slot": [1001]
}
Alternativa se non avete id_slot:
{
  "request_id": "uuid",
  "booking_code": "ABC123456",
  "codice_agenda": "AGENDA_01",
  "codice_prestazione": "PREST_001",
  "NRE": "1900A4833547605",
  "codice_fiscale": "RSSMRA80A01H501Z",
  "channel": "voice",
  "slots": [
    {"codice_agenda": "AGENDA_01", "datetime_start_slot": "2026-03-07 09:00:00"}
  ]
}
Errori: missing_params, booking_exists, unauthorized
Esempio cURL (simula la chiamata di TheWoice verso il vostro endpoint)
curl -X POST https://cupmock.ccup.it/api/v1/bookings/insert \
  -H "Content-Type: application/json" \
  -H "X-API-Key: <key>" \
  -d '{"request_id":"uuid","booking_code":"ABC123456","codice_agenda":"AGENDA_01","codice_prestazione":"PREST_001","NRE":"1900A4833547605","codice_fiscale":"RSSMRA80A01H501Z","channel":"voice","ids_slot":[1001]}'

Disdetta prenotazione

POST /v1/bookings/{booking_code}/cancel

Annulla una prenotazione esistente.

{
  "request_id": "uuid",
  "requested_at": "2026-03-07 11:00:00"
}
Errori: missing_request_id, unauthorized
Esempio cURL (simula la chiamata di TheWoice verso il vostro endpoint)
curl -X POST https://cupmock.ccup.it/api/v1/bookings/ABC123456/cancel \
  -H "Content-Type: application/json" \
  -H "X-API-Key: <key>" \
  -d '{"request_id":"uuid","requested_at":"2026-03-07 11:00:00"}'

Guida Tecnica Viste

Indice rapido viste

Panoramica

Le viste DB vengono lette in sola lettura per catalogo, agende e disponibilità. Le ricette elettroniche NON sono esposte come vista DB.
Campi Obbl. = necessari per il funzionamento. I campi non obbligatori sono facoltativi ma, se presenti, migliorano l’esperienza utente.
Linee guida rapide
  • Chiavi univoche: vista_prestazioni.codice, vista_agende.codice, vista_prenotazioni.booking_code, vista_agende_slot_disponibili.id_slot.
  • Relazioni: vista_agende_prestazioni_map deve riferire codici esistenti in prestazioni/agende.
  • Timezone: Europe/Rome per tutti i datetime.
  • Aggiornamento consigliato: slot e prenotazioni il più vicino possibile al realtime.
Allineamento/configurazione iniziale: vista_prestazioni, vista_agende, vista_agende_prestazioni_map.
Interrogazioni dinamiche: vista_agende_slot_disponibili.
Recall (opzionale): vista_prenotazioni letta dal demone notturno per schedulare comunicazioni.
Vista opzionale: vista_prenotazioni è necessaria solo se il cliente abilita la feature Recall / Motore di Scheduling. In quel caso un nostro demone notturno legge la vista e importa le prenotazioni nel nostro DB per pianificare le comunicazioni. Se la feature non è attiva, la vista non è richiesta.

vista_prestazioni

Allineamento iniziale
Catalogo prestazioni disponibili.
CampoTipoObbl.Note
codicevarchar 255Identificativo univoco della prestazione.
nometextDescrizione/nome leggibile.
durataintNominuti, multipli di 5, default 15
waitlisttinyintNoindica se è una prestazione per la quale non è richiesta una prenotazione
ma semplicemente un numero di turno di attesa quotidiana - default false
limit_timeintNoindicare fino a quanti minuti prima della data dell’appuntamento è consentità la disdetta, default 0.
Regole consigliate: durata > 0, waitlist in {0,1}, limit_time >= 0.

vista_agende

Allineamento iniziale
Anagrafica agende disponibili.
CampoTipoObbl.Note
codicevarchar 255Identificativo univoco agenda (codice_agenda).
nomevarchar 255Nome o descrizione agenda.
luogotextIndirizzo/luogo erogazione.
Regole consigliate: codice univoco, luogo valorizzato.

vista_agende_prestazioni_map

Allineamento iniziale
Mappa molte-a-molte tra agende e prestazioni.
CampoTipoObbl.Note
codice_agendavarchar 255Deve esistere in vista_agende.
codice_prestazionevarchar 255Deve esistere in vista_prestazioni.
Regole consigliate: coppia agenda-prestazione univoca (no duplicati).

vista_agende_slot_disponibili

Dinamica
Disponibilità degli slot (dinamica).
CampoTipoObbl.Note
id_slotintNoSe gestito dal sw del cliente, rappresenta l'identificativo univoco slot (usato in ids_slot).
datetime_start_slotdatetimeInizio slot (Europe/Rome). Minuti da 0 per multipli di 5
codice_agendavarchar 255Riferimento agenda.
Regole consigliate: datetime_start_slot su multipli di 5 minuti. Se non gestite id_slot, la chiave logica è codice_agenda + datetime_start_slot.

vista_prenotazioni

Recall opzionale
Elenco prenotazioni (dinamiche).
CampoTipoObbl.Note
booking_codevarcharCodice univoco prenotazione.
codice_agendavarcharAgenda associata.
codice_prestazionevarcharPrestazione associata.
datetime_startdatetimeData/ora inizio prenotazione.
statusvarcharValori attesi: active | confirmed | cancelled | pending.
cancelled_atdatetimeNoValorizzato solo se status=cancelled.
confirmed_atdatetimeNoValorizzato solo se status=confirmed.
nomevarcharNoConsigliato se disponibile.
cognomevarcharNoConsigliato se disponibile.
telefonovarcharNoConsigliato se disponibile.
emailvarcharNoOpzionale.
codice_fiscalevarcharIdentificativo utente.
created_atdatetimeTimestamp creazione prenotazione.
Regole consigliate: se status=cancelled allora cancelled_at valorizzato; se status=confirmed allora confirmed_at valorizzato.