Rcv::obtenerDetalleCompras()   A
last analyzed

Complexity

Conditions 3
Paths 4

Size

Total Lines 24
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 15
c 1
b 0
f 0
nc 4
nop 5
dl 0
loc 24
ccs 0
cts 18
cp 0
crap 12
rs 9.7666
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
use Psr\Http\Message\ResponseInterface;
28
29
/**
30
 * Módulo para interactuar con el Registro de Compra y Venta del SII.
31
 *
32
 * Para más información sobre la API, consulte la `documentación completa del
33
 * RCV <https://developers.apigateway.cl/#ef1f7d54-2e86-4732-bb91-d3448b383d66>`_.
34
 */
35
class Rcv extends ApiBase
36
{
37
    /**
38
     * Cliente específico para interactuar con los endpoints de Registro de
39
     * Compras y Ventas (RCV) de la API de API Gateway.
40
     *
41
     * Proporciona métodos para obtener resúmenes y detalles de compras y ventas.
42
     *
43
     * @param array $credenciales Credenciales de autenticación.
44
     * @param string|null $token Token de autenticación para la API.
45
     * @param string|null $url URL base para la API.
46
     */
47
    public function __construct(
48
        array $credenciales,
49
        string $token = null,
50
        string $url = null
51
    ) {
52
        parent::__construct(
53
            credenciales: $credenciales,
54
            token: $token,
55
            url: $url
56
        );
57
    }
58
59
    /**
60
     * Obtiene un resumen de las compras registradas para un receptor en un
61
     * periodo específico.
62
     *
63
     * @param string $receptor RUT del receptor de las compras.
64
     * @param string $periodo Período de tiempo de las compras.
65
     * @param string $estado Estado de las compras ('REGISTRO', 'PENDIENTE',
66
     * 'NO_INCLUIR', 'RECLAMADO').
67
     * @return \Psr\Http\Message\ResponseInterface Respuesta JSON con
68
     * el resumen de compras.
69
     */
70
    public function obtenerResumenCompras(
71
        string $receptor,
72
        string $periodo,
73
        string $estado = 'REGISTRO'
74
    ): ResponseInterface {
75
        $url = sprintf(
76
            '/sii/rcv/compras/resumen/%s/%s/%s',
77
            $receptor,
78
            $periodo,
79
            $estado
80
        );
81
82
        $body = [
83
            'auth' => $this->getAuthPass(),
84
        ];
85
        $response = $this->post(resource: $url, data: $body);
86
        return $response;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $response could return the type null which is incompatible with the type-hinted return Psr\Http\Message\ResponseInterface. Consider adding an additional type-check to rule them out.
Loading history...
87
    }
88
89
    /**
90
     * Obtiene detalles de las compras para un receptor en un periodo específico.
91
     *
92
     * @param string $receptor RUT del receptor de las compras.
93
     * @param string $periodo Período de tiempo de las compras.
94
     * @param int $dte Tipo de DTE.
95
     * @param string $estado Estado de las compras ('REGISTRO', 'PENDIENTE',
96
     * 'NO_INCLUIR', 'RECLAMADO').
97
     * @param string|null $tipo Tipo de formato de respuesta ('rcv_csv' o 'rcv').
98
     * @return \Psr\Http\Message\ResponseInterface Respuesta JSON con
99
     * detalles de las compras.
100
     */
101
    public function obtenerDetalleCompras(
102
        string $receptor,
103
        string $periodo,
104
        int $dte = 0,
105
        string $estado = 'REGISTRO',
106
        string $tipo = null
107
    ): ResponseInterface {
108
        $tipo = (
109
            $dte == 0 &&
110
            $estado == 'REGISTRO'
111
        ) ? 'rcv_csv' : ($tipo ?? 'rcv');
112
        $url = sprintf(
113
            '/sii/rcv/compras/detalle/%s/%s/%d/%s?tipo=%s',
114
            $receptor,
115
            $periodo,
116
            $dte,
117
            $estado,
118
            $tipo
119
        );
120
        $body = [
121
            'auth' => $this->getAuthPass(),
122
        ];
123
        $response = $this->post(resource: $url, data: $body);
124
        return $response;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $response could return the type null which is incompatible with the type-hinted return Psr\Http\Message\ResponseInterface. Consider adding an additional type-check to rule them out.
Loading history...
125
    }
126
127
    /**
128
     * Obtiene un resumen de las ventas registradas para un emisor en un
129
     * periodo específico.
130
     *
131
     * @param string $emisor RUT del emisor de las ventas.
132
     * @param string $periodo Período de tiempo de las ventas.
133
     * @return \Psr\Http\Message\ResponseInterface Respuesta JSON con
134
     * el resumen de ventas.
135
     */
136
    public function obtenerResumenVentas(
137
        string $emisor,
138
        string $periodo
139
    ): ResponseInterface {
140
        $url = sprintf(
141
            '/sii/rcv/ventas/resumen/%s/%s',
142
            $emisor,
143
            $periodo
144
        );
145
146
        $body = [
147
            'auth' => $this->getAuthPass(),
148
        ];
149
        $response = $this->post(resource: $url, data: $body);
150
        return $response;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $response could return the type null which is incompatible with the type-hinted return Psr\Http\Message\ResponseInterface. Consider adding an additional type-check to rule them out.
Loading history...
151
    }
152
153
    /**
154
     * Obtiene detalles de las ventas para un emisor en un periodo específico.
155
     *
156
     * @param string $emisor RUT del emisor de las ventas.
157
     * @param string $periodo Período de tiempo de las ventas.
158
     * @param int $dte Tipo de DTE.
159
     * @param string $tipo Tipo de formato de respuesta ('rcv_csv' o 'rcv').
160
     * @return \Psr\Http\Message\ResponseInterface Respuesta JSON con
161
     * detalles de las ventas.
162
     */
163
    public function obtenerDetalleVentas(
164
        string $emisor,
165
        string $periodo,
166
        int $dte = 0,
167
        string $tipo = null
168
    ): ResponseInterface {
169
        $tipo = $dte == 0 ? 'rcv_csv' : ($tipo ?? 'rcv');
170
        $url = sprintf(
171
            '/sii/rcv/ventas/detalle/%s/%s/%d?tipo=%s',
172
            $emisor,
173
            $periodo,
174
            $dte,
175
            $tipo
176
        );
177
        $body = [
178
            'auth' => $this->getAuthPass(),
179
        ];
180
        $response = $this->post(resource: $url, data: $body);
181
        return $response;
0 ignored issues
show
Bug Best Practice introduced by
The expression return $response could return the type null which is incompatible with the type-hinted return Psr\Http\Message\ResponseInterface. Consider adding an additional type-check to rule them out.
Loading history...
182
    }
183
}
184