# NAME
CBI::Wrapper - Handle the Italian CBI fixed length file format.
# VERSION
version 0.01
# SYNOPSIS
Allow the handling of the Italian CBI fixed length
file format.
Core based on [https://github.com/eLBati/CBI](https://github.com/eLBati/CBI).
This code is designed mainly to help writing "Ricevute bancarie (Ri.ba)"
data to files.
A typical usage is:
use CBI::Wrapper;
my $header = { ... };
my $disposals = [{ ... }];
my $cbi = new CBI::Wrapper(header => $header, disposals => $disposals);
$cbi->create('RICEVUTE_BANCARIE');
$cbi->print('./outfile.cbi');
# DESCRIPTION
`CBI::Wrapper` is a Perl module that allow the handling of the Italian CBI
fixed length file format, mainly to write
"Ricevute bancarie (Ri.ba)" data to files.
Features include:
- Creation of a flow from header and disposals data.
- Write the desired data on cbi file.
- Load a cbi file.
**Note:** For now only the Ri.ba format is supported.
# LINKS
- [Original Python code](https://github.com/eLBati/CBI)
- [Interbank Corporate Banking](https://www.cbi-org.eu/)
# CONSTRUCTOR AND STARTUP
## new()
Creates and returns a new CBI::Wrapper object.
If the constructor is called without params, the content of header
and disposals won't be defined and you won't be able to create a flow.
You can:
- Pass params to the constructor:
my $cbi = new CBI::Wrapper ({header => $header, disposals => $disposals});
- Pass header and disposals as params to ["create\_RIBA()"](#create_riba)
- Use the setters ["set\_header({...})"](#set_header) and ["set\_disposals(\[{...}\])"](#set_disposals)
# SETTERS AND GETTERS
## set\_header($header)
Load the header passed as param.
This param is an hashref like this:
my $header = {
mittente => '*****', # SIA code sender
ricevente => substr(IBAN_CREDITOR, 5, 5), # ABI code creditor
data_creazione => 'YYYY-MM-DD', # Creation date
nome_supporto => '*****', # Unique value
campo_a_disposizione => '', # Can be empty
# market place keys
tipo_flusso => '', #
qualificatore_flusso => '', #
soggetto_veicolatore => '', # ABI code Gateway bank
codice_divisa => 'E', # currency E = euro
};
## get\_header()
Return the current header hashref.
## set\_disposals($disposals)
Load the disposals passed as param.
This param is an arrayref containing the disposals
to insert in the flow.
This hashref is like this:
my $disposal = {
# Record 14
data => 'YYYY-MM-DD', # due date
importo => EEEE.CC, # amount in Euro with two decimal numbers
cod_abi_banca_assuntrice => substr(IBAN_CREDITOR, 5, 5),
cab_banca_assuntrice => substr(IBAN_CREDITOR, 10, 5),
conto => substr(IBAN_CREDITOR, 15, 12),
cod_abi_banca_domiciliataria => substr(IBAN_DEBTOR, 5, 5),
cab_banca_domiciliataria => substr(IBAN_DEBTOR, 10, 5),
cod_azienda => '*****', # Same as 'mittente' in header.
cod_cliente_debitore => '', # Debtor code private to the creditor (optional)
flag_tipo_debitore => '', # 'B' if the debtor is a bank.
#Record 20
rag_soc_creditore => '*****', # Creditor company name
indirizzo_creditore => '*****', # Creditor address
cap_citta_creditore => '*****', # Creditor ZIP code and city
rif_creditore => '*****', # Creditor other data
#30
nome_debitore => '*****', # Debtor name or company name
CF_debitore => '*****', # Debtor CF/PI
#40
indirizzo_debitore => '*****', # Debtor address
cap_debitore => '*****', # Debtor ZIP code
comune_sigla_pv_debitore => '*****', # Debtor city and province abbreviation
compl_indirizzo => '',
#50
descrizione => '*****', # Disposal description
PIVA_creditore => '*****', # Creditor PI
#51
numero_ricevuta => $i++, # Disposal number in flow
denom_creditore => substr($info_creditore->{ragione_sociale},0,20), # Creditor company name
provincia_bollo => '',
num_autorizzazione => '',
data_autorizzazione => '',
#70
indicatori_di_circuito => '', # circuit markers
indicatore_richiesta_incasso => '114', # document type + flag outcome notification + flag print nofication
chiavi_di_controllo => '', # control keys
};
## get\_disposals()
Return the current disposals arrayref.
## set\_flow\_CBI($CBI\_flow)
Set the current CBI::Wrapper::Flow object.
## get\_flow\_CBI()
Get the current CBI::Wrapper::Flow object.
## append\_disposal($disposal)
Append the [disposal hashref](#disposal_hashref) passed as param to the current
disposals.
# FLOW CREATION
## create\_flow()
Create a new flow from the current header and disposals.
If the current header or disposals are undefined, return 0.
You can set a new current header and disposals calling this
method with params like this:
$cbi->create_flow({header => $header,
disposals => $disposals,
flow_type => $flow_type
});
# PRINTING AND LOADING FILES
## print($filename)
Prints the current CBI::Wrapper::Flow object to a file
with the filename passed as param.
The current CBI::Wrapper::Flow object is defined when
- ["create\_flow()"](#create_flow) is called;
- a CBI::Wrapper::Flow is passed with ["set\_flow\_CBI($CBI\_flow)"](#set_flow_cbi-cbi_flow);
- a file is [loaded](#load-filename).
## load($filename)
Load a file with the filename passed as param.
This will set a new current CBI::Wrapper::Flow object
with the file content.
This will **NOT** set the current header and disposals.
# OTHER CBI FLOWS
You can configure other flows (es. MAV) editing CBI::Wrapper/RecordMapping.pm
In that file every disposal config is like this:
my $IB = [
{from => 1, to => 1, name => 'filler1', type => 'an', truncate => 'no'},
];
where
- from is the starting column
- to is the ending column
- type is the field data type (n = numeric, an = string)
- truncate denotes if the string content will be truncated automatically (if length > field length)
or if an error will be thrown.
# ONLINE RESOURCES
- Official documentation [https://www.cbi-org.eu/My-Menu/Servizio-CBI-Documentazione/Servizio-CBI-Documentazione-Standard](https://www.cbi-org.eu/My-Menu/Servizio-CBI-Documentazione/Servizio-CBI-Documentazione-Standard)
(Registration required)
# ACKNOWLEDGEMENTS
Lorenzo Battistini - Author of the Python module from which this code is derived.
# AUTHOR
Samuele Bonino <samuele.bonino at resbinaria.com>
# COPYRIGHT AND LICENSE
Copyright (C) 2022 Res Binaria Di Paolo Capaldo ()
Original python code:
Copyright (C) 2012 Agile Business Group sagl ()
Copyright (C) 2012 Domsense srl ()
Copyright (C) 2012 Associazione OpenERP Italia
All Rights Reserved
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see .