COFINS::zeradoCOFINS()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 5
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

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