facturapi / facturapi-node Goto Github PK
View Code? Open in Web Editor NEWCrea Facturas Electrónicas válidas en México lo más fácil posible (CFDI)
Home Page: https://facturapi.io
Crea Facturas Electrónicas válidas en México lo más fácil posible (CFDI)
Home Page: https://facturapi.io
Estaría increíble que se pudieran incluir las definiciones en typescript para poder utilizar de una mejor manera la librería.
Implementare algunas definiciones para mi proyecto y las pondré aquí cuando acabe, espero puedan servir.
Hola @javorosas ,
Summary:
Este es un feature request para un end point en su API que nos permita obtener una lista de facturas filtrando el campo "Métodos de pago", el objetivo es poder generar fácilmente vistas con las facturas PPD para posteriormente crear "Facturas de Recepción de Pagos" sobre las mismas.
Otra opción sería agregar un end point que nos permita enviar un objeto query para poder filtrar nuestras facturas.
Saludos!
MF
Es una solicitud de nueva funcionalidad más que un "issue":
Algo como:
const facturapi = require('facturapi')('YOUR_API_KEY');
facturapi.organizations.create({
comercialName: 'Nombre Comercial',
legalName: 'Razón Social',
// other required fields
}).then(organization=> {
// Remember to store the organization.id in your records.
}).catch(err => console.log(err));
Y poder subirle los Certificados por medio de otras APIs.
Crear organizaciones por medio de la consola web es un poco engorroso, inseguro, manual y limitado.
Por lo tanto el "YOUR_API_KEY" debería ser único y para identificar una sola cuenta de facturapi.
Hi Team,
When I try to create a Global invoice in test mode, the request comes back with 200 OK, but the response is empty. No error comes back. I checked the logs coming back from axios directly in the library, but no response is present.
I tried sending it with empty parameters and with from, to, series defined as well but the response is the same:
await facturapi.receipts.createGlobalInvoice({});
Buen día, excelente proyecto. Pero no me es posible utilizarlo ya que solo tengo mi FIEL y en la herramienta gratuita del SAT siempre he sellado mis facturas con la FIEL.
Quiero comenzar expresando mi admiración y agradecimiento por el excepcional trabajo que realizan manteniendo esta biblioteca. Gracias a su esfuerzo, usuarios como yo podemos disfrutar de una herramienta tan útil y fácil de utilizar. ¡Felicidades!
Les escribo para sugerir la integración de una biblioteca llamada Zod, que facilita la validación de tipos en tiempo de ejecución y permite generar tipos de TypeScript a partir de los esquemas definidos. Creo que podría complementar muy bien el trabajo que ya están haciendo, especialmente considerando que están trabajando en una adaptación a TypeScript.
Aquí les comparto algunos tipos que he creado en mi proyecto, aprovechando su excelente documentación en https://docs.facturapi.io/:
export const createOrganizationAddressDto = z.object({
zip: z.string(),
street: z.string(),
exterior: z.string(),
interior: z.string().optional(),
neighborhood: z.string().optional(),
city: z.string().optional(),
municipality: z.string().optional(),
state: z.string().optional(),
});
export type CreateOrganizationAddresseDto = z.infer<
typeof createOrganizationAddressDto
>;
export const createOrganizationDto = z.object({
name: z.string(),
legal_name: z.string(),
tax_system: z.string(),
certificates: certificatesDto,
website: z.string().optional(),
support_email: z.string().optional(),
phone: z.string().optional(),
supabase_project_id: z.string(),
address: createOrganizationAddressDto,
});
export type CreateOrganizationDto = z.infer<typeof createOrganizationDto>;
export type UpdateOrganizationResponse = {
id: string;
created_at: string;
is_production_ready: boolean;
pending_steps: PendingStep[];
legal: LegalInfo;
customization: Customization;
certificate: Certificate;
};
En este ejemplo, hago la implementación de la librería utilizando este endpoint:
// organizations.types.ts
import { z } from 'zod';
export const createOrganizationDto = z.object({
name: z.string(),
legal_name: z.string(),
tax_system: z.string(),
certificates: certificatesDto, // Asumiendo que certificatesDto está definido adecuadamente
website: z.string().optional(),
support_email: z.string().optional(),
phone: z.string().optional(),
supabase_project_id: z.string(),
address: createOrganizationAddressDto, // Asumiendo que createOrganizationAddressDto está definido adecuadamente
});
export type CreateOrganizationDto = z.infer<typeof createOrganizationDto>;
// src/resources/organizations.ts
updateLegal(id: string, data: CreateOrganizationDto) {
if (!id) return Promise.reject(new Error('id is required'));
// Validar data usando el esquema de Zod
const validation = createOrganizationDto.safeParse(data);
if (!validation.success) {
return Promise.reject(new Error('Validation failed: ' + validation.error.message));
}
// Si la validación es exitosa, proceder con la petición
return this.client
.put('/organizations/' + id + '/legal', data)
.then((r) => r.data);
}
Como pueden observar, la implementación requerida para cada endpoint es mínima, mientras que los beneficios que aporta a la biblioteca son significativos.
Record<string, string>
, reemplazándolos por estructuras más legibles.Estoy completamente dispuesto a enviarles el resto del código y colaborar estrechamente con ustedes en este esfuerzo.
Al momento de crear una Factura de ingreso, me retorna un error 400 con esta respuesta
Error: (0 , big_js_1.default)(...).plus is not a function
at errorInterceptor (C:\Users\ikari\Documents\Estacionamiento\API\node_modules\facturapi\src\wrapper.js:14:27)
Versión:
"facturapi": "^3.2.0",
Dejo mi objeto de tipo Factura Ingreso tapando información de cliente.
Cabe remarcar que este mismo objecto funcionaba en la v1, se agregó:
"tax_system" al objecto de "customer"
"taxability" al objeto de "product"
{
"customer": {
"email": "Mi email",
"legal_name": "Mi nombre",
"tax_id": "Mi RFC",
"tax_system": "616",
"address": {
"exterior": null,
"interior": null,
"neighborhood": null,
"street": null,
"zip": "Mi zip"
},
"phone": null
},
"items": [
{
"product": {
"description": "Una semana",
"price": 689.66,
"product_key": "95121644",
"tax_included": false,
"unit_key": "WEE",
"taxes": [
{
"rate": 0.16,
"type": "IVA",
"factor": "Tasa",
"withholding": false
}
],
"taxability": "02",
"local_taxes": [
{
"type": "ISR",
"rate": 0.0125,
"withholding": true
},
{
"type": "IVA",
"rate": 0.16,
"withholding": true
}
]
},
"quantity": 1,
"discount": 0
}
],
"payment_form": "99",
"pdf_custom_section": "",
"payment_method": "PPD",
"use": "G03"
}
Estoy implementando en una API REST la funcionalidad de subir los archivos:
.key
.cer
Estoy siguiendo la documentación de facturapi (https://docs.facturapi.io/api/#operation/uploadOrganizationCertificate)
const key = createReadStream(
'absolute/path',
);
const cer = createReadStream(
'absolute/path',
);
await this.facturapi.organizations.uploadCertificate(
tenant.facturapiOrganizationId,
cer,
key,
uploadCertificatePasswordDto.password,
);
El error que me arroja es
Error: El certificado no es un CSD válido. Asegúrate de que se trate del CSD y no de la FIEL.
NOTA: Ya intente de iniciar sesión en el SAT con mi .cer
y .key
y contraseña y si funciona.
¿algo que se me este pasando?
Hello Team!!
(Error) - When create a new client with the new property tax_system, just allows code "616".
Post /customers
Object Request
{
"legal_name": "X V2, S.A. de C.V.",
"tax_id": "XAXX010101000",
"tax_system": "601",
"email": "[email protected]",
"address": {
"street": "Basement",
"exterior": "911",
"neighborhood": "Death Star",
"zip": "86500",
"country": "MEX"
}
}
Response
{
"message": "\"tax_system\" must be [616]",
"path": "tax_system",
"ok": false
}
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.