The financial investment by quotas or investment funds has some important characteristics so that the income on the investments made can be calculated.
The majority of existing funds present daily liquidity, but IOF is levied on redemptions effected up to the 29th consecutive day as of the date of each investment:
Number of days |
Income Limit % |
1 |
96 |
2 |
93 |
3 |
90 |
4 |
86 |
5 |
83 |
6 |
80 |
7 |
76 |
8 |
73 |
9 |
70 |
10 |
66 |
11 |
63 |
12 |
60 |
13 |
56 |
14 |
53 |
15 |
50 |
16 |
46 |
17 |
53 |
18 |
40 |
19 |
36 |
20 |
33 |
21 |
30 |
22 |
26 |
23 |
23 |
24 |
20 |
25 |
16 |
26 |
13 |
27 |
10 |
28 |
6 |
29 |
3 |
30 |
0 |
As of the 30th day, each investment is exempted from IOF.
Investment fund income
To calculate the income, know the number of quotas into which the capital invested was transformed, that is, how many quotas comprise the capital.
First, divide the value of the investment by the value of the quota on the date of the investment. The value of quotas is usually reported with 6 decimal places.
BRL 10,000.00/BRL1.263745 = 7,912.988775 quotas.
Example:
BRL 10,000.00/BRL1.263745 = 7,912.988775 quotas
The system uses the quota registered in the contract to make this conversion while adding an investment. Investments are controlled in quotas from the moment an investment is added.
Once you know the number of quotas, multiply it by the value of the quota of the day to know its balance.
The system uses the quota registered in the contract to make this conversion while adding an investment. Investments are controlled in quotas from the moment an investment is added.
Once you know the number of quotas, multiply it by the value of the quota of the day to know its balance.
Suppose that, after twenty five consecutive days, the quota has increased in value and now corresponds to $1.283459. The multiplication result is the updated investment, that is:
7,912.988775 x BRL 1.283459 = BRL 10,156.00.
This quota must be registered in the Update Quotation option of the Bank Contract routine.
Calculation of total gross yield in the period.
To calculate the total gross income obtained in the period, consider the following calculations:
Assuming a balance in quotas of 7,912.988775 multiplied by the quota of the last working day of the previous month, or the quota on the date of investment:
7,912.988775 x 1.263745 = 10,000.00
Consider a balance in quotas of 7,912.988775 multiplied by the quota on the day of redemption or allocation minus the balance in item 1.
Gross Income: 7,912.988775 x 1.283459 – 10,000.00 = BRL 156.00.
To calculate the income proportional to the redemption, first obtain the redemption value in quotas and divide by the redemption value by the quota of the day.
Example:
1,000.00 / 1.283459 = 779.144484 (considering the redemption of BRL 1,000.00)
The value in quotas obtained in item 1 is multiplied by the quota of the last working day of the previous month or by the quota on the investment date:
779,144484 x 1.263745 = 984.64.
The value obtained in item 2 must be deducted from the redemption value to get the income value proportional to 1,000.00:
1,000.00 – 984.64 = 15.36
For better understanding, in partial redemption, the income is calculated by using cross-multiplication.
If 156.00 is the income on the updated 10,000.00, the income on 1,000.00 is:
X = ( 156.00 x 1,000.00 ) / 10,156.00 = 15.36
Where X = Income on partial redemption.
Income |
Redemption |
156.00 |
10,156,00 |
x |
10,000.00 |
Note that, since calculation was made after twenty-five consecutive days and, hence, is NOT exempt from IOF, the value concerning IOF payable must be calculated if there is redemption or allocation.
By the tax collection table, if there is a redemption on the 25th day after investment, the amount payable as IOF will be equivalent to 16% of the income (see in the IOF table that 25 days correspond to 16% of IOF on the income).
Amount of IOF to be paid:
16% = 0.16 x BRL 156.00 = BRL 24.96
If redemption is made from the 30th day of the investment, IOF is exempted on the income.
Calculation of Income Tax on Gross Income
While calculating Income Tax on gross income, the tax is collected by the manager of the investment fund. Collecting always occurs on the last working day of the current month or at redemption, whichever is first.
If redemption is not made on the last working day of the month, the manager automatically debits its balance in quotas, equivalent to the tax amount due in the current month.
In case of a fixed income fund, the tax rate is 20% on gross income, which must be paid to the Internal Revenue Service.
The IOF due is already deducted from the gross income if the redemption is effected within 30 consecutive days period.
Thus, the IR amount to be collected without IOF levy (redemption period starting from the 30th day after the investment) is:
$ 156.00 x 20% = 0.20 = $ 31.20
If there is no redemption till the end of the month, the balance of quotas on the last working day of the month is reduced as follows:
$ 31.20 divided by $ 1.283459 (quota of the last working day of the month) = 24.309308 quotas.
IOF Levy
Consider a redemption on the 25th day shall levy IOF of $ 24.96 and, in addition, IRF:
IRF = (156.00 - 24.96) = $ 131.04 multiplied by 20% = $ 26.21
To demonstrate the calculation method of final income and the net profitability of applicable taxes, redemption on the 25th day after investment is considered, with levy of IOF and IR.
Note: If the calculated IOF is during allocation (Virtual IOF), its value is added to the income of the following month because it was only used not to calculate IR on IOF in the first month and not to calculate a lower income and a lower IR in the following month.
Profitability Calculation
a) Net Income
Gross Income – IOF – IR = BRL 156.00 – BRL 24.96 – BRL 26.21 = BRL 104.83
b) Net Profitability
Net income divided by the initial amount invested x 100 = BRL 104.83 / BRL 10,000.00
= 1.05%, in a period of 25 consecutive days.
In the following month, the investment will be calculated using the quota of the last working day of the previous month and the quota of the allocation date.
CDI Investments
The calculation of the variation in CDI accrued between periods is performed according to the following formula:

