Skip to content

Commit 172ebcb

Browse files
committed
facturas initial added+
1 parent e4985eb commit 172ebcb

10 files changed

Lines changed: 835 additions & 483 deletions

examples/main.ts

Lines changed: 75 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
import { FiscalapiClient, FiscalapiSettings, Person, Product, TaxFile } from '../src';
1+
import { DateTime } from 'luxon';
2+
import { FiscalapiClient, FiscalapiSettings, Invoice, Person, Product, TaxFile } from '../src';
23
import { inspect } from 'util';
34
inspect.defaultOptions.depth = null; // Deshabilitar la profundidad de inspección para objetos anidados la salida de la consola
45
inspect.defaultOptions.colors = true; // Habilitar colores para la salida de la consola
@@ -218,6 +219,79 @@ async function main() : Promise<void> {
218219

219220

220221

222+
// Listar facturas
223+
// const apiResponse = await client.invoices.getList(1, 2);
224+
// console.log('apiResponse:', apiResponse);
225+
226+
// Obtener factura por ID
227+
// const apiResponse = await client.invoices.getById("7a8cce85-1592-4e3d-9621-364c82d36091", true);
228+
// console.log('apiResponse:', apiResponse);
229+
230+
231+
232+
// Crear factura
233+
234+
const invoice: Invoice = {
235+
versionCode: "4.0",
236+
series: "F",
237+
date: DateTime.now().toFormat("yyyy-MM-dd'T'HH:mm:ss"),
238+
paymentFormCode: "01",
239+
paymentMethodCode: "PUE",
240+
currencyCode: "MXN",
241+
typeCode: "I",
242+
expeditionZipCode: "42501",
243+
exchangeRate: 1,
244+
exportCode: "01",
245+
issuer: {
246+
tin: "FUNK671228PH6",
247+
legalName: "KARLA FUENTE NOLASCO",
248+
taxRegimeCode: "621",
249+
taxCredentials: [
250+
{
251+
base64File: base64Cert,
252+
fileType: 0,
253+
password: password
254+
},
255+
{
256+
base64File: base64Key,
257+
fileType: 1,
258+
password: password
259+
}
260+
]
261+
},
262+
recipient: {
263+
tin: "EKU9003173C9",
264+
legalName: "ESCUELA KEMPER URGATE",
265+
zipCode: "42501",
266+
taxRegimeCode: "601",
267+
cfdiUseCode: "G01",
268+
email: "someone@somewhere.com"
269+
},
270+
items: [
271+
{
272+
itemCode: "01010101",
273+
quantity: 9.5,
274+
unitOfMeasurementCode: "E48",
275+
description: "Invoicing software as a service",
276+
unitPrice: 3587.75,
277+
taxObjectCode: "02",
278+
itemSku: "7506022301697",
279+
discount: 255.85,
280+
itemTaxes: [
281+
{
282+
taxCode: "002",
283+
taxTypeCode: "Tasa",
284+
taxRate: 0.160000,
285+
taxFlagCode: "T"
286+
}
287+
]
288+
}
289+
]
290+
};
291+
292+
const apiResponse = await client.invoices.create(invoice);
293+
console.log('apiResponse:', apiResponse);
294+
221295

222296
console.log('End Fiscalapi node...');
223297
} catch (error: unknown) {

src/abstractions/fiscalapi-service.interface.ts

Lines changed: 35 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { AxiosRequestConfig } from 'axios';
12
import { ApiResponse } from '../common/api-response';
23
import { BaseDto } from '../common/base-dto';
34
import { PagedList } from '../common/paged-list';
@@ -67,16 +68,43 @@ export interface IFiscalapiService<T extends BaseDto> {
6768
data?: TData
6869
): Promise<ApiResponse<TResult>>;
6970

71+
// /**
72+
// * Ejecuta una operación personalizada en el recurso sin necesidad de un ID específico
73+
// * @param {string} operation - Nombre de la operación
74+
// * @param {TData} data - Datos para la operación
75+
// * @returns {Promise<ApiResponse<TResult>>} Resultado de la operación
76+
// * @template TResult - Tipo de resultado esperado
77+
// * @template TData - Tipo de datos de entrada
78+
// */
79+
// executeOperation<TResult, TData>(
80+
// operation: string,
81+
// data: TData,
82+
// method: 'POST' | 'PUT' | 'DELETE'
83+
// ): Promise<ApiResponse<TResult>>;
84+
7085
/**
7186
* Ejecuta una operación personalizada en el recurso sin necesidad de un ID específico
72-
* @param {string} operation - Nombre de la operación
73-
* @param {TData} data - Datos para la operación
87+
* @param {OperationOptions<TData>} options - Opciones para la operación
7488
* @returns {Promise<ApiResponse<TResult>>} Resultado de la operación
7589
* @template TResult - Tipo de resultado esperado
7690
* @template TData - Tipo de datos de entrada
7791
*/
78-
executeOperation<TResult, TData>(
79-
operation: string,
80-
data: TData
81-
): Promise<ApiResponse<TResult>>;
82-
}
92+
executeOperation<TResult, TData = any>( options: OperationOptions<TData>): Promise<ApiResponse<TResult>>;
93+
}
94+
95+
/**
96+
* Opciones para ejecutar una operación
97+
* @template TData - Tipo de datos de entrada
98+
*/
99+
export type OperationOptions<TData = any> = {
100+
/** Ruta o nombre de la operación */
101+
path: string;
102+
/** Datos para la operación (opcional) */
103+
data?: TData;
104+
/** Parámetros de consulta (opcional) */
105+
queryParams?: Record<string, string>;
106+
/** Método HTTP a utilizar */
107+
method?: 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE';
108+
/** Configuración adicional para Axios (opcional) */
109+
config?: AxiosRequestConfig;
110+
}

