Questa sezione della documentazione riporta delle informazioni molto tecniche, ma richieste dalla norma e per questo riportate.
I due archivi a cui si fa riferimento in oggetto sono la tabella dell'anagrafe (t_anagrafe) e la tabella delle prestazioni (t_prestazioni). Il legame tra i campi della tabella e gli attributi obbligatori previsti dall'Ufficio Italiano Cambi sono rappresentati mediante dei commenti al fine riga. Ad esempio, il campo t_anagrafe.tipo_operatore corrisponde all'attributo D01.
Per la versione per operatori non finanziari le due tabelle sono definite dal seguente frammento sql:
--------------------------------------------------------------------------------
-- table t_anagrafe
--------------------------------------------------------------------------------
create table t_anagrafe (
-- Identificativo informazione
tipo_operatore text(2) not null -- D01
references t_codici_soggetti(codice),
tipo_identificazione text(2) not null -- D03
constraint fk_anagrafe_1 references t_codici_identificazione(id_codice),
codice_cliente text(6) not null, -- D09
data_identificazione text(8) not null, -- D10
-- Complete generalita'
persona_giuridica integer(1) not null, -- boolean
soggetto_residente int(1) not null, -- boolean
nome_ragione_sociale text(70) -- D11
not null
check (length(nome_ragione_sociale)>0),
paese_estero_residenza text(30) -- D13
constraint ck_paese_estero_residenza
check ((soggetto_residente=1 and paese_estero_residenza is null) or
(soggetto_residente=0 and paese_estero_residenza is not null)),
comune_residenza text(30) -- D14.B
not null
check (length(comune_residenza)>0),
provincia_residenza text(15), -- D14.C
indirizzo_domicilio_sede text(35) -- D15
not null
check (length(indirizzo_domicilio_sede)>0),
cap_domicilio_sede text(5), -- D16
codice_fiscale text(16), -- D17
data_nascita_pf text(8) -- D18
constraint ck_data_nascita_pf
check ((persona_giuridica=0 and data_nascita_pf is not null) or
(persona_giuridica=1 and data_nascita_pf is null)),
comune_nascita_pf text(30) -- D19
constraint ck_comune_nascita_pf
check ((persona_giuridica=0 and comune_nascita_pf is not null) or
(persona_giuridica=1 and comune_nascita_pf is null)),
-- Estremi del documento di identificazione
tipo_documento_presentato text(2) -- D41
references t_tipi_documento_identificazione(id_codice),
numero_documento_presentato text(15), -- D42
data_rilascio text(8), -- D43
autorita_localita_rilascio text(30), -- D44
sesso text(1) -- D45
references t_sessi(id_codice),
-- Stato anagrafica
codice_stato text(1) -- D54.A
references t_stati_anagrafica(id_codice)
not null
check (length(codice_stato)=1),
data_rettifica text(8) -- D55.B
constraint ck_data_rettifica
check ((codice_stato='0' and data_rettifica is null) or
(codice_stato in ('1', '2', '3') and data_rettifica is not null)),
-- Extra
note text,
-- Extra constraints
primary key (codice_cliente, codice_stato, data_rettifica),
check ((persona_giuridica=1 and
tipo_documento_presentato is null and
numero_documento_presentato is null and
data_rilascio is null and
autorita_localita_rilascio is null and
sesso is null) or
(persona_giuridica=0 and
tipo_documento_presentato is not null and
numero_documento_presentato is not null and
data_rilascio is not null and
autorita_localita_rilascio is not null and
sesso is not null))
);
--------------------------------------------------------------------------------
-- table t_prestazioni
--------------------------------------------------------------------------------
create table t_prestazioni (
id integer primary key autoincrement,
-- Identificativo informazione
tipo_operatore text(2) not null -- A01.A
references t_codici_soggetti(codice),
identificativo_registrazione integer(7), -- A03
-- Caratteristiche della prestazione professionale
data_incarico text(8) not null, -- A21
tipo_registrazione text(1) not null -- A22
references t_tipi_registrazione(id_codice),
causale text(4) not null -- A26
references t_causali(codice),
frazionata text(1) not null
check (frazionata in ('0', '1')),
multipla text(1) not null
check (multipla in ('0', '1')),
connessa text(1) not null
check (connessa in ('0', '1')),
-- Dati sui soggetti coinvolti
codice_cliente text(6) not null -- D09A.1
references t_anagrafe(codice_cliente),
codice_soggetto_per_conto text(6) -- D09B.1
references t_anagrafe(codice_cliente), -- soggetto per conto del quale il cliente agisce
codice_controparte text(6) -- D09C.1
references t_anagrafe(codice_cliente), -- soggetto per conto del quale il cliente agisce
-- Dati sulla registrazione
data_registrazione text(8) not null, -- A51
stato_registrazione text(1) not null -- A54.A
references t_stati_prestazione(id_codice),
data_rettifica text(8) -- A54.B
check ((stato_registrazione='0' and data_rettifica is null) or
(stato_registrazione<>'0' and data_rettifica is not null)),
-- Dati sull'importo
divisa text(3) not null -- B12
references t_divise(swift),
importo_euro real(15, 2) not null, -- B14
contanti_euro real(15, 2), -- B15
tipo_mezzo_pagamento text(30), -- B16
tipo_bene text(30), -- B17
-- Extra
note text
-- Constraints
);
Per la versione per professionisti le due tabelle sono definite dal seguente frammento sql:
--------------------------------------------------------------------------------
-- table t_anagrafe
--------------------------------------------------------------------------------
create table t_anagrafe (
-- Identificativo informazione
codice_studio_professionale text(11) -- D01
references t_professionisti(codice_studio_professionale),
codice_identificatore text(5) -- D02
references t_incaricati(codice_registratore),
tipo_identificazione text(2) not null -- D03
constraint fk_anagrafe_1 references t_codici_identificazione(id_codice),
codice_cliente text(6) not null, -- D09
data_identificazione text(8) not null, -- D10
-- Complete generalita'
persona_giuridica integer(1) not null, -- boolean
soggetto_residente int(1) not null, -- boolean
nome_ragione_sociale text(70) -- D11
not null
check (length(nome_ragione_sociale)>0),
attivita_svolta text(50) -- D12
not null
check (length(attivita_svolta)>0),
paese_estero_residenza text(30) -- D13
constraint ck_paese_estero_residenza
check ((soggetto_residente=1 and paese_estero_residenza is null) or
(soggetto_residente=0 and paese_estero_residenza is not null)),
comune_residenza text(30) -- D14.B
not null
check (length(comune_residenza)>0),
provincia_residenza text(15), -- D14.C
indirizzo_domicilio_sede text(35) -- D15
not null
check (length(indirizzo_domicilio_sede)>0),
cap_domicilio_sede text(5), -- D16
codice_fiscale text(16), -- D17
data_nascita_pf text(8) -- D18
constraint ck_data_nascita_pf
check ((persona_giuridica=0 and data_nascita_pf is not null) or
(persona_giuridica=1 and data_nascita_pf is null)),
comune_nascita_pf text(30) -- D19
constraint ck_comune_nascita_pf
check ((persona_giuridica=0 and comune_nascita_pf is not null) or
(persona_giuridica=1 and comune_nascita_pf is null)),
-- Estremi del documento di identificazione
tipo_documento_presentato text(2) -- D41
references t_tipi_documento_identificazione(id_codice),
numero_documento_presentato text(15), -- D42
data_rilascio text(8), -- D43
autorita_localita_rilascio text(30), -- D44
sesso text(1) -- D45
references t_sessi(id_codice),
-- Stato anagrafica
codice_stato text(1) -- D54.A
references t_stati_anagrafica(id_codice)
not null
check (length(codice_stato)=1),
data_rettifica text(8) -- D55.B
constraint ck_data_rettifica
check ((codice_stato='0' and data_rettifica is null) or
(codice_stato in ('1', '2', '3') and data_rettifica is not null)),
-- Extra
note text,
-- Extra constraints
primary key (codice_cliente, codice_stato, data_rettifica),
check ((persona_giuridica=1 and
tipo_documento_presentato is null and
numero_documento_presentato is null and
data_rilascio is null and
autorita_localita_rilascio is null and
sesso is null) or
(persona_giuridica=0 and
tipo_documento_presentato is not null and
numero_documento_presentato is not null and
data_rilascio is not null and
autorita_localita_rilascio is not null and
sesso is not null))
);
--------------------------------------------------------------------------------
-- table t_prestazioni
--------------------------------------------------------------------------------
create table t_prestazioni (
id integer primary key autoincrement,
-- Identificativo informazione
codice_studio_professionale text(11) -- A01
references t_professionisti(codice_studio_professionale),
codice_registratore text(5) -- A02
references t_incaricati(codice_registratore),
identificativo_registrazione integer(7), -- A03
-- Caratteristiche della prestazione professionale
tipo_registrazione text(1) not null -- A22
references t_tipi_registrazione(id_codice),
prestazione_fornita text(50) not null, -- A26
frazionata text(1) not null
check (frazionata in ('0', '1')),
multipla text(1) not null
check (multipla in ('0', '1')),
-- Dati sui soggetti coinvolti
codice_cliente text(6) not null -- D09A.1
references t_anagrafe(codice_cliente),
codice_soggetto_per_conto text(6) -- D09A.2
references t_anagrafe(codice_cliente), -- soggetto per conto del quale il cliente agisce
tipo_legame text(2)
references t_tipi_legami(codice)
check ((codice_soggetto_per_conto is NULL and tipo_legame is NULL) or
(codice_soggetto_per_conto is not NULL and tipo_legame is not NULL)),
-- Dati sulla registrazione
data_registrazione text(8) not null, -- A51
stato_registrazione text(1) not null -- A54.A
references t_stati_prestazione(id_codice),
data_rettifica text(8) -- A54.B
check ((stato_registrazione='0' and data_rettifica is null) or
(stato_registrazione<>'0' and data_rettifica is not null)),
-- Dati sull'importo
divisa text(3)
references t_divise(swift),
importo_euro real(15, 2),
-- Extra
note text
-- Constraints
check ((divisa is null and importo_euro is null) or
(divisa is not null and importo_euro is not null))
);