Test Failed
Push — master ( e81f34...58150d )
by
unknown
19:06
created

BteEmitidas   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 157
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 51
c 1
b 0
f 0
dl 0
loc 157
ccs 0
cts 67
cp 0
rs 10
wmc 9

6 Methods

Rating   Name   Duplication   Size   Complexity  
A obtenerHtmlBteEmitida() 0 11 1
A emitirBte() 0 10 1
A listarBtesEmitidas() 0 22 2
A anularBteEmitida() 0 22 2
A obtenerTasaReceptorBte() 0 20 2
A __construct() 0 10 1
1
<?php
2
3
declare(strict_types=1);
4
5
/**
6
 * API Gateway: Cliente de API en PHP.
7
 * Copyright (C) API Gateway <https://www.apigateway.cl>
8
 *
9
 * Este programa es software libre: usted puede redistribuirlo y/o modificarlo
10
 * bajo los términos de la GNU Lesser General Public License (LGPL) publicada
11
 * por la Fundación para el Software Libre, ya sea la versión 3 de la Licencia,
12
 * o (a su elección) cualquier versión posterior de la misma.
13
 *
14
 * Este programa se distribuye con la esperanza de que sea útil, pero SIN
15
 * GARANTÍA ALGUNA; ni siquiera la garantía implícita MERCANTIL o de APTITUD
16
 * PARA UN PROPÓSITO DETERMINADO. Consulte los detalles de la GNU Lesser General
17
 * Public License (LGPL) para obtener una información más detallada.
18
 *
19
 * Debería haber recibido una copia de la GNU Lesser General Public License
20
 * (LGPL) junto a este programa. En caso contrario, consulte
21
 * <http://www.gnu.org/licenses/lgpl.html>.
22
 */
23
24
namespace apigatewaycl\api_client\sii;
25
26
use apigatewaycl\api_client\ApiBase;
27
28
/**
29
 * Módulo para la emisión de Boletas de Terceros Electrónicas del SII.
30
 *
31
 * Para más información sobre la API, consulte la `documentación completa de las
32
 * BTE <https://developers.apigateway.cl/#e08f50ab-5509-48ab-81ab-63fc8e5985e1>`_.
33
 */
