├── php
├── .vscode
│ └── settings.json
├── README.md
├── tusfacturas_sdk.php
└── tusfacturas_sdk_entidades.php
└── README.md
/php/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "workbench.colorCustomizations": {
3 | "activityBar.activeBackground": "#6800b5",
4 | "activityBar.activeBorder": "#000000",
5 | "activityBar.background": "#6800b5",
6 | "activityBarBadge.background": "#000000",
7 | "activityBarBadge.foreground": "#2ec4b6",
8 | "editorGroup.border": "#6800b5",
9 | "panel.border": "#6800b5",
10 | "sideBar.border": "#6800b5",
11 | "statusBar.background": "#6800b5",
12 | "statusBar.border": "#6800b5",
13 | "statusBar.debuggingBackground": "#4db500",
14 | "statusBar.debuggingBorder": "#4db500",
15 | "statusBarItem.hoverBackground": "#8500e8",
16 | "tab.activeBorder": "#6800b5",
17 | "titleBar.activeBackground": "#2e004f",
18 | "titleBar.border": "#2e004f",
19 | "titleBar.inactiveBackground": "#2e004f99"
20 | }
21 | }
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | [](https://php.net/)
4 | [](https://github.com/vousys/tusfacturas/releases/)
5 | [](https://github.com/vousys/tusfacturas/graphs/commit-activity)
6 | [](https://developers.tusfacturas.app/)
7 |
8 |
9 | # TusFacturas.app: API y SDK para Factura electrónica AFIP/ARCA. SaaS Facturación Argentina
10 | Integra la facturación electrónica AFIP/ARCA fácil y rápido con nuestra API Rest para AFIP. ¡Confiable desde 2015! Elegida por todos los desarrolladores. TusFacturasAPP es un [software de facturación](https://www.tusfacturas.app/caracteristicas-de-tus-facturas-electronica-facturacion.html) especialmente diseñado para empresas que facturen en Argentina.
11 |
12 |
13 | ## ¿Qué es la API para Factura Electrónica AFIP/ARCA?
14 | La [API Rest de factura electrónica Argentina](https://www.tusfacturas.app/api-factura-electronica-afip.html) provista por [TusFacturasAPP](https://www.tusfacturas.app/), te permite generar de manera segura y rápida, comprobantes electrónicas válidos en AFIP/ARCA Argentina desde cualquier lenguaje de programación. Contamos con el respaldo de un estudio impositivo que nos mantiene asesorados ante las nuevas normativas que surgen día a día en nuestro país.
15 |
16 | [](https://cdn.tusfacturas.app/web/images/ig/157.webp)
17 |
18 |
19 | ## Documentación de la API para Facturación AFIP/ARCA
20 |
21 | [Documentación](https://developers.tusfacturas.app)
22 |
23 | Accedé a toda la documentación de nuestra API Rest para factura electrónica AFIP/ARCA y facturá desde un JSON con cualquier lenguaje de programación.
24 |
25 |
26 |
27 | ## Proba la API gratis
28 |
29 | [Crea tu cuenta](https://www.tusfacturas.app/quiero-probar-api-factura-electronica.html) gratis por un mes.
30 |
31 |
32 |
33 | ## SDK PHP para AFIP/ARCA
34 |
35 | Simplifica la emisión de facturas electrónicas AFIP/ARCA con nuestro SDK AFIP/ARCA para PHP. Homologado por AFIP/ARCA desde 2012.
36 |
37 | Descargá el [SDK AFIP PHP](https://github.com/vousys/tusfacturas/tree/master/php)
38 |
39 |
40 |
41 | ## ¿Qué podes hacer con nuestra API Rest para AFIP/ARCA?
42 |
43 | ### Facturar en AFIP/ARCA
44 | Utilizá la API de facturación electrónica AFIP/ARCA de TusFacturasAPP, para emitir facturas, notas de crédito, notas de débito y facturas-recibo (cod.11) de tipo A,B,C,E, M y MiPyme desde tu plataforma y olvidate!
45 |
46 | [Documentación para facturar en AFIP](https://developers.tusfacturas.app/api-factura-electronica-afip-facturacion-ventas)
47 |
48 |
49 |
50 | ### Obtener cotizaciones moneda extranjera
51 | Accede a cotizaciones de monedas extranjeras, oficiales de AFIP/ARCA a través de nuestra API.
52 |
53 | [Documentación API Cotización dolar AFIP/ARCA](https://developers.tusfacturas.app/consultas-varias-a-servicios-afip/cotizacion-monedas-afip)
54 |
55 |
56 |
57 | ### Consultar los datos de un CUIT
58 | Accede a la información completa de la constancia de inscripción de un CUIT a través de nuestra API de facturación electrónica AFIP/ARCA. Obtene datos precisos y actualizados directamente desde la fuente oficial, ahorrando tiempo y esfuerzo.
59 |
60 | [Documentación API de consulta en constancia de inscripción AFIP/ARCA](https://developers.tusfacturas.app/consultas-varias-a-servicios-afip/api-factura-electronica-afip-clientes-consultar-cuit-en-constancia-de-inscripcion)
61 |
62 |
63 | ### Obtener el PDF de tus facturas
64 | Nuestra API te resuelve no solo la integración con AFIP/ARCA sino tambien la generación y envío del PDF a tus clientes, ya sea en formato de hoja A4 o en formato [ticket para impresora térmica con papel de 80mm](https://www.tusfacturas.app/caracteristicas-de-tus-facturas-electronica-impresion-tickets.html). Contamos con diferentes estilos de PDF para hoja A4 porque sabemos lo importante que es tu marca.
65 |
66 |
67 |
68 | ### Envío de facturas por e-mail a clientes
69 | La API de facturación electrónica AFIP/ARCA de TusFacturasAPP te permite con un solo request, [enviarle a tu cliente la factura por e-mail](https://www.tusfacturas.app/caracteristicas-de-tus-facturas-electronica-facturacion.html). Reenviala las veces que sea necesario.
70 |
71 |
72 |
73 | ### Crear recibos de cobro y órdenes de pago
74 | La API de TusFacturasAPP te permite ademas generar [recibos de cobro](https://developers.tusfacturas.app/recibos-de-cobro-y-ordenes-de-pago) a tus clientes y [órdenes de pago](https://developers.tusfacturas.app/recibos-de-cobro-y-ordenes-de-pago/api-factura-electronica-afip-or-ingresar-pago-2) a tus proveedores, ademas de enviarle un [recordatorio de pago automático](https://www.tusfacturas.app/caracteristicas-de-tus-facturas-electronica-recordatorios.html) a tus clientes por las facturas impagas.
75 |
76 |
77 |
78 | ## Tenemos muchas más herramientas!
79 | Conocé todas las herramientas que tenemos disponibles.
80 | [Documentación API AFIP/ARCA](https://developers.tusfacturas.app/)
81 |
82 |
83 |
84 | ## Autores
85 |
86 | - [@vousys](https://www.github.com/vousys)
87 |
88 |
--------------------------------------------------------------------------------
/php/README.md:
--------------------------------------------------------------------------------
1 | # TusFacturas.app - API de integración con Factura electrónica AFIP - PHP SDK
2 |
3 | Mediante nuestra API podrás conectar tu sistema de gestión actual, con nuestra plataforma y emitir facturas electrónicas AFIP válidas. Estamos homologados por AFIP.
4 |
5 | Encontrá toda la documentación aquí: https://developers.tusfacturas.app/
6 | Registrate en: https://www.tusfacturas.app/
7 |
8 |
9 | ### SDK para PHP:
10 | Estas librerias proveen un set de clases y metodos para interactuar con la API de TusFacturas.com.ar.
11 |
12 | #### Versiones de PHP Soportadas:
13 | El SDK soporta PHP 5 o superior
14 |
15 | #### Inicio Rápido
16 | 1. Incluí en tu proyecto los archivos archivo tusfacturas_sdk.php y tusfacturas_sdk_entidades.php
17 | 2. Configura tus credenciales
18 | 3. Invocá el método que necesitas implementar.
19 | 4. Manejá las respuestas
20 |
21 |
22 |
23 |
24 | ## Ejemplos de uso.
25 |
26 |
27 | ### Estado de los servicios:
28 | Documentación: https://developers.tusfacturas.app/api-factura-electronica-afip-estado-de-los-servicios-afip
29 |
30 | ```
31 | $tusfacturas_sdk_obj = new tusfacturas_sdk();
32 | $tusfacturas_sdk_obj->set_keys( TUSFACTURAS_APIKEY, TUSFACTURAS_APITOKEN, TUSFACTURAS_USERTOKEN );
33 | $response = $tusfacturas_sdk_obj->estado_servicios();
34 | ```
35 |
36 |
37 | ### Consultar datos asociados a un CUIT:
38 | Documentación: https://developers.tusfacturas.app/api-factura-electronica-afip-clientes-consultar-cuit-en-constancia-de-inscripcion
39 |
40 | ```
41 | $tusfacturas_sdk_obj = new tusfacturas_sdk();
42 | $tusfacturas_sdk_obj->set_keys( TUSFACTURAS_APIKEY, TUSFACTURAS_APITOKEN, TUSFACTURAS_USERTOKEN );
43 | $response = $tusfacturas_sdk_obj->cliente_afip_info("1111111111");
44 | ```
45 |
46 |
47 | ### Consulta de numeración de comprobantes:
48 | Documentación: https://developers.tusfacturas.app/api-factura-electronica-afip-consultar-numeracion-de-comprobantes.
49 |
50 | ```
51 | $tusfacturas_sdk_obj = new tusfacturas_sdk();
52 | $tusfacturas_sdk_obj->set_keys( TUSFACTURAS_APIKEY, TUSFACTURAS_APITOKEN, TUSFACTURAS_USERTOKEN );
53 |
54 | // ===== Armo los datos a enviar =====
55 |
56 | $comprobante_data["tipo"] = "FACTURA B";
57 | $comprobante_data["punto_venta"] = "0001";
58 | $comprobante_data["operacion"] = "V";
59 |
60 |
61 | // ===== Consulto la proxima numeracion =====
62 |
63 | $response = $tusfacturas_sdk_obj->numeracion ( $tusfacturas_sdk_entidades->comprobante($comprobante_data) );
64 |
65 |
66 |
67 |
68 | // ===== Controlo si hay error =====
69 |
70 | if (!$tusfacturas_sdk_obj->hay_error($response)) {
71 | echo "
72 | Proximo numero a generar : ".$response->comprobante->numero. "
73 |
";
74 |
75 | }else{
76 | echo "
77 | Se han encontrado los siguientes errores:
78 | ".implode("
",$response->errores). "
79 |
";
80 | }
81 |
82 |
83 |
84 |
85 | ```
86 |
87 |
88 |
89 | ### Generar Nuevo Comprobante de tipo factura:
90 | Documentación: https://developers.tusfacturas.app/api-factura-electronica-afip-facturacion-nuevo-comprobante
91 |
92 | ```
93 | $tusfacturas_sdk_obj = new tusfacturas_sdk();
94 | $tusfacturas_sdk_entidades = new tusfacturas_sdk_entidades();
95 | $tusfacturas_sdk_obj->set_keys( TUSFACTURAS_APIKEY, TUSFACTURAS_APITOKEN, TUSFACTURAS_USERTOKEN );
96 |
97 |
98 |
99 | // ===== Datos del cliente =======
100 |
101 | $cliente_data = array(
102 | "documento_tipo" => "DNI",
103 | "razon_social" => "JUAN PEREZ NIO",
104 | "email" => "email@email.com",
105 | "domicilio" => "Avenida Siempreviva 742",
106 | "documento_nro" => "12345678",
107 | "provincia" => 1,
108 | "envia_por_mail" => "S",
109 | "condicion_pago" => 0,
110 | "condicion_iva" => "CF"
111 | );
112 |
113 |
114 | // ===== Datos del comprobante a generar =====
115 |
116 | // Cabecera de la factura
117 |
118 | $comprobante_data["tipo"] = "FACTURA B";
119 | $comprobante_data["punto_venta"] = "0001";
120 | $comprobante_data["fecha"] = date("d/m/Y");
121 | $comprobante_data["numero"] = 20;
122 | // (Existen otros datos opcionales a enviar, consultar la documentación)
123 |
124 |
125 | // Armo el detalle de los conceptos
126 |
127 | $comprobante_data["detalle"] = array();
128 | $comprobante_data["detalle"][] = $tusfacturas_sdk_entidades->comprobante_detalle_item(
129 | array (
130 | "cantidad" => 1,
131 | "afecta_stock" => "N",
132 | "leyenda" => "",
133 | "producto" => $tusfacturas_sdk_entidades->producto(
134 | array(
135 | "descripcion" => "HONORARIOS",
136 | "unidad_bulto" => 1,
137 | "lista_precios" => "Lista general",
138 | "codigo" => "HON",
139 | "precio_unitario_sin_iva" => 100,
140 | "alicuota" => 21,
141 | "unidad_medida" => 7
142 | )
143 | )
144 | )
145 | );
146 |
147 | // totales
148 |
149 | $comprobante_data["total"] = 121;
150 |
151 |
152 |
153 | // ===== Envio a generar el comprobante =====
154 |
155 | $response = $tusfacturas_sdk_obj->comprobante_nuevo(
156 | $tusfacturas_sdk_entidades->comprobante($comprobante_data) ,
157 | $tusfacturas_sdk_entidades->comprobante_cliente($cliente_data)
158 | );
159 |
160 |
161 |
162 |
163 | // ===== Controlo si hay error =====
164 |
165 | if (!$tusfacturas_sdk_obj->hay_error($response)) {
166 | echo "
167 | Comprobante generado correctamente:
168 | CAE: ".$response->cae. " (Vencimiento: ".$response->vencimiento_cae. " )
169 | Factura PDF: ".$response->comprobante_pdf_url. "
170 |
";
171 |
172 | }else{
173 | echo "
174 | Se han encontrado los siguientes errores:
175 | ".implode("
",$response->errores). "
176 |
";
177 | }
178 |
179 |
180 |
181 | ```
182 |
183 | ### Generar Nuevo Comprobante de nota de débito detallando comprobantes asociados:
184 | Documentación: https://developers.tusfacturas.app/api-factura-electronica-afip-facturacion-nuevo-comprobante
185 |
186 | ```
187 | $tusfacturas_sdk_obj = new tusfacturas_sdk();
188 | $tusfacturas_sdk_entidades = new tusfacturas_sdk_entidades();
189 | $tusfacturas_sdk_obj->set_keys( TUSFACTURAS_APIKEY, TUSFACTURAS_APITOKEN, TUSFACTURAS_USERTOKEN );
190 |
191 |
192 |
193 | // ===== Datos del cliente =======
194 |
195 | $cliente_data = array(
196 | "documento_tipo" => "DNI",
197 | "razon_social" => "JUAN PEREZ NIO",
198 | "email" => "email@email.com",
199 | "domicilio" => "Avenida Siempreviva 742",
200 | "documento_nro" => "12345678",
201 | "provincia" => 1,
202 | "envia_por_mail" => "S",
203 | "condicion_pago" => 0,
204 | "condicion_iva" => "CF"
205 | );
206 |
207 |
208 | // ===== Datos del comprobante a generar =====
209 |
210 | // Cabecera de la nota de debito
211 |
212 | $comprobante_data["tipo"] = "NOTA DE DEBITO B";
213 | $comprobante_data["punto_venta"] = "0001";
214 | $comprobante_data["fecha"] = date("d/m/Y");
215 | $comprobante_data["numero"] = 20;
216 | // (Existen otros datos opcionales a enviar, consultar la documentación)
217 |
218 | // comprobantes asociados
219 | $comprobante_data["comprobantes_asociados"][] = $tusfacturas_sdk_entidades->comprobantes_asociados_detalle_item('03/03/2021', 'FACTURA B', '0003', '123', '1234567890') ;
220 | $comprobante_data["comprobantes_asociados"][] = $tusfacturas_sdk_entidades->comprobantes_asociados_detalle_item('03/03/2021', 'FACTURA B', '0003', '124', '1234567890') ;
221 |
222 |
223 | // Armo el detalle de los conceptos
224 |
225 | $comprobante_data["detalle"] = array();
226 | $comprobante_data["detalle"][] = $tusfacturas_sdk_entidades->comprobante_detalle_item(
227 | array (
228 | "cantidad" => 1,
229 | "afecta_stock" => "N",
230 | "leyenda" => "",
231 | "producto" => $tusfacturas_sdk_entidades->producto(
232 | array(
233 | "descripcion" => "HONORARIOS",
234 | "unidad_bulto" => 1,
235 | "lista_precios" => "Lista general",
236 | "codigo" => "HON",
237 | "precio_unitario_sin_iva" => 100,
238 | "alicuota" => 21,
239 | "unidad_medida" => 7
240 | )
241 | )
242 | )
243 | );
244 |
245 | // totales
246 |
247 | $comprobante_data["total"] = 121;
248 |
249 |
250 |
251 | // ===== Envio a generar el comprobante =====
252 |
253 | $response = $tusfacturas_sdk_obj->comprobante_nuevo(
254 | $tusfacturas_sdk_entidades->comprobante($comprobante_data) ,
255 | $tusfacturas_sdk_entidades->comprobante_cliente($cliente_data)
256 | );
257 |
258 |
259 |
260 |
261 | // ===== Controlo si hay error =====
262 |
263 | if (!$tusfacturas_sdk_obj->hay_error($response)) {
264 | echo "
265 | Comprobante generado correctamente:
266 | CAE: ".$response->cae. " (Vencimiento: ".$response->vencimiento_cae. " )
267 | Factura PDF: ".$response->comprobante_pdf_url. "
268 |
";
269 |
270 | }else{
271 | echo "
272 | Se han encontrado los siguientes errores:
273 | ".implode("
",$response->errores). "
274 |
";
275 | }
276 |
277 |
278 |
279 | ```
280 |
281 | ### Generar Nuevo Comprobante de nota de crédito indicando periodo asociados:
282 | Documentación: https://developers.tusfacturas.app/api-factura-electronica-afip-facturacion-nuevo-comprobante
283 |
284 | ```
285 | $tusfacturas_sdk_obj = new tusfacturas_sdk();
286 | $tusfacturas_sdk_entidades = new tusfacturas_sdk_entidades();
287 | $tusfacturas_sdk_obj->set_keys( TUSFACTURAS_APIKEY, TUSFACTURAS_APITOKEN, TUSFACTURAS_USERTOKEN );
288 |
289 |
290 |
291 | // ===== Datos del cliente =======
292 |
293 | $cliente_data = array(
294 | "documento_tipo" => "DNI",
295 | "razon_social" => "JUAN PEREZ NIO",
296 | "email" => "email@email.com",
297 | "domicilio" => "Avenida Siempreviva 742",
298 | "documento_nro" => "12345678",
299 | "provincia" => 1,
300 | "envia_por_mail" => "S",
301 | "condicion_pago" => 0,
302 | "condicion_iva" => "CF"
303 | );
304 |
305 |
306 | // ===== Datos del comprobante a generar =====
307 |
308 | // Cabecera de la nota de credito
309 |
310 | $comprobante_data["tipo"] = "NOTA DE CREDITO B";
311 | $comprobante_data["punto_venta"] = "0001";
312 | $comprobante_data["fecha"] = date("d/m/Y");
313 | $comprobante_data["numero"] = 220;
314 | // (Existen otros datos opcionales a enviar, consultar la documentación)
315 |
316 | // comprobantes asociados por periodo
317 | $comprobante_data["comprobantes_asociados_periodo"] = $tusfacturas_sdk_entidades->comprobantes_asociados_periodo('03/03/2021', '10/03/2021' ) ;
318 |
319 |
320 |
321 | // Armo el detalle de los conceptos
322 |
323 | $comprobante_data["detalle"] = array();
324 | $comprobante_data["detalle"][] = $tusfacturas_sdk_entidades->comprobante_detalle_item(
325 | array (
326 | "cantidad" => 1,
327 | "afecta_stock" => "N",
328 | "leyenda" => "",
329 | "producto" => $tusfacturas_sdk_entidades->producto(
330 | array(
331 | "descripcion" => "HONORARIOS",
332 | "unidad_bulto" => 1,
333 | "lista_precios" => "Lista general",
334 | "codigo" => "HON",
335 | "precio_unitario_sin_iva" => 100,
336 | "alicuota" => 21,
337 | "unidad_medida" => 7
338 | )
339 | )
340 | )
341 | );
342 |
343 | // totales
344 |
345 | $comprobante_data["total"] = 121;
346 |
347 |
348 |
349 | // ===== Envio a generar el comprobante =====
350 |
351 | $response = $tusfacturas_sdk_obj->comprobante_nuevo(
352 | $tusfacturas_sdk_entidades->comprobante($comprobante_data) ,
353 | $tusfacturas_sdk_entidades->comprobante_cliente($cliente_data)
354 | );
355 |
356 |
357 |
358 |
359 | // ===== Controlo si hay error =====
360 |
361 | if (!$tusfacturas_sdk_obj->hay_error($response)) {
362 | echo "
363 | Comprobante generado correctamente:
364 | CAE: ".$response->cae. " (Vencimiento: ".$response->vencimiento_cae. " )
365 | Factura PDF: ".$response->comprobante_pdf_url. "
366 |
";
367 |
368 | }else{
369 | echo "
370 | Se han encontrado los siguientes errores:
371 | ".implode("
",$response->errores). "
372 |
";
373 | }
374 |
375 |
376 |
377 | ```
378 |
--------------------------------------------------------------------------------
/php/tusfacturas_sdk.php:
--------------------------------------------------------------------------------
1 | set_keys( TUSFACTURAS_APIKEY, TUSFACTURAS_APITOKEN, TUSFACTURAS_USERTOKEN );
36 | $tusfacturas_sdk_obj->estado_servicios();
37 |
38 | *
39 | * =======================================================================
40 | */
41 |
42 | const TUSFACTURAS_API_VERSION = 2;
43 | const TUSFACTURAS_PATH = "https://www.tusfacturas.app/app/api/v".TUSFACTURAS_API_VERSION."/";
44 |
45 |
46 | include "tusfacturas_sdk_entidades.php";
47 |
48 |
49 | class tusfacturas_sdk {
50 |
51 | var $apitoken; // Tus credenciales de acceso. Registrate en tusfacturas.app y obtenelas desde Mis Cuits
52 | var $apikey; // Tus credenciales de acceso. Registrate en tusfacturas.app y obtenelas desde Mis Cuits
53 | var $usertoken; // Tus credenciales de acceso. Registrate en tusfacturas.app y obtenelas desde Mis Cuits
54 |
55 | var $json_data; // JSON a enviar a la API. (Sirve por si luego quiero guardar lo enviado a modo de log)
56 | var $json_respuesta; // JSON devuelto por la API. (Sirve por si luego quiero guardar lo enviado a modo de log)
57 |
58 | var $debug; // true / false para ir recibiendo dumps
59 |
60 |
61 | function __construct() {
62 |
63 | $this->json_data = "";
64 | $this->json_respuesta = "";
65 | $this->debug = false;
66 |
67 | }
68 |
69 | /****************************************************************************************************************
70 | *
71 | * FUNCIONALIDAD:
72 | * ---------------
73 | * Configura las KEYS de tu cuenta
74 | * PARAMETROS:
75 | * ------------
76 | * @param string $apikey // Tus credenciales de acceso. Registrate en tusfacturas.app y obtenelas desde Mis Cuits
77 | * @param string $apitoken // Tus credenciales de acceso. Registrate en tusfacturas.app y obtenelas desde Mis Cuits
78 | * @param string $usertoken // Tus credenciales de acceso. Registrate en tusfacturas.app y obtenelas desde Mis Cuits
79 | *
80 | * RESPUESTA:
81 | none
82 | *
83 | * @last-update 2018-06-18
84 | *************************************************************************************************************** */
85 |
86 | function set_keys($apikey,$apitoken,$usertoken) {
87 | $this->apikey = $apikey;
88 | $this->apitoken = $apitoken;
89 | $this->usertoken = $usertoken;
90 | }
91 |
92 | /****************************************************************************************************************
93 | *
94 | * FUNCIONALIDAD:
95 | * ---------------
96 | * Mediante éste método podrás generar comprobantes de venta o de compra.
97 | *
98 | * DOCUMENTACION:
99 | * ---------------
100 | * https://developers.tusfacturas.app/api-factura-electronica-afip/facturacion-nuevo-comprobante
101 | *
102 | * PARAMETROS:
103 | * ------------
104 | * @param objeto $comprobante_data segun tusfacturas_sdk_entidades->comprobante();
105 | * @param objeto $cliente_data segun tusfacturas_sdk_entidades->comprobante_cliente();
106 | *
107 | * RESPUESTA:
108 | @return object $resultado
109 | *
110 | * @last-update 2018-06-18
111 | *************************************************************************************************************** */
112 |
113 |
114 | function comprobante_nuevo($comprobante_data,$cliente_data) {
115 |
116 | // preparo la info a enviar
117 | $data = $this->request_preparar($comprobante_data,$cliente_data) ;
118 |
119 | // Si habilito debug, dump del array
120 | if ($this->debug) $this->dump($data);
121 |
122 | // Encodeo la data
123 | $this->json_data = json_encode ($data);
124 |
125 | // Do API CALL
126 | $resultado = $this->api_call("facturacion/nuevo");
127 |
128 | return($resultado);
129 | }
130 |
131 |
132 | /****************************************************************************************************************
133 | *
134 | * FUNCIONALIDAD:
135 | * ---------------
136 | * Mediante éste método me prepara el request a enviar
137 | *
138 | * DOCUMENTACION:
139 | * ---------------
140 | * https://developers.tusfacturas.app/api-factura-electronica-afip/facturacion-nuevo-comprobante
141 | *
142 | * PARAMETROS:
143 | * ------------
144 | * @param objeto $comprobante_data segun tusfacturas_sdk_entidades->comprobante();
145 | * @param objeto $cliente_data segun tusfacturas_sdk_entidades->comprobante_cliente();
146 | *
147 | * RESPUESTA:
148 | @return object $data
149 | *
150 | * @last-update 2020-04-20
151 | *************************************************************************************************************** */
152 |
153 |
154 | function request_preparar($comprobante_data,$cliente_data) {
155 |
156 | // Credenciales de acceso
157 |
158 | $data["apitoken"] = $this->apitoken;
159 | $data["apikey"] = $this->apikey;
160 | $data["usertoken"] = $this->usertoken;
161 |
162 | // Datos del comprobante
163 | $data["comprobante"]= $comprobante_data;
164 | $data["cliente"] = $cliente_data;
165 |
166 |
167 | return($data);
168 | }
169 |
170 |
171 |
172 |
173 | /****************************************************************************************************************
174 | *
175 | * FUNCIONALIDAD:
176 | * ---------------
177 | * Mediante éste método podrás generar comprobantes de venta o de compra.
178 | *
179 | * DOCUMENTACION:
180 | * ---------------
181 | * https://developers.tusfacturas.app/api-factura-electronica-afip/facturacion-nuevo-comprobante
182 | *
183 | * PARAMETROS:
184 | * ------------
185 | * @param objeto $requests_preparados un array con la info que se requiere para generar un comprobante
186 | * se debe iterar el metodo "request_preparar"
187 | * tantas veces como sea necesario para generar cada request
188 | * ->request_preparar($comprobante_data,$cliente_data) ;
189 |
190 |
191 | *
192 | * RESPUESTA:
193 | @return object $resultado
194 | *
195 | * @last-update 2020-04-04
196 | *************************************************************************************************************** */
197 |
198 |
199 | function comprobante_lotes($requests_preparados) {
200 |
201 | // Credenciales de acceso
202 |
203 | $data["apitoken"] = $this->apitoken;
204 | $data["apikey"] = $this->apikey;
205 | $data["usertoken"] = $this->usertoken;
206 |
207 | // Datos del comprobante
208 | $data["requests"] = $requests_preparados;
209 |
210 | // Si habilito debug, dump del array
211 | if ($this->debug) $this->dump($data);
212 |
213 | // Encodeo la data
214 | $this->json_data = json_encode ($data);
215 |
216 | // Do API CALL
217 | $resultado = $this->api_call("facturacion/lotes");
218 |
219 | return($resultado);
220 | }
221 |
222 | /****************************************************************************************************************
223 | *
224 | * FUNCIONALIDAD:
225 | * Mediante éste método podrás consultar si los servicios de AFIP se encuentran funcionando
226 | * correctamente y/o si nuestra plataforma tiene que notificarte algún evento.
227 | *
228 | * DOCUMENTACION:
229 | * https://developers.tusfacturas.app/api-factura-electronica-afip/estado-de-los-servicios-afip
230 | *
231 | * PARAMETROS:
232 | * ninguno
233 | * RESPUESTA:
234 | * @return object $resultado
235 | *
236 | * @last-update 2018-06-18
237 | *************************************************************************************************************** */
238 |
239 |
240 | function estado_servicios() {
241 |
242 | // Credenciales de acceso
243 |
244 | $data["apitoken"] = $this->apitoken;
245 | $data["apikey"] = $this->apikey;
246 | $data["usertoken"] = $this->usertoken;
247 |
248 | // Si habilito debug, dump del array
249 | if ($this->debug) $this->dump($data);
250 |
251 | // Encodeo la data
252 | $this->json_data = json_encode ($data);
253 |
254 | // Do API CALL
255 | $resultado = $this->api_call("estado_servicios/alertas");
256 |
257 | return($resultado);
258 | }
259 |
260 |
261 |
262 | /****************************************************************************************************************
263 | *
264 | * FUNCIONALIDAD:
265 | * Mediante éste método podrás Consultar CUIT en constancia de inscripcióno
266 | *
267 | * DOCUMENTACION:
268 | * https://developers.tusfacturas.app/api-factura-electronica-afip-clientes-consultar-cuit-en-constancia-de-inscripcion
269 | *
270 | * PARAMETROS:
271 | * Numero de documento del cliente a buscar
272 | * RESPUESTA:
273 | * @return object $resultado
274 | *
275 | * @last-update 2021-07-21
276 | *************************************************************************************************************** */
277 |
278 |
279 | function clientes_afip_info($documento_nro) {
280 |
281 | // Credenciales de acceso
282 |
283 | $data["apitoken"] = $this->apitoken;
284 | $data["apikey"] = $this->apikey;
285 | $data["usertoken"] = $this->usertoken;
286 |
287 | // Datos del cliente a buscar
288 | $data["cliente"] = array ("documento_tipo" => 'CUIT',
289 | "documento_nro" => $documento_nro) ;
290 |
291 |
292 | // Si habilito debug, dump del array
293 | if ($this->debug) $this->dump($data);
294 |
295 | // Encodeo la data
296 | $this->json_data = json_encode ($data);
297 |
298 | // Do API CALL
299 | $resultado = $this->api_call("clientes/afip-info");
300 |
301 | return($resultado);
302 | }
303 |
304 |
305 |
306 | /****************************************************************************************************************
307 | *
308 | * FUNCIONALIDAD:
309 | * Mediante éste método podrás consultar la próxima numeración de un tipo de comprobante.
310 | *
311 | * DOCUMENTACION:
312 | * https://developers.tusfacturas.app/api-factura-electronica-afip/consultar-numeracion-de-comprobantes.
313 | *
314 | * PARAMETROS:
315 | * @param object $comprobante Un array formado de la siguiente manera:
316 | *
317 | * $comprobante["tipo"] = Segun tabla referencia: https://developers.tusfacturas.app/api-factura-electronica-afip/tablas-de-referencia#tipos-de-comprobantes
318 | * $comprobante["operacion"] = "V" o "C" segun corresponda para ventas o compras
319 | * $comprobante["punto_venta"] = El punto de venta asociado a tu CUIT
320 | * RESPUESTA:
321 | * @return object $resultado
322 | *
323 | * @last-update 2018-06-18
324 | *************************************************************************************************************** */
325 |
326 |
327 | function numeracion($comprobante) {
328 |
329 | // Credenciales de acceso
330 |
331 | $data["apitoken"] = $this->apitoken;
332 | $data["apikey"] = $this->apikey;
333 | $data["usertoken"] = $this->usertoken;
334 | $data["comprobante"]= $comprobante;
335 |
336 | // Si habilito debug, dump del array
337 | if ($this->debug) $this->dump($data);
338 |
339 | // Encodeo la data
340 | $this->json_data = json_encode ($data);
341 |
342 | // Do API CALL
343 | $resultado = $this->api_call("facturacion/numeracion");
344 |
345 | return($resultado);
346 | }
347 |
348 |
349 | /****************************************************************************************************************
350 | *
351 | * FUNCIONALIDAD:
352 | * Determina si hay error o no
353 | *
354 | * PARAMETROS:
355 | * @param object $resultado
356 | *
357 | * RESPUESTA:
358 | * @return boolean true/false
359 | *
360 | * @last-update 2018-06-19
361 | *************************************************************************************************************** */
362 |
363 |
364 | function hay_error($resultado) {
365 |
366 | return( $resultado->error == "S" ? true : false );
367 |
368 | }
369 |
370 | /****************************************************************************************************************
371 | *
372 | * FUNCIONALIDAD:
373 | * hace un dump del array
374 | *
375 | * PARAMETROS:
376 | * @param array $data
377 | *
378 | * RESPUESTA:
379 | * none
380 | *
381 | * @last-update 2018-06-19
382 | *************************************************************************************************************** */
383 |
384 |
385 | function dump($data) {
386 |
387 | echo "--- TUSFACTURAS SDK --- DUMP ----
"; print_r($data); echo "
--- TUSFACTURAS SDK --- DUMP ----
";
388 |
389 | }
390 |
391 |
392 |
393 |
394 | /****************************************************************************************************************
395 | *
396 | * FUNCIONALIDAD:
397 | * Mediante éste método se ejecutaran las llamdas en TusFacturas
398 | *
399 | * PARAMETROS:
400 | *
401 | * @param JSON $json_data El JSON a enviar con la informacion
402 | * @param string $metodo El metodo que voy a ejecutar
403 | *
404 | * RESPUESTA:
405 | * @return object $resultado El resultado en formato JSON devuelto por la plataforma
406 | *
407 | * @last-update 2018-06-18
408 | *************************************************************************************************************** */
409 |
410 | function api_call($metodo) {
411 |
412 | if ($this->json_data === null) { // ERROR DE ENCODING
413 |
414 | $resultado["error"] = "S";
415 | $resultado["errores"][] = utf8_encode("Existian errores de formato en el JSON enviado, que impedian la ejecucion del metodo: ".$metodo) ;
416 |
417 | }else{ // FORMATO OK
418 |
419 | // open url
420 | $url = TUSFACTURAS_PATH.$metodo;
421 | $ch = curl_init($url );
422 |
423 | // Data
424 | curl_setopt( $ch, CURLOPT_POSTFIELDS, $this->json_data );
425 | curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
426 | curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
427 |
428 |
429 | // Si habilito debug
430 | if ($this->debug) {
431 | echo "CURL: ".$url."
432 | DATA:
".$this->json_data."
";
433 | }
434 |
435 |
436 | // Capturo la respuesta
437 | $this->json_respuesta = curl_exec($ch);
438 |
439 | // Si habilito debug
440 | if ($this->debug) {
441 | echo "RESPONSE: ".$this->json_respuesta."
";
442 | }
443 |
444 | $resultado = json_decode($this->json_respuesta);
445 |
446 | // Cierro curl
447 | curl_close($ch);
448 | }
449 |
450 | return($resultado);
451 |
452 | }
453 |
454 |
455 | } // end of class
456 |
457 |
458 |
459 | ?>
460 |
--------------------------------------------------------------------------------
/php/tusfacturas_sdk_entidades.php:
--------------------------------------------------------------------------------
1 | Estructura de "RG Especiales" (solo según corresponda)".
79 |
80 | bonificacion Campo numérico con 2 decimales. separador de decimales: punto. Indica el valor aplicado en concepto de bonificación sin IVA Ejemplo: 12.67. Tener en cuenta para el cálculo que la bonificación se aplica sobre el primer subtotal SIN IVA y se lo gravará con el importe de IVA que le corresponda.
81 | leyenda_gral Campo alfanumérico. Longitud máxima 255 caracteres. Contenido opcional. Es una leyenda general que saldrá impresa en el bloque central de productos del comprobante Ejemplo: Aplica plan 12 cuotas sin interes.
82 | comentario: Campo alfanumerico, opcional. Longitud máxima: 255 caracteres. Éste campo no saldrá impreso en la factura.
83 |
84 | impuestos_internos_iva Campo numérico con 2 decimales. separador de decimales: punto. Indica el valor monetario de los impuestos internos aplicados Ejemplo: 42.67
85 | impuestos_internos_base Campo numérico con 2 decimales. separador de decimales: punto. Indica el valor monetario de la base computada para impuestos internos realizada Ejemplo: 42.67
86 | impuestos_internos_alicuota Campo numérico con 2 decimales. separador de decimales: punto. Indica la alicuota aplicada como impuestos internos Ejemplo: 42.67
87 |
88 | comprobantes_asociados Detalle con la lista de comprobantes asociados a una ND o NC.
89 | comprobantes_asociados_periodo Comprobantes asociados por periodo relacionados con una ND o NC.
90 | datos_informativos Array con info adicional de caracter informativo
91 | pagos un detalle de los pagos que recibe (opcional)
92 | tributos un detalle de los impuestos y percepciones que recibe (opcional)
93 |
94 | total Campo numérico con 2 decimales. separador de decimales: punto. Indica el valor monetario de la sumatoria de conceptos incluyendo IVA e impuestos. Ejemplo: 12452.67
95 | *
96 | * RESPUESTA:
97 | * @return object $comprobante El array requerido para generar un comprobante.
98 | *
99 | * @last-update 2025-02-11
100 | *************************************************************** */
101 |
102 |
103 | function comprobante($comprobante_data) {
104 |
105 |
106 | // Cabecera del comprobante
107 | $comprobante = array();
108 |
109 | $comprobante["tipo"] = $comprobante_data["tipo"];
110 | $comprobante["operacion"] = (trim($comprobante_data["operacion"]) == '' ? "V" : $comprobante_data["operacion"]);
111 | $comprobante["punto_venta"] = (intval($comprobante_data["punto_venta"]) == 0 ? 1 : $comprobante_data["punto_venta"]);
112 | $comprobante["fecha"] = $comprobante_data["fecha"];
113 | $comprobante["idioma"] = (trim($comprobante_data["idioma"]) == '' ? 1 : $comprobante_data["idioma"]);
114 | $comprobante["moneda"] = (trim($comprobante_data["moneda"]) == '' ? "PES" : $comprobante_data["moneda"]);
115 | $comprobante["cotizacion"] = (intval($comprobante_data["cotizacion"]) == 0 ? 1 : $comprobante_data["cotizacion"]);
116 | $comprobante["numero"] = (trim($comprobante_data["numero"]) == '' ? 0 : $comprobante_data["numero"]);
117 | $comprobante["periodo_facturado_desde"] = $comprobante_data["periodo_facturado_desde"];
118 | $comprobante["periodo_facturado_hasta"] = $comprobante_data["periodo_facturado_hasta"];
119 | $comprobante["vencimiento"] = $comprobante_data["vencimiento"];
120 | $comprobante["rubro"] = utf8_encode(trim($comprobante_data["rubro"]) == '' ? "Deudores Varios" : $comprobante_data["rubro"]);
121 | $comprobante["rubro_grupo_contable"] = utf8_encode (trim($comprobante_data["rubro_grupo_contable"]) == '' ? "Ventas" : $comprobante_data["rubro_grupo_contable"]);
122 | $comprobante["external_reference"] = $comprobante_data["external_reference"];
123 |
124 | // Detalle de comprobante
125 | $comprobante["detalle"] = $comprobante_data["detalle"];
126 |
127 | // Comprobantes asociados
128 | if (!isset($comprobante_data["comprobantes_asociados"])) $comprobante_data["comprobantes_asociados"] = array();
129 | if (!isset($comprobante_data["comprobantes_asociados_periodo"])) $comprobante_data["comprobantes_asociados_periodo"] = array("fecha_desde" => "", "fecha_hasta" => "");
130 | $comprobante["comprobantes_asociados"] = $comprobante_data["comprobantes_asociados"];
131 | $comprobante["comprobantes_asociados_periodo"] = $comprobante_data["comprobantes_asociados_periodo"];
132 |
133 | // FEX
134 | if (isset($comprobante_data["fex"])) $comprobante["fex"] = $comprobante_data["fex"];
135 |
136 | // RG Especiales
137 | if (isset($comprobante_data["rg_especiales"])) $comprobante["rg_especiales"] = $comprobante_data["rg_especiales"];
138 |
139 | // Datos informativos
140 | $comprobante["datos_informativos"] = array('paga_misma_moneda' => 'N');
141 | if (isset($comprobante_data["datos_informativos"])) $comprobante["datos_informativos"] = $comprobante_data["datos_informativos"];
142 |
143 | // ABONOS
144 | $comprobante["abono"] = $comprobante_data["abono"] ;
145 | $comprobante["abono_frecuencia"] = ( intval($comprobante_data["abono_frecuencia"]) == 0 ? 1 : $comprobante_data["abono_frecuencia"] ) ;
146 | $comprobante["abono_hasta"] = ( trim($comprobante_data["abono_hasta"]) == '' ? date('m/Y', strtotime('+1 month')) : (strlen($comprobante_data["abono_hasta"]) == 10 ? substr($comprobante_data["abono_hasta"],3, 7) : $comprobante_data["abono_hasta"] ) );
147 | $comprobante["abono_actualiza_precios"] = $comprobante_data["abono_actualiza_precios"] ;
148 |
149 | // TRIBUTOS
150 | if (isset($comprobante_data["tributos"])) $comprobante["tributos"] = $comprobante_data["tributos"];
151 |
152 | // PAGOS
153 | if (isset($comprobante_data["pagos"])) $comprobante["pagos"] = $comprobante_data["pagos"];
154 |
155 | // totales
156 | $comprobante["bonificacion"] = doubleval($comprobante_data["bonificacion"]);
157 | $comprobante["leyenda_gral"] = utf8_encode( $comprobante_data["leyenda_gral"]);
158 | $comprobante["comentario"] = utf8_encode($comprobante_data["comentario"]);
159 | $comprobante["impuestos_internos"] = doubleval($comprobante_data["impuestos_internos"]);
160 | $comprobante["impuestos_internos_base"] = doubleval($comprobante_data["impuestos_internos_base"]);
161 | $comprobante["impuestos_internos_alicuota"] = doubleval($comprobante_data["impuestos_internos_alicuota"]);
162 | $comprobante["total"] = round(doubleval($comprobante_data["total"]),3);
163 |
164 |
165 | return($comprobante);
166 |
167 | }
168 |
169 | /**************************************************************
170 | *
171 | * FUNCIONALIDAD: Genera elobjeto "cliente" requerido para la
172 | * creacion de un nuevo comprobante
173 | *
174 | * DOCUMENTACION:
175 | * https://developers.tusfacturas.app/api-factura-electronica-afip/facturacion-nuevo-comprobante#estructura-de-cliente
176 | *
177 | * PARAMETROS:
178 | *
179 | * @param object $cliente_data Un array formado de la siguiente manera:
180 |
181 | documento_tipo: Valores Permitidos: CUIT , DNI
182 | documento_nro: Campo numérico, sin puntos ni guiones.
183 | razon_social : Campo alfanumérico. Longitud máxima 255 caracteres.
184 | email: Campo alfanumérico. Longitud máxima 255 caracteres.
185 | domicilio: Campo alfanumérico. Longitud máxima 255 caracteres.
186 | provincia: Campo numérico según tabla de referencia(*).
187 | rg5329 Campo alfanumérico de 1 posición. Valores posibles: "S" (si), "N" (no) Ejemplo: S
188 | envia_por_mail: Indica Si/No para el envio del comprobante por e-mail. Valores Permitidos: S , N
189 | condicion_pago: Campo numérico que indica la cantidad de dias en los cuales vence el plazo de pago. Valores Permitidos: 0,30,60,90
190 | condicion_pago_otra: Campo alfabetico que indica la descripcion de la nueva condicion de pago.
191 | condicion_iva: Campo numérico que indica la condicion de iva, según tabla de referencia Condiciones ante el IVA(**).
192 | condicion_iva_operacion: Campo numérico que indica la condicion de iva en que el receptor concreta la operacion, según tabla de referencia Condiciones ante el IVA(**).
193 | *
194 | * RESPUESTA:
195 | * @return object $cliente El array requerido para generar un comprobante.
196 | *
197 | * @last-update 2025-02-11
198 | *************************************************************** */
199 |
200 |
201 | function comprobante_cliente($parametros) {
202 |
203 | $cliente = array(
204 | "documento_tipo" => (trim($parametros["documento_tipo"]) == '' ? "DNI" : $parametros["documento_tipo"] ) ,
205 | "razon_social" => utf8_encode($parametros["razon_social"]),
206 | "nombre_fantasia" => utf8_encode($parametros["nombre_fantasia"]),
207 | "email" => $parametros["email"],
208 | "codigo" => trim($parametros["codigo"]),
209 | "domicilio" => utf8_encode($parametros["domicilio"]),
210 | "rg5329" => (isset($parametros["rg5329"]) ? $parametros["rg5329"] : "N"),
211 | "documento_nro" => $parametros["documento_nro"],
212 | "provincia" => (intval($parametros["provincia"]) != 0 ? $parametros["provincia"] : $this->tabla_referencia_provincia($parametros["provincia"]) ),
213 | "envia_por_mail" => (trim($parametros["envia_por_mail"])!= '' ? $parametros["envia_por_mail"] : "N"),
214 | "condicion_pago" => intval($parametros["condicion_pago"]),
215 | "condicion_pago_otra" => intval($parametros["condicion_pago_otra"]),
216 | "condicion_iva" => $parametros["condicion_iva"] ,
217 | "condicion_iva_operacion" => (isset( $parametros["condicion_iva_operacion"] ) ? $parametros["condicion_iva_operacion"] : $parametros["condicion_iva"])
218 | );
219 |
220 | return($cliente);
221 |
222 |
223 | }
224 |
225 | /**************************************************************
226 | *
227 | * FUNCIONALIDAD: Genera la entidad "item" de concepto para el detalle de un comprobante
228 | *
229 | * La entidad item, es parte del detalle de conceptos del comprobante
230 | *
231 | * DOCUMENTACION:
232 | * https://developers.tusfacturas.app/api-factura-electronica-afip/facturacion-nuevo-comprobante#estructura-de-detalle-de-conceptos
233 | *
234 | * PARAMETROS:
235 | *
236 | * @param object $parametros Todos los datos requeridos para armar el producto:
237 | *
238 | cantidad Campo numérico con 2 decimales. Separador de decimales: punto. Ejemplo: 1.50
239 | afecta_stock Campo alfanumérico de 1 posición. Valores posibles: "S" (si), "N" (no) Ejemplo: S
240 | producto Según estructura de producto
241 | actualiza_precio Campo alfanumérico de 1 posición. Valores posibles: "S" (si), "N" (no) Ejemplo: S
242 | leyenda Campo alfanumérico. Longitud máxima 100 caracteres. Contenido opcional. Será una descripción que acompañe al producto. Ejemplo: Blanca, cepillada
243 | * bonificacion_porcentaje Campo numérico con 2 decimales. Separador de decimales: punto. Ejemplo: 1.50
244 | *
245 | * RESPUESTA:
246 | * @return object $producto El array requerido
247 | *
248 | * @last-update 2023-05-13
249 | *************************************************************** */
250 |
251 |
252 | function comprobante_detalle_item($parametros) {
253 |
254 | if (intval($parametros["cantidad"])> 0) {
255 |
256 | $item = array(
257 | "cantidad" => $parametros["cantidad"],
258 | "bonificacion_porcentaje" => $parametros["bonificacion_porcentaje"],
259 | "afecta_stock" => (trim($parametros["afecta_stock"]) != '' ? $parametros["afecta_stock"] : "N"),
260 | "leyenda" => utf8_encode( $parametros["leyenda"]),
261 | "producto" => $parametros["producto"],
262 | "actualiza_precio" => (trim($parametros["actualiza_precio"]) == '' ? "N" : $parametros["actualiza_precio"])
263 | );
264 |
265 | }else{
266 | $item = array(
267 | "cantidad" => 0,
268 | "afecta_stock" => "N",
269 | "bonificacion_porcentaje" => 0,
270 | "leyenda" => "",
271 | "actualiza_precio" => "N" ,
272 | "producto" => array()
273 | );
274 | }
275 |
276 | return($item);
277 |
278 | }
279 |
280 |
281 |
282 | /**************************************************************
283 | *
284 | * FUNCIONALIDAD: Genera la entidad "producto" requerida para
285 | * crear un nuevo comprobante.
286 | *
287 | * La entidad producto, es parte de cada item
288 | * del detalle de conceptos del comprobante
289 | *
290 | * DOCUMENTACION:
291 | * https://developers.tusfacturas.app/api-factura-electronica-afip/facturacion-nuevo-comprobante#estructura-de-concepto-producto
292 | *
293 | * PARAMETROS:
294 | *
295 | * @param object $parametros Todos los datos requeridos para armar el producto:
296 | *
297 | * descripcion Campo alfanumérico. Longitud máxima 255 caracteres. Ejemplo: Papa blanca
298 | unidad_bulto Campo numérico entero. Indica la cantidad de unidades que componen un bulto. Ejemplo: 12
299 | lista_precios Campo alfanumérico. Longitud máxima 255 caracteres. Nombre de la lista de precios a la cual pertenece. Ejemplo: Verdura Orgánica
300 | codigo Campo alfanumérico. Longitud máxima 10 caracteres. campo Opcional Ejemplo: ABX780
301 | precio_unitario_sin_iva Campo numérico con 2 decimales. separador de decimales: punto Ejemplo: 645.67
302 | alicuota Indica la alicuota de IVA con la que grava ese producto. Valores Permitidos: 21 , 10.5 Ejemplo: 10.5
303 | unidad_medida Campo numérico que indica la unidad de medida, según tabla de referencia Unidades de Medida(**). Ejemplo: 7
304 | actualiza_precio Campo alfanumérico de 1 posición. Valores posibles: "S" (si), "N" (no) Ejemplo: S
305 | impuestos_internos_alicuota Indica la alicuota de Impuestos internos con la que grava ese producto. Ejemplo: 10.5
306 | rg5329 Campo alfanumérico de 1 posición. Valores posibles: "S" (si), "N" (no) Ejemplo: S
307 | *
308 | * RESPUESTA:
309 | * @return object $producto El array requerido
310 | *
311 | * @last-update 2023-05-13
312 | *************************************************************** */
313 |
314 |
315 | function producto($parametros) {
316 |
317 |
318 | $producto = array(
319 | "codigo" => utf8_encode( $parametros["codigo"]) ,
320 | "descripcion" => utf8_encode( $parametros["descripcion"]),
321 | "unidad_bulto" => ( intval($parametros["unidad_bulto"]) != 0 ? $parametros["unidad_bulto"] : 1),
322 | "lista_precios" => utf8_encode(trim($parametros["lista_precios"]) != '' ? $parametros["lista_precios"] : 'Lista general'),
323 | "precio_unitario_sin_iva" => round($parametros["precio_unitario_sin_iva"] ,3) ,
324 | "alicuota" => doubleval($this->tabla_referencia_alicuota($parametros["alicuota"])),
325 | "impuestos_internos_alicuota" => doubleval($parametros["impuestos_internos_alicuota"]),
326 | "actualiza_precio" => $parametros["actualiza_precio"],
327 | "rg5329" => (isset($parametros["rg5329"]) ? $parametros["rg5329"] : "N"),
328 | "unidad_medida" => ( intval($parametros["unidad_medida"]) != 0 ? $parametros["unidad_medida"] : 7)
329 | );
330 |
331 | return($producto);
332 |
333 | }
334 |
335 |
336 |
337 | /**************************************************************
338 | *
339 | * FUNCIONALIDAD: Me devuelve la provincia que corresponde
340 | * segun tabla de referencia
341 | *
342 | * DOCUMENTACION:
343 | * https://developers.tusfacturas.app/tablas-de-referencia#provincias
344 | *
345 | * PARAMETROS:
346 | *
347 | * @param string el nombre de la provincia
348 | * RESPUESTA:
349 | * @return number el nro asociado a esa provincia
350 | *
351 | * @last-update 2020-04-12
352 | *************************************************************** */
353 |
354 | function tabla_referencia_provincia($provincia ) {
355 |
356 |
357 | switch(strtoupper(trim($provincia ))) {
358 | case "BUENOS AIRES":
359 | return 2;
360 | break;
361 | case "CATAMARCA":
362 | return 3;
363 | break;
364 | case "CHACO":
365 | return 4;
366 | break;
367 | case "CHUBUT":
368 | return 5;
369 | break;
370 | case "CIUDAD AUTONOMA DE BUENOS AIRES":
371 | return 1;
372 | break;
373 | case "CORDOBA":
374 | return 6;
375 | break;
376 | case "CORRIENTES":
377 | return 7;
378 | break;
379 | case "ENTRE RIOS":
380 | return 8;
381 | break;
382 | case "FORMOSA":
383 | return 9;
384 | break;
385 | case "JUJUY":
386 | return 10;
387 | break;
388 | case "LA PAMPA":
389 | return 11;
390 | break;
391 | case "LA RIOJA":
392 | return 12;
393 | break;
394 | case "MENDOZA":
395 | return 13;
396 | break;
397 | case "MISIONES":
398 | return 14;
399 | break;
400 | case "NEUQUEN":
401 | return 15;
402 | break;
403 | case "OTRO":
404 | return 25;
405 | break;
406 | case "RIO NEGRO":
407 | return 16;
408 | break;
409 | case "SALTA":
410 | return 17;
411 | break;
412 | case "SAN JUAN":
413 | return 18;
414 | break;
415 | case "SAN LUIS":
416 | return 19;
417 | break;
418 | case "SANTA CRUZ":
419 | return 20;
420 | break;
421 | case "SANTA FE":
422 | return 21;
423 | break;
424 | case "SANTIAGO DEL ESTERO":
425 | return 22;
426 | break;
427 | case "TIERRA DEL FUEGO":
428 | return 23;
429 | break;
430 | case "TUCUMAN":
431 | return 24;
432 | break;
433 |
434 | default:
435 | return 26;
436 |
437 | }
438 | }
439 |
440 |
441 | /**************************************************************
442 | *
443 | * FUNCIONALIDAD: Me devuelve el bloque de las rg especiales
444 | *
445 | * DOCUMENTACION:
446 | * https://developers.tusfacturas.app/api-factura-electronica-afip-facturacion-nuevo-comprobante#estructura-de-rg-especiales-solo-segun-corresponda
447 | *
448 | * PARAMETROS:
449 | *
450 | * @param string regimen Valores esperados según Tabla de Datos Opcionales para RG Especiales
451 | * @param array datos Lista de valores esperados según estructura definida en la funcion de rg_especiales_dato
452 | *
453 | *
454 | * RESPUESTA:
455 | * @return array bloque rg
456 | *
457 | * @last-update 2021-04-21
458 | *************************************************************** */
459 |
460 | function bloque_rg_especiales($regimen, $datos)
461 | {
462 | $rg_especiales = array();
463 | $rg_especiales["regimen"] = $regimen;
464 | $rg_especiales["datos"] = $datos;
465 |
466 | return $rg_especiales;
467 | }
468 |
469 |
470 |
471 | /**************************************************************
472 | *
473 | * FUNCIONALIDAD: Me devuelve el dato estructurado para el bloque de "datos" de las rg especiales
474 | *
475 | * DOCUMENTACION:
476 | * https://developers.tusfacturas.app/api-factura-electronica-afip-facturacion-nuevo-comprobante#estructura-de-rg-especiales-solo-segun-corresponda
477 | *
478 | * PARAMETROS:
479 | *
480 | * @param string valor informacion asociada al ID enviado. Ej ID 2101, valor: 12345678901234567
481 | * @param numeric id https://developers.tusfacturas.app/api-factura-electronica-afip-facturacion-nuevo-comprobante#estructura-de-rg-especiales-solo-segun-corresponda
482 | *
483 | *
484 | * RESPUESTA:
485 | * @return array bloque del dato en cuestion
486 | *
487 | * @last-update 2021-04-21
488 | *************************************************************** */
489 |
490 | function bloque_rg_especiales_dato($id, $valor)
491 | {
492 | $dato = array();
493 | $dato["id"] = $id;
494 | $dato["valor"] = $valor;
495 |
496 | return $dato;
497 | }
498 |
499 |
500 | /**************************************************************
501 | *
502 | * FUNCIONALIDAD: Me devuelve la alicuota que corresponde
503 | * segun tabla de referencia
504 | *
505 | * DOCUMENTACION:
506 | * https://developers.tusfacturas.app/tablas-de-referencia#alicuotas-de-iva
507 | *
508 | * PARAMETROS:
509 | *
510 | * @param string alicuota Indica la alicuota de IVA con la que grava ese producto.
511 | * Valores Permitidos: segun tabla de referencia https://developers.tusfacturas.app/tablas-de-referencia#alicuotas-de-iva
512 | *
513 | * RESPUESTA:
514 | * @return number alicuota
515 | *
516 | * @last-update 2020-04-12
517 | *************************************************************** */
518 |
519 | function tabla_referencia_alicuota($alicuota) {
520 |
521 | $alicuota = str_replace("%","",$alicuota);
522 |
523 | switch ($alicuota) {
524 | case "IVA EXENTO": case "EXENTO":
525 | return (-1);
526 | break;
527 | case "IVA NO GRAVADO": case "NO GRAVADO":
528 | return (-2);
529 | break;
530 | default:
531 | return doubleval($alicuota);
532 | break;
533 | }
534 | }
535 |
536 |
537 |
538 |
539 | /**************************************************************
540 | *
541 | * FUNCIONALIDAD: Crea un item para el bloque de comprobantes asociados x detalle
542 | *
543 | * DOCUMENTACION:
544 | * https://developers.tusfacturas.app/api-factura-electronica-afip-facturacion-nuevo-comprobante#estructura-de-comprobantes-asociados
545 | *
546 | * PARAMETROS:
547 | *
548 | * @param string $comprobante_fecha Fecha del comprobante que se asocia en formato dd/mm/aaaa
549 | * @param string $tipo_comprobante Valores Permitidos: segun tabla de referencia https://developers.tusfacturas.app/tablas-de-referencia#tipos-de-comprobantes
550 | * @param numerico $punto_venta Numero del punto de venta del comprobante que se asocia.
551 | * @param numerico $numero Numero del comprobante que se asocia.
552 | * @param numerico $cuit Numero de CUIT del emisor del comprobante que se asocia.
553 | *
554 | * RESPUESTA:
555 | * @return array con la estructura de cada item que compone el bloque de "comprobantes_asociados"
556 | *
557 | * @last-update 2023-03-23
558 | *************************************************************** */
559 |
560 | function comprobantes_asociados_detalle_item($comprobante_fecha, $tipo_comprobante, $punto_venta, $numero, $cuit) {
561 |
562 | $data["comprobante_fecha"] = $comprobante_fecha;
563 | $data["tipo_comprobante"] = $tipo_comprobante;
564 | $data["punto_venta"] = $punto_venta;
565 | $data["numero"] = $numero;
566 | $data["cuit"] = $cuit;
567 |
568 | return ($data);
569 | }
570 |
571 |
572 | /**************************************************************
573 | *
574 | * FUNCIONALIDAD: Crea un item para el bloque de comprobantes asociados x detalle
575 | *
576 | * DOCUMENTACION:
577 | * https://developers.tusfacturas.app/api-factura-electronica-afip-facturacion-nuevo-comprobante#estructura-de-comprobantes-asociados
578 | *
579 | * PARAMETROS:
580 | *
581 | * @param string $fecha_desde Fecha del periodo que se asocia en formato dd/mm/aaaa
582 | * @param string $fecha_hasta Fecha del periodo que se asocia en formato dd/mm/aaaa
583 | *
584 | * RESPUESTA:
585 | * @return array con la estructura de la informacion que compone el bloque "comprobantes_asociados_periodo"
586 | *
587 | * @last-update 2021-03-23
588 | *************************************************************** */
589 |
590 | function comprobantes_asociados_periodo($fecha_desde, $fecha_hasta) {
591 |
592 | $data["fecha_desde"] = $fecha_desde;
593 | $data["fecha_hasta"] = $fecha_hasta;
594 |
595 | return ($data);
596 | }
597 |
598 |
599 | }
600 |
601 |
602 | ?>
603 |
--------------------------------------------------------------------------------