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

Rcv::obtenerDetalleCompras()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 21
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

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