34
class BteEmitidas extends ApiBase
35
{
36
    /**
37
     * Cliente específico para gestionar Boletas de Terceros Electrónicas (BTE) emitidas.
38
     *
39
     * Provee métodos para emitir, anular, y consultar información relacionada con BTEs.
40
     *
41
     * @param array $credenciales Credenciales de autenticación.
42
     * @param string|null $token Token de autenticación para la API.
43
     * @param string|null $url URL base para la API.
44
     */
45
    public function __construct(
46
        array $credenciales,
47
        string $token = null,
48
        string $url = null
49
    )
50
    {
51
        parent::__construct(
52
            credenciales: $credenciales,
53
            token: $token,
54
            url: $url
55
        );
56
    }
57
58
    /**
59
     * Obtiene los documentos BTE emitidos por un emisor en un periodo específico.
60
     *
61
     * @param string $emisor RUT del emisor de las BTE.
62
     * @param string $periodo Período de las BTE emitidas.
63
     * @param int|null $pagina Número de página para paginación (opcional).
64
     * @return \Psr\Http\Message\ResponseInterface Respuesta JSON con
65
     * los documentos BTE.
66
     */
67
    public function listarBtesEmitidas(
68
        string $emisor,
69
        string $periodo,
70
        int $pagina = null
71
    )
72
    {
73
        $url = sprintf(
74
            '/sii/bte/emitidas/documentos/%s/%s',
75
            $emisor,
76
            $periodo
77
        );
78
        if ($pagina != null) {
0 ignored issues
show
Bug Best Practice introduced by
It seems like you are loosely comparing $pagina of type integer|null against null; this is ambiguous if the integer can be zero. Consider using a strict comparison !== instead.
Loading history...
79
            $url = sprintf(
80
                $url.'?pagina=%d',
81
                $pagina
82
            );
83
        }
84
        $body = [
85
            'auth' => $this->getAuthPass(),
86
        ];
87
        $response = $this->post($url, $body);
88
        return $response;
89
    }
90
91
    /**
92
     * Obtiene la representación HTML de una BTE emitida.
93
     *
94
     * @param string $codigo Código único de la BTE.
95
     * @return \Psr\Http\Message\ResponseInterface Contenido HTML de la BTE.
96
     */
97
    public function obtenerHtmlBteEmitida(string $codigo)
98
    {
99
        $url = sprintf(
100
            '/sii/bte/emitidas/html/%s',
101
            $codigo
102
        );
103
        $body = [
104
            'auth' => $this->getAuthPass(),
105
        ];
106
        $response = $this->post($url, $body);
107
        return $response;
108
    }
109
110
    /**
111
     * Emite una nueva Boleta de Tercero Electrónica.
112
     *
113
     * @param array $datos Datos de la boleta a emitir.
114
     * @return \Psr\Http\Message\ResponseInterface Respuesta JSON con la
115
     * confirmación de la emisión de la BTE.
116
     */
117
    public function emitirBte(array $datos)
118
    {
119
        $url = '/sii/bte/emitidas/emitir';
120
        $body = [
121
            'auth' => $this->getAuthPass(),
122
            'boleta' => $datos,
123
        ];
124
125
        $response = $this->post($url, $body);
126
        return $response;
127
    }
128
129
    /**
130
     * Anula una BTE emitida.
131
     *
132
     * @param string $emisor RUT del emisor de la boleta.
133
     * @param string $numero Número de la boleta.
134
     * @param int $causa Causa de anulación.
135
     * @param string|null $periodo Período de emisión de la boleta (opcional).
136
     * @return \Psr\Http\Message\ResponseInterface Respuesta JSON con la
137
     * confirmación de la anulación.
138
     */
139
    public function anularBteEmitida(
140
        string $emisor,
141
        string $numero,
142
        int $causa = 3,
143
        string $periodo = null
144
    )
145
    {
146
        $url = sprintf(
147
            '/sii/bhe/emitidas/anular/%s/%s?causa=%d',
148
            $emisor,
149
            $numero,
150
            $causa
151
        );
152
        if ($periodo != null) {
0 ignored issues
show
Bug introduced by
It seems like you are loosely comparing $periodo of type null|string against null; this is ambiguous if the string can be empty. Consider using a strict comparison !== instead.
Loading history...
153
            $url = $url.sprintf('?periodo=%s', $periodo);
154
        }
155
        $body = [
156
            'auth' => $this->getAuthPass(),
157
        ];
158
159
        $response = $this->post($url, $body);
160
        return $response;
161
    }
162
163
    /**
164
     * Obtiene la tasa de retención aplicada a un receptor por un emisor específico.
165
     *
166
     * @param string $emisor RUT del emisor de la boleta.
167
     * @param string $receptor RUT del receptor de la boleta.
168
     * @param string|null $periodo Período de emisión de la boleta (opcional).
169
     * @return \Psr\Http\Message\ResponseInterface Respuesta JSON con la tasa de retención.
170
     */
171
    public function obtenerTasaReceptorBte(
172
        string $emisor,
173
        string $receptor,
174
        string $periodo = null
175
    )
176
    {
177
        $url = sprintf(
178
            '/sii/bte/emitidas/receptor_tasa/%s/%s',
179
            $emisor,
180
            $receptor
181
        );
182
        if ($periodo != null) {
0 ignored issues
show
Bug introduced by
It seems like you are loosely comparing $periodo of type null|string against null; this is ambiguous if the string can be empty. Consider using a strict comparison !== instead.
Loading history...
183
            $url = $url.sprintf('?periodo=%s', $periodo);
184
        }
185
        $body = [
186
            'auth' => $this->getAuthPass(),
187
        ];
188
189
        $response = $this->post($url, $body);
190
        return $response;
191
    }
192
}
193