PIS   A
last analyzed

Complexity

Total Complexity 8

Size/Duplication

Total Lines 77
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 6
Bugs 0 Features 1
Metric Value
wmc 8
eloc 38
c 6
b 0
f 1
dl 0
loc 77
ccs 32
cts 32
cp 1
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A isentoPIS() 0 8 1
A zeradoPIS() 0 5 1
A adValoremPIS() 0 9 1
A calcularPIS() 0 23 5
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