src/abstractions/invoice-service.interface.ts

Lines changed: 24 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,9 @@ import {
55
CancelInvoiceRequest,
66
CancelInvoiceResponse,
77
CreatePdfRequest,
8-
SendInvoiceRequest
8+
SendInvoiceRequest,
9+
InvoiceStatusRequest,
10+
InvoiceStatusResponse
911
} from '../models/invoice';
1012
import { IFiscalapiService } from './fiscalapi-service.interface';
1113

@@ -14,23 +16,37 @@ import { IFiscalapiService } from './fiscalapi-service.interface';
1416
*/
1517
export interface IInvoiceService extends IFiscalapiService<Invoice> {
1618
/**
17-
* Crea un PDF de una factura
19+
* Cancela una factura
20+
* @param {CancelInvoiceRequest} request - Solicitud para cancelar factura
21+
* @returns {Promise<ApiResponse<CancelInvoiceResponse>>} Respuesta de la cancelación
22+
*/
23+
cancel(request: CancelInvoiceRequest): Promise<ApiResponse<CancelInvoiceResponse>>;
24+
25+
/**
26+
* Obtiene el PDF de una factura
1827
* @param {CreatePdfRequest} request - Solicitud para crear PDF
1928
* @returns {Promise<ApiResponse<FileResponse>>} Respuesta con el archivo PDF
2029
*/
21-
createPdf(request: CreatePdfRequest): Promise<ApiResponse<FileResponse>>;
30+
getPdf(request: CreatePdfRequest): Promise<ApiResponse<FileResponse>>;
31+
32+
/**
33+
* Obtiene el XML de una factura
34+
* @param {string} id - ID de la factura
35+
* @returns {Promise<ApiResponse<FileResponse>>} Respuesta con el archivo XML
36+
*/
37+
getXml(id: string): Promise<ApiResponse<FileResponse>>;
2238

2339
/**
2440
* Envía una factura por correo electrónico
2541
* @param {SendInvoiceRequest} request - Solicitud para enviar factura
2642
* @returns {Promise<ApiResponse<boolean>>} Resultado de la operación
2743
*/
28-
sendInvoice(request: SendInvoiceRequest): Promise<ApiResponse<boolean>>;
44+
send(request: SendInvoiceRequest): Promise<ApiResponse<boolean>>;
2945

3046
/**
31-
* Cancela una factura
32-
* @param {CancelInvoiceRequest} request - Solicitud para cancelar factura
33-
* @returns {Promise<ApiResponse<CancelInvoiceResponse>>} Respuesta de la cancelación
47+
* Obtiene el estado de una factura
48+
* @param {InvoiceStatusRequest} request - Solicitud para consultar estado
49+
* @returns {Promise<ApiResponse<InvoiceStatusResponse>>} Respuesta con el estado de la factura
3450
*/
35-
cancelInvoice(request: CancelInvoiceRequest): Promise<ApiResponse<CancelInvoiceResponse>>;
51+
getStatus(request: InvoiceStatusRequest): Promise<ApiResponse<InvoiceStatusResponse>>;
3652
}

src/common/file-response.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11

22
/**
3-
* File response from the API
3+
* File response from the API.
4+
*Por ejemplo: Modelo de respuesta de generación de PDF o recuperación de XML
45
*/
56
export interface FileResponse {
67
/**

src/http/fiscalapi-http-client.interface.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ export interface IFiscalapiHttpClient {
5555
*/
5656
deleteAsync(endpoint: string, config?: AxiosRequestConfig): Promise<ApiResponse<boolean>>;
5757

58+
5859
/**
5960
* Realiza una petición PATCH a la API
6061
* @param endpoint - Punto final de la API

src/http/fiscalapi-http-client.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -271,9 +271,17 @@ export class FiscalapiHttpClient implements IFiscalapiHttpClient {
271271
endpoint: string,
272272
config?: AxiosRequestConfig
273273
): Promise<ApiResponse<boolean>> {
274+
if (!config) {
275+
config = {
276+
method: 'DELETE'
277+
};
278+
}
274279
return this.executeAsync<boolean>(this.httpClient.delete(endpoint, config));
275280
}
276281

282+
283+
284+
277285
/**
278286
* Realiza una petición PATCH a la API
279287
* @param {string} endpoint - Punto final de la API

src/index.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { Addendum } from './../dist/types/models/invoice.d';
12

23
// Exportar API pública
34

@@ -26,11 +27,9 @@ export {
2627
InvoiceItem,
2728
InvoiceResponse,
2829
TaxCredential,
29-
FileType,
3030
RelatedInvoice,
3131
GlobalInformation,
32-
Addendum,
33-
InvoiceItemTax,
32+
ItemTax,
3433
InvoicePayment,
3534
PaidInvoice,
3635
PaidInvoiceTax,

0 commit comments

Comments
 (0)