C = result of the rates DI-CETIP Over using the percentage from the initial date (inclusive) up to the end date (exclusive), calculated with the rounding of 8 (eight) decimal places.
n = total number of rates DI-CETIP Over, where n is an integer number.
p = percentage for payment, with 4 (four) decimal places.
TDIk = Rate DI-CETIP Over, expressed in days, calculated with the rounding of 8 (eight) decimal places.
For CDI rates published up to 12/31/97, the formula DI-CETIP Over must be used:
k = 1, 2, ..., n
Example:
Percentage for payment: 97.5000.
K |
DI |
TDI (DI/3000) |
TDI * (P/100) |
(1+TDI * (P/100)) * k-1 = Factor k |
1 |
16.62 |
0.00554000 |
0.00540150 |
1.00540150 |
2 |
16.63 |
0.00554333 |
0,00540475 |
1.01083544 |
3 |
16.74 |
0.00558000 |
0.00544050 |
1.01633489 |
4 |
16.70 |
0.00556667 |
0.00542750 |
1.02185105 |
k-1 = (1+TDI * (p/100) of k -1, except when k=1, once the multiplier is 1.
For the CDI rates published after 1/1/98, the formula must be:

k = 1, 2, ..., n
Example:
Percentage for payment: 97.5000.
K |
DI |
TDI (DI/3000) |
TDI (DI/3000) |
(1+TDI * (P/100)) * k-1 = Factor k |
1 |
16.62 |
0.00061031 |
0.00059505 |
1.000580174 |
2 |
16.63 |
0.00061065 |
0.00059538 |
1.001161008 |
3 |
16.74 |
0.00061439 |
0.00059903 |
1.001745742 |
4 |
16.70 |
0.00061303 |
0.00059770 |
1.002329521 |
When multiplying k by CDI balance, the updated value is presented (includes interests). The interest is due to the subtraction of the updated value balance.
The Financial module uses two different mechanisms to print checks:
SIGALOJA.DLL: developed by the Commercial Automation team, this mechanism is responsible for the communication between the system and the check printer.
Print direct in port: Financial sends all commands to the serial port (COM?) or the parallel port (LPT?) without going through the DLL in the Store Control module. To test printing in the ports, use the Check Printing routine of the Financial module.
By using the system to print, a list is displayed containing similar printer names. Each printer uses different communication methods.
In most cases, check printers use the communication via serial port (COM?). Some printers allow the computer to use a parallel port (LPT?), and there are also those that accept both types of connection (one cable for each port).
The system sends basic check data to the printer, such as:
- Code of bank.
- Name of beneficiary.
- Value of check.
- Issuing Municipality.
- Check issue date.
The printer already has settings for the check models from the different banks (recorded in an integrated circuit in the memory).
For further information on adding/editing such configurations, check the printer manual.
Some hardware have both fiscal printer and check printer. These printers can either use the printing mechanism with the Store Control DLL or print directly on the port.
The printers table is updated whenever new approvals occur and/or the technology changes.
All check printers that use the printing mechanism supported by the Store Control DLL must have their functionality activated in the Financial module, thus, some specific Financial parameters are configured.
The system standard considers the printing mechanism directly on the port, however, there are exceptions for the Bematech and Olivetti PR-45 printers, as they have specific documentation that contains the operation description. For XTP and DATAREGIS printers, printing routines are available only in the operating system DOS 2.06 and 2.07.
To print the year with four digits on check printers, the MV_CHEQ4DG parameter indicates whether the system should send the four digits to the printer, the default being N (sends only 2 digits).
The Financial module has some functions for integration with the Excel spreadsheet:
Extenso()
Extenso(nNumToExt,lQuantid,nMoeda,cPrefixo,cIdioma,lCent,lFrac)
It generates the numeric value written in full.
FinNatOrc()
FinNatOrc(cNatureza,cMes,nMoeda,nAno)
It returns the quoted value of the class.
FinNatPrv()
FinNatPrv(cNatureza,dDataIni,dDataFim,nMoeda,nTipoData,lConsDtBas,lConsProvis)
Returns the estimated value of the class within the desired period.
FinNatRea()
FinNatRea(cNatureza,dDataIni,dDataFim,nMoeda,lMovBco,cTipoDat)
Returns the class accomplished value.
RecMoeda()
RecMoeda(dData,cMoeda)
It returns the exchange rate of a currency on a given date.
SldBco()
SldBco(cBanco,cAgencia,cConta,dData,nMoeda,lLimite)
Returns bank balance as on a date.
SldReceber()
SldReceber(dData,nMoeda,lDtAnterior,lMovSE5)
It returns the balance receivable on a given date.
SldPagar()
SldPagar(dData,nMoeda,lDtAnterior,lMovSe5)
It returns the balance payable on a given date.
VlrCliente
VlrCliente(cCliLoja,dDtIni,dDtFin,nMoeda,lConsAbat,lConsAcresc,lConsDecresc)
Returns the value of the customer's bills during a period.
VlrFornece
VlrFornece(cForLoja,dDtIni,dDtFin,nMoeda,lConsAbat,lConsAcresc,lConsDecresc)
Returns the value of the supplier's bills during a period.
SldCliente()
SldCliente(cCliLoja,dData,nMoeda,lMovSE5)
It returns the balance receivable from the customer on a given date.
SldFornece()
SldFornece(cForLoja,dData,nMoeda,lMovSE5)
It returns the balance payable to the supplier on a given date.
Media()
Media(nMoeda, nMes, nAno)
It returns the average rate of a currency in a given month/year.
xMoeda
xMoeda(nValor,nMoedp,nMoedd,dData,nDecimal,nTaxap,nTaxad)
Converts the amounts between currencies.