Attività di marketing locale: campagne, analisi e geotargeting

Mantenere anagrafiche coerenti e complete è essenziale per fatture, note di credito e registri contabili.
Con il lookup dei CAP → Comune/Provincia/Regione puoi autocompilare i campi,
validare gli indirizzi e bonificare i dati esistenti, riducendo errori e tempi di back-office.

1) Obiettivi e benefici

  • Coerenza anagrafica: CAP allinea automaticamente Comune, Provincia e Regione.
  • Riduzione errori in fatture/registrazioni (meno note di credito per dati errati).
  • Velocità di inserimento in anagrafiche clienti/fornitori e documenti contabili.
  • Report affidabili: aggregazioni per Regione/Provincia senza correzioni manuali.
  • Compliance: indirizzi coerenti favoriscono processi di fatturazione elettronica e scambio dati.

2) Modello dati & mapping campi

Campi consigliati per Italia: cap, comune, provincia, regione. Opzionali utili: lat, lon, zona_logistica, macro_area.

cap,comune,provincia,regione,lat,lon,zona_logistica
20121,MILANO,MI,LOMBARDIA,45.4669,9.1900,STD
80138,NAPOLI,NA,CAMPANIA,40.8518,14.2681,STD
07024,LA MADDALENA,SS,SARDEGNA,41.2100,9.4086,ISOLE

Mapping tipico (tabella clienti/fornitori)

  • clienti.cap → PK di lookup su cap_it.cap
  • clienti.comunecap_it.comune
  • clienti.provinciacap_it.provincia
  • clienti.regionecap_it.regione

Nota: Se il tuo ERP richiede il codice catastale del Comune, prevedi un campo aggiuntivo (associazione CAP↔Comune↔codice catastale).

3) Architettura (ERP/gestionale ↔ servizio CAP)

  1. Dataset CAP nel DB del gestionale oppure endpoint REST ad alte prestazioni (<100ms).
  2. Hook UI su maschere anagrafiche e documenti: onBlur CAP → autofill campi geo.
  3. Validazione server-side all’atto di salvataggio (coerenza CAP↔Comune).
  4. Job notturno per bonifica/aggiornamento differenziale (nuovi CAP, deprecati, correzioni).

4) Implementazione passo-passo

  1. Import tabelle CAP (CSV/SQL/JSON) e crea indice/PK su cap.
  2. Autofill: collega l’evento del campo CAP nelle anagrafiche → compila Comune/Provincia/Regione.
  3. Regole: blocca CAP non numerici; avvisa su mismatch; gestisci CAP deprecati con suggerimento.
  4. Report di coerenza: elenca record incoerenti e consenti correzione massiva in 1 click.

5) Bonifica massiva e prevenzione errori

  • Bonifica one-shot: allinea tutti i clienti/fornitori a partire dal CAP.
  • Trigger/constraint: impedisci salvataggi incoerenti (CAP 5 cifre, Comune atteso).
  • Dedup: unisci anagrafiche duplicate (chiave: P.IVA/C.F. + CAP + via).
  • Standardizzazione: uppercase, rimozione accenti, toponimi uniformi.

6) Validazioni tecniche & regole di coerenza

  • CAP IT: regex ^\\d{5}$ (cinque cifre).
  • Coerenza: UPPER(comune_digitato) = UPPER(comune_ref) da tabella cap_it.
  • Gestione CAP deprecati: tabella mapping CAP_vecchio → CAP_nuovo + messaggio guida.
  • Server-side recheck su documenti (fattura, DDT) prima dell’emissione definitiva.

7) Workflow tipici (fatture, note, ordini, DDT)

  • Fattura vendita: pre-compila intestazione con dati coerenti; riduce errori di recapito.
  • Nota di credito: evita rigenerazioni dovute a indirizzi errati.
  • Ordini fornitore: anagrafiche fornitore coerenti = consegne più puntuali e registrazioni pulite.
  • DDT: distinzione fra indirizzo di spedizione e di fatturazione (entrambi validati).

8) Multi-sede, multi-azienda e spedizioni/billing

  • Multi-sede: archivia N indirizzi per cliente (sede legale, operativa, magazzino) tutti validati via CAP.
  • Multi-azienda: condividi la dimensione “territorio” fra società, con versioning del dataset.
  • Spedizioni vs Billing: convalida entrambi; consenti override motivato (es. PO box, zone speciali).

9) KPI & dashboard contabili

  • % anagrafiche complete (Comune/Provincia/Regione valorizzati).
  • % mismatch CAP–Comune (prima/dopo bonifica).
  • Tempo medio inserimento anagrafica/documento.
  • # note di credito per errore indirizzo (trend mensile).

10) QA, test e change management

  • Test unitari su CAP campione per ogni Regione.
  • Regression test ad ogni aggiornamento dataset (diff sulle righe cambiate).
  • Formazione al back-office su procedure di correzione e override controllati.

