Skip to content

Commit 9692ece

Browse files
committed
people and certificates tested
1 parent 073056d commit 9692ece

6 files changed

Lines changed: 226 additions & 67 deletions

File tree

examples/main.ts

Lines changed: 103 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { FiscalapiClient, FiscalapiSettings, Product } from '../src';
1+
import { FiscalapiClient, FiscalapiSettings, Person, Product, TaxFile } from '../src';
22
import { inspect } from 'util';
33
inspect.defaultOptions.depth = null; // Deshabilitar la profundidad de inspección para objetos anidados la salida de la consola
44
inspect.defaultOptions.colors = true; // Habilitar colores para la salida de la consola
@@ -8,8 +8,9 @@ async function main() : Promise<void> {
88
// Configura el cliente de FiscalAPI
99
const settings: FiscalapiSettings = {
1010
apiUrl: 'https://localhost:7173',
11-
apiKey: 'sk_development_e0e47dfa_5146_40c2_b3a3_3055909a6b88',
11+
apiKey: 'sk_development_833a58f9_8212_43ce_b544_f2fa93b1e895',
1212
tenant: 'e839651d-1765-4cd0-ba7f-547a4c20580f',
13+
debug:false
1314
};
1415

1516
// Sellos SAT CSD del emisor para emisión de CFDI
@@ -20,7 +21,7 @@ async function main() : Promise<void> {
2021
try {
2122
console.log('Hello Fiscalapi node...');
2223

23-
// Crea el cliente
24+
// Crea el cliente http
2425
const client = FiscalapiClient.create(settings);
2526

2627
// Listar api keys
@@ -56,6 +57,105 @@ async function main() : Promise<void> {
5657
// console.log('apiResponse:', apiResponse);
5758

5859

60+
// Listar personas (emisores, receptores, clientes, empresas, usuarios)
61+
// const apiResponse = await client.persons.getList(1,2);
62+
// console.log(apiResponse);
63+
64+
// Obtener persona (emisor, receptor, cliente, empresa, usuario) por Id
65+
// const apiResponse = await client.persons.getById("1", true)
66+
// console.log(apiResponse);
67+
68+
// Crear persona (emisor, receptor, cliente, empresa, usuario)
69+
// const modelRequest: Person = {
70+
// legalName: 'EMPRESA S.A. DE C.V.',
71+
// email: 'empresa@example.com',
72+
// password: 'StrongPassword123!',
73+
// userTypeId: 'C', // C=Cliente, U=Usuario T=Tenant
74+
// };
75+
// const apiResponse = await client.persons.create(modelRequest);
76+
// console.log(apiResponse);
77+
78+
79+
// Actualizar persona (emisor, receptor, cliente, empresa, usuario)
80+
// const modelRequest: Person = {
81+
// id: 'cce1def0-7df0-4c44-b7b8-046a7681ced6',
82+
// legalName: 'KARLA FUENTE NOLASCO',
83+
// //capitalRegime: "S.A de C.V", // Régimen de capital de la persona, solo cuando es persona moral
84+
// tin: 'FUNK671228PH6', // RFC
85+
// email: 'karla.fuentes@example.com',
86+
// userTypeId: 'C', // C=Cliente, U=Usuario T=Tenant
87+
// satTaxRegimeId: '601', // General de Ley Personas Morales
88+
// satCfdiUseId: 'G03', // Gastos en general.
89+
// zipCode: '01160', // Código postal
90+
// taxPassword: '12345678a', // Contraseña de los certificados CSD
91+
// //base64Photo: 'base64Photo', // Foto de perfil en base64
92+
// //password: '12345678a', // Contraseña para acceder al dashboard
93+
// //password: '12345678a', // Contraseña para acceder al dashboard
94+
// };
95+
// const apiResponse = await client.persons.update(modelRequest);
96+
// console.log(apiResponse);
97+
98+
99+
// Eliminar persona (emisor, receptor, cliente, empresa, usuario)
100+
// const apiResponse = await client.persons.delete("cce1def0-7df0-4c44-b7b8-046a7681ced6");
101+
// console.log(apiResponse);
102+
103+
104+
// Listar certificados CSD
105+
// const apiResponse = await client.taxFiles.getList(1, 2);
106+
// console.log(apiResponse);
107+
108+
// Obtener certificado CSD por ID
109+
// const apiResponse = await client.taxFiles.getById("7626304b-47a9-4a42-82f7-43c7d4ed6081", true);
110+
// console.log(apiResponse);
111+
112+
113+
// Crear certificado CSD (subir certificado y llave privada)
114+
// const certModelRequest: TaxFile = {
115+
// personId: '3f3478b4-60fd-459e-8bfc-f8239fc96257',
116+
// tin: 'FUNK671228PH6', // RFC
117+
// base64File: base64Cert,
118+
// fileType: 0, // 0=Certificado, 1=Llave privada
119+
// password: '12345678a', // Contraseña de la llave privada0
120+
// };
121+
122+
// const keyModelRequest: TaxFile = {
123+
// personId: '3f3478b4-60fd-459e-8bfc-f8239fc96257',
124+
// tin: 'FUNK671228PH6', // RFC
125+
// base64File: base64Key,
126+
// fileType: 1, // 0=Certificado, 1=Llave privada
127+
// password: '12345678a', // Contraseña de la llave privada
128+
// };
129+
130+
// const apiResponseCert = await client.taxFiles.create(certModelRequest);
131+
// console.log(apiResponseCert);
132+
133+
// const apiResponseKey = await client.taxFiles.create(keyModelRequest);
134+
// console.log(apiResponseKey);
135+
136+
137+
// Obtiene el último par de ids de certificados válidos y vigente de una persona. Es decir sus certificados por defecto (ids)
138+
// const apiResponse = await client.taxFiles.getDefaultReferences("3f3478b4-60fd-459e-8bfc-f8239fc96257");
139+
// console.log(apiResponse);
140+
141+
// Obtiene el último par de certificados válidos y vigente de una persona. Es decir sus certificados por defecto
142+
// const apiResponse = await client.taxFiles.getDefaultValues("3f3478b4-60fd-459e-8bfc-f8239fc96257");
143+
// console.log(apiResponse);
144+
145+
146+
// Eliminar certificados por ID (Se necesita hacer dos llamadas, una para el certificado y otra para la llave privada)
147+
// const apiResponseCert = await client.taxFiles.delete("174edf2d-c1e7-4040-95f7-949e3947c192");
148+
// console.log(apiResponseCert);
149+
150+
// const apiResponseKey = await client.taxFiles.delete("2c592f82-0acc-47cd-866d-1676f3b7e1ef");
151+
// console.log(apiResponseKey);
152+
153+
154+
155+
156+
157+
158+
59159
// Listar productos
60160
// const apiResponse = await client.products.getList(1, 2);
61161
// console.log('apiResponse:', apiResponse);

src/abstractions/tax-file-service.interface.ts

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,23 @@ import { FileResponse } from '../common/file-response';
88
* Interfaz del servicio de archivos fiscales
99
*/
1010
export interface ITaxFileService extends IFiscalapiService<TaxFile> {
11+
12+
1113
/**
12-
* Descarga un archivo fiscal
13-
* @param {string} id - ID del archivo fiscal
14-
* @returns {Promise<ApiResponse<FileResponse>>} Respuesta con el archivo
15-
*/
16-
download(id: string): Promise<ApiResponse<FileResponse>>;
14+
* Obtiene el último par de ids de certificados válidos y vigente de una persona. Es decir sus certificados por defecto (ids)
15+
*
16+
* @param personId - Id de la persona propietaria de los certificados
17+
* @returns Promise que resuelve en una respuesta API con una lista de un par de certificados, pero sin contenido, solo sus Ids
18+
*/
19+
getDefaultReferences(personId: string): Promise<ApiResponse<TaxFile[]>>
20+
21+
/**
22+
* Obtiene el último par de certificados válidos y vigente de una persona. Es decir sus certificados por defecto
23+
*
24+
* @param personId - Id de la persona dueña de los certificados
25+
* @returns Promise que resuelve en una respuesta API con una lista de un par de certificados
26+
*/
27+
getDefaultValues(personId: string): Promise<ApiResponse<TaxFile[]>>
28+
1729
}
1830

src/models/person.ts

Lines changed: 51 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,61 @@
11

22
// src/models/person.ts
33
import { BaseDto } from '../common/base-dto';
4+
import { CatalogDto } from '../common/catalog-dto';
45

56
/**
6-
* Modelo de persona
7+
* Modelo persona
8+
* Contiene toda la información de una persona emisor o receptor
79
*/
8-
export class Person extends BaseDto {
9-
/** Razón social o nombre legal */
10+
export interface Person extends BaseDto {
11+
/** Razón social de la persona sin régimen de capital */
1012
legalName?: string;
11-
12-
/** Nombre comercial */
13-
commercialName?: string;
14-
15-
/** RFC (Registro Federal de Contribuyentes) */
16-
tin?: string;
17-
18-
/** Correo electrónico */
13+
14+
/** Correo electrónico de la persona */
1915
email?: string;
20-
21-
/** Teléfono */
22-
phone?: string;
23-
24-
/** Código postal */
16+
17+
/** Contraseña para acceder al dashboard */
18+
password?: string;
19+
20+
/** Régimen de capital de la persona */
21+
capitalRegime?: string;
22+
23+
/** Código del régimen fiscal del emisor. Catálogo del SAT c_régimenFiscal. Valores: "601", "603", "605" */
24+
satTaxRegimeId?: string;
25+
26+
/** Código del régimen fiscal del emisor expandido */
27+
satTaxRegime?: CatalogDto;
28+
29+
/** Código de uso del CFDI por defecto cuando este emisor actúe como receptor. Catálogo del SAT c_UsoCFDI. Valores: "G01", "G02", "G03" */
30+
satCfdiUseId?: string;
31+
32+
/** Código de uso del CFDI por defecto expandido */
33+
satCfdiUse?: CatalogDto;
34+
35+
/** Tipo de persona, solo tiene fines informativos. Valores: "T", "C", "U" */
36+
userTypeId?: string;
37+
38+
/** Tipo de persona expandido */
39+
userType?: CatalogDto;
40+
41+
/** RFC del emisor (Tax Identification Number) */
42+
tin?: string;
43+
44+
/** Código postal del emisor. Catálogo del SAT c_CodigoPostal */
2545
zipCode?: string;
26-
27-
/** Dirección */
28-
address?: string;
29-
30-
/** Código de régimen fiscal */
31-
taxRegimeCode?: string;
32-
33-
/** Código de tipo de persona (física o moral) */
34-
personTypeCode?: string;
35-
36-
/** Código de país */
37-
countryCode?: string;
38-
39-
/** Código de estado */
40-
stateCode?: string;
41-
42-
/** Nombre de la ciudad */
43-
cityName?: string;
46+
47+
/** Foto de perfil del emisor en formato base64 */
48+
base64Photo?: string;
49+
50+
/** Contraseña de los certificados CSD cuando es un emisor */
51+
taxPassword?: string;
52+
53+
/** Saldo disponible en la cuenta del emisor. Atributo de sólo lectura */
54+
availableBalance?: number;
55+
56+
/** Saldo en tránsito. Atributo de sólo lectura */
57+
committedBalance?: number;
58+
59+
/** ID del tenant al que pertenece el emisor. Atributo de sólo lectura */
60+
tenantId?: string;
4461
}

src/models/tax-file.ts

Lines changed: 27 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,31 @@
33
import { BaseDto } from '../common/base-dto';
44

55
/**
6-
* Modelo de archivo fiscal
6+
* Modelo TaxFile
7+
* Representa un componente individual de un par CSD - ya sea el certificado (.cer) o la llave privada (.key)
78
*/
8-
export class TaxFile extends BaseDto {
9-
/** Nombre del archivo */
10-
fileName?: string;
11-
12-
/** Tipo de archivo */
13-
fileType?: string;
14-
15-
/** Tipo de contenido */
16-
contentType?: string;
17-
18-
/** Contenido del archivo en base64 */
19-
base64Content?: string;
20-
21-
/** ID de la persona asociada */
22-
personId?: string;
23-
}
9+
export interface TaxFile extends BaseDto {
10+
/** Id de la persona propietaria del certificado */
11+
personId: string;
12+
13+
/** RFC del propietario del certificado. Debe coincidir con el RFC del certificado */
14+
tin: string;
15+
16+
/** Archivo certificado o llave privada en formato base64. Para certificados debe ser el archivo .cer codificado en base64, para llaves privadas debe ser el archivo .key codificado en base64 */
17+
base64File: string;
18+
19+
/** Tipo de archivo que se está enviando. Valores: "01" */
20+
fileType: number;
21+
22+
/** Contraseña de la llave privada. Independientemente si se envía un certificado o una llave privada, siempre se debe enviar la contraseña de la llave privada */
23+
password: string;
24+
25+
/** Fecha de inicio de vigencia del certificado o llave privada. Calculado automáticamente */
26+
validFrom?: Date;
27+
28+
/** Fecha de fin de vigencia del certificado o llave privada. Calculado automáticamente */
29+
validTo?: Date;
30+
31+
/** Numero de secuencia que identifica el par entre certificado y llave privada. Sólo con fines informativos */
32+
sequence?: number;
33+
}

src/services/person-service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ export class PersonService extends BaseFiscalapiService<Person> implements IPers
1414
* @param {string} apiVersion - Versión de la API
1515
*/
1616
constructor(httpClient: IFiscalapiHttpClient, apiVersion: string) {
17-
super(httpClient, 'persons', apiVersion);
17+
super(httpClient, 'people', apiVersion);
1818
}
1919
}

src/services/tax-file-service.ts

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,33 @@ export class TaxFileService extends BaseFiscalapiService<TaxFile> implements ITa
1515
* @param {string} apiVersion - Versión de la API
1616
*/
1717
constructor(httpClient: IFiscalapiHttpClient, apiVersion: string) {
18-
super(httpClient, 'taxfiles', apiVersion);
18+
super(httpClient, 'tax-files', apiVersion);
1919
}
2020

21-
/**
22-
* @inheritdoc
23-
*/
24-
async download(id: string): Promise<ApiResponse<FileResponse>> {
25-
return this.httpClient.getAsync<FileResponse>(this.buildEndpoint(`${id}/download`));
26-
}
21+
22+
/**
23+
* Obtiene el último par de ids de certificados válidos y vigente de una persona. Es decir sus certificados por defecto (ids)
24+
*
25+
* @param personId - Id de la persona propietaria de los certificados
26+
* @returns Promise que resuelve en una respuesta API con una lista de un par de certificados, pero sin contenido, solo sus Ids
27+
*/
28+
async getDefaultReferences(personId: string): Promise<ApiResponse<TaxFile[]>> {
29+
// GET /api/v4/tax-files/{personId}/default-references
30+
const path = `${personId}/default-references`;
31+
const endpoint = this.buildEndpoint(path);
32+
return this.httpClient.getAsync<TaxFile[]>(endpoint);
33+
}
34+
35+
/**
36+
* Obtiene el último par de certificados válidos y vigente de una persona. Es decir sus certificados por defecto
37+
*
38+
* @param personId - Id de la persona dueña de los certificados
39+
* @returns Promise que resuelve en una respuesta API con una lista de un par de certificados
40+
*/
41+
public async getDefaultValues(personId: string): Promise<ApiResponse<TaxFile[]>> {
42+
// GET /api/v4/tax-files/{personId}/default-values
43+
const path = `${personId}/default-values`;
44+
const endpoint = this.buildEndpoint(path);
45+
return this.httpClient.getAsync<TaxFile[]>(endpoint);
46+
}
2747
}

0 commit comments

Comments
 (0)