PIS::isentoPIS()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 6
c 0
b 0
f 0
dl 0
loc 8
ccs 7
cts 7
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 PIS
11
{
12
    public $CST;
13
    public $vBC;
14
    public $pPIS;
15
    public $vPIS;
16
    public $qBCProd;
17
    public $vAliqProd;
18
19
    /**
20
     * @param PIS $PIS
21
     * @return PIS
22
     * @throws NotImplementedCSTException|InvalidCSTException
23
     */
24 5
    public static function calcularPIS(PIS $PIS): PIS
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
34 5
        if (in_array($PIS->CST, $adValorem, true)) {
35 1
            return PIS::adValoremPIS($PIS);
36
        }
37 4
        if (in_array($PIS->CST, $zerado, true)) {
38 1
            return PIS::zeradoPIS($PIS);
39
        }
40 3
        if (in_array($PIS->CST, $isento, true)) {
41 1
            return PIS::isentoPIS($PIS);
42
        }
43 2
        if (in_array($PIS->CST, $notImplemented, true)) {
44 1
            throw new NotImplementedCSTException($PIS->CST);
45
        }
46 1
        throw new InvalidCSTException($PIS->CST);
47
    }
48
49
    /**
50
     * @param PIS $PIS
51
     * @return PIS
52
     */
53 1
    private static function adValoremPIS(PIS $PIS): PIS
54
    {
55 1
        $pPIS = 0.65;
56 1
        $calculado = new PIS();
57 1
        $calculado->CST = $PIS->CST;
58 1
        $calculado->vBC = $PIS->vBC;
59 1
        $calculado->pPIS = $pPIS;
60 1
        $calculado->vPIS = (float)number_format($PIS->vBC * ($pPIS / 100), 2);
61 1
        return $calculado;
62
    }
63
64
    /**
65
     * @param PIS $PIS
66
     * @return PIS
67
     */
68 1
    private static function isentoPIS($PIS): PIS
69
    {
70 1
        $calculado = new PIS();
71 1
        $calculado->CST = $PIS->CST;
72 1
        $calculado->vBC = 0.0;
73 1
        $calculado->pPIS = 0.0;
74 1
        $calculado->vPIS = 0.0;
75 1
        return $calculado;
76
    }
77
78
    /**
79
     * @param PIS $PIS
80
     * @return PIS
81
     */
82 1
    private static function zeradoPIS($PIS): PIS
83
    {
84 1
        $calculado = new PIS();
85 1
        $calculado->CST = $PIS->CST;
86 1
        return $calculado;
87
    }
88
}
89