11) Privacy/GDPR e sicurezza

  • Minimizzazione: restituisci solo campi necessari (comune, provincia, regione).
  • Sicurezza: rate-limit su endpoint lookup, sanitizzazione input, auditing accessi.
  • Log degli errori di validazione per migliorare i processi (senza dati personali superflui).

12) Esempi pratici (Excel/SQL/JS/PHP)

Excel — autocompilazione Comune/Provincia da CAP

=LET(cap; B2; XLOOKUP(cap; TabCAP[cap]; TabCAP[comune]; "CAP non trovato"))
=LET(cap; B2; XLOOKUP(cap; TabCAP[cap]; TabCAP[provincia]; "CAP non trovato"))

SQL — bonifica massiva anagrafiche clienti

UPDATE clienti c
JOIN cap_it t ON c.cap = t.cap
SET c.comune = UPPER(t.comune),
    c.provincia = UPPER(t.provincia),
    c.regione = UPPER(t.regione)
WHERE c.regione IS NULL OR c.provincia IS NULL OR c.comune IS NULL
   OR UPPER(c.comune) <> UPPER(t.comune);

SQL — blocco salvataggio incoerente (CHECK/trigger)

-- MySQL 8+ (CHECK attivi) oppure usa TRIGGER BEFORE INSERT/UPDATE
ALTER TABLE clienti
ADD CONSTRAINT chk_cap_len CHECK (char_length(cap)=5 AND cap REGEXP '^[0-9]{5}$');

SQL — report mismatch CAP–Comune

SELECT c.id, c.cap, c.comune AS comune_digitato, t.comune AS comune_atteso
FROM clienti c
JOIN cap_it t ON c.cap = t.cap
WHERE UPPER(c.comune) <> UPPER(t.comune)
ORDER BY c.id;

JavaScript — autofill in maschera anagrafica (mock + debounce)

<form id="frm-cli">
  <input id="cap" name="cap" maxlength="5" placeholder="CAP" />
  <input id="comune" name="comune" placeholder="Comune" />
  <input id="provincia" name="provincia" placeholder="Provincia" />
  <input id="regione" name="regione" placeholder="Regione" />
  <div id="msg" role="status" aria-live="polite"></div>
</form>
<script>
let t; const $=s=>document.querySelector(s);
$("#cap").addEventListener("input", ()=>{
  clearTimeout(t); t=setTimeout(()=>{
    const v=$("#cap").value.trim();
    if(/^[0-9]{5}$/.test(v)){
      fetch(`/api/cap/lookup?cap=${v}`).then(r=>r.json()).then(d=>{
        if(d && d.comune){
          $("#comune").value=d.comune; $("#provincia").value=d.provincia; $("#regione").value=d.regione;
          $("#msg").textContent=`${v}: ${d.comune} (${d.provincia})`;
        } else { $("#msg").textContent="CAP non trovato"; }
      }).catch(()=> $("#msg").textContent="Errore rete");
    } else { $("#msg").textContent="Inserisci 5 cifre"; }
  },200);
});
</script>

WordPress/WooCommerce — validazione indirizzo di fatturazione

<?php
// Endpoint REST (semplificato)
add_action('rest_api_init', function(){
  register_rest_route('cap/v1', '/lookup', [
    'methods' => 'GET',
    'callback' => function($req){
      $cap = preg_replace('/[^0-9]/','', $req->get_param('cap'));
      if(strlen($cap)!==5){ return new WP_Error('bad_request','CAP non valido',['status'=>400]); }
      global $wpdb;
      $row = $wpdb->get_row($wpdb->prepare("SELECT comune,provincia,regione FROM {$wpdb->prefix}cap_it WHERE cap=%s",$cap));
      return $row ?: new WP_Error('not_found','CAP non trovato',['status'=>404]);
    }
  ]);
});

// Check server-side al checkout (billing)
add_action('woocommerce_after_checkout_validation', function($data, $errors){
  $cap = preg_replace('/[^0-9]/','', $data['billing_postcode'] ?? '');
  $city = strtoupper(trim($data['billing_city'] ?? ''));
  if($cap && $city){
    global $wpdb;
    $ref = $wpdb->get_var($wpdb->prepare("SELECT UPPER(comune) FROM {$wpdb->prefix}cap_it WHERE cap=%s", $cap));
    if($ref && $ref !== $city){
      $errors->add('validation', 'Il Comune di fatturazione non corrisponde al CAP inserito.');
    }
  }
}, 10, 2);
?>

FAQ & troubleshooting

CAP non trovato: verifica il formato (5 cifre) e l’aggiornamento del dataset; offri selezione manuale guidata.

Comune diverso dal CAP: mostra il Comune atteso e consenti correzione; registra l’evento per bonifica.

Dataset aggiornato: usa pacchetti delta (nuovi/variati/deprecati) e conserva uno storico versioni.

← Torna alle Applicazioni d’uso