Passed
Push — master ( 2096f5...31bee4 )
by João
05:01 queued 01:00
created

zeradoCOFINS()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 3
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 1
dl 0
loc 5
ccs 3
cts 3
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Gbbs\NfeCalculos;
6
7
use Gbbs\NfeCalculos\Exception\InvalidCSTException;
8
use Gbbs\NfeCalculos\Exception\NotImplementedCSTException;
9
10
class COFINS
11
{
12
    public $CST;
13
    public $vBC;
14
    public $pCOFINS;
15
    public $vCOFINS;
16
    public $qBCProd;
17
    public $vAliqProd;
18
}
19
20
/**
21
 * @param COFINS $COFINS
22
 * @return COFINS
23
 * @throws NotImplementedCSTException|InvalidCSTException
24
 */
25
function calcularCOFINS(COFINS $COFINS): COFINS
26
{
27
    $adValorem = [
28 5
        '01', '02', '49', '50', '51', '52', '53', '54', '55', '56', '60', '61', '62',
29
        '63', '64', '65', '66', '67', '70', '71', '72', '73', '74', '75', '98'
30
    ];
31 5
    $zerado = ['08'];
32 5
    $isento = ['99'];
33 5
    $notImplemented = ['03', '04', '05', '06', '07', '09'];
34 5
    if (in_array($COFINS->CST, $adValorem, true)) {
35 1
        return adValoremCOFINS($COFINS);
36
    }
37 4
    if (in_array($COFINS->CST, $zerado, true)) {
38 1
        return zeradoCOFINS($COFINS);
39
    }
40 3
    if (in_array($COFINS->CST, $isento, true)) {
41 1
        return isentoCOFINS($COFINS);
42
    }
43 2
    if (in_array($COFINS->CST, $notImplemented, true)) {
44 1
        throw new NotImplementedCSTException($COFINS->CST);
45
    }
46 1
    throw new InvalidCSTException($COFINS->CST);
47
}
48
49
/**
50
 * @param COFINS $COFINS
51
 * @return COFINS
52
 */
53
function adValoremCOFINS(COFINS $COFINS): COFINS
54
{
55 1
    $pCOFINS = 3;
56 1
    $calculado = new COFINS();
57 1
    $calculado->CST = $COFINS->CST;
58 1
    $calculado->vBC = $COFINS->vBC;
59 1
    $calculado->pCOFINS = $pCOFINS;
60 1
    $calculado->vCOFINS = $COFINS->vBC * ($pCOFINS / 100);
61 1
    return $calculado;
62
}
63
64
/**
65
 * @param COFINS $COFINS
66
 * @return COFINS
67
 */
68
function isentoCOFINS($COFINS): COFINS
69
{
70 1
    $calculado = new COFINS();
71 1
    $calculado->CST = $COFINS->CST;
72 1
    $calculado->vBC = 0.0;
73 1
    $calculado->pCOFINS = 0.0;
74 1
    $calculado->vCOFINS = 0.0;
75 1
    return $calculado;
76
}
77
78
/**
79
* @param COFINS $COFINS
80
* @return COFINS
81
*/
82
function zeradoCOFINS($COFINS): COFINS
83
{
84 1
    $calculado = new COFINS();
85 1
    $calculado->CST = $COFINS->CST;
86 1
    return $calculado;
87
}
88