herramientaenvioestupendo 1.0.26 → 1.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -14,18 +14,17 @@ Para instalar el aplicativo CLI, deben realizar el siguiente procedimiento :
14
14
  ```npm i -g herramientaenvioestupendo```
15
15
 
16
16
  - Luego de esto deben validar la version de la herramienta :
17
- ```estupendo --version```, si esta indica que es la 1.0.2 es la correcta.
17
+ ```estupendo --version```, si esta indica que es la 1.0.28 es la correcta.
18
18
 
19
19
  - Para conocer que opciones tienen de comandos solo deben ingresar en su CMD :
20
20
  ```estupendo --help```
21
21
 
22
22
  ## Ejemplos de comando valido :
23
23
  - ```estupendo send_txt -d [Carpeta donde se encuentran los archivos txt]```
24
- - ```estupendo send_xml -d [Carpeta donde se encuentran los archivos xml] -n [Nit de la empresa que emite documentos]```
24
+ - ```estupendo send_xml -d [Carpeta donde se encuentran los archivos xml]```
25
25
  - ```estupendo send_attached -d [Carpeta donde se encuentran los archivos xml] -p[Produccion, si no es enviado toma api pruebas]```
26
26
 
27
27
  Parametros :
28
28
  - -d = ruta de los documentos a leer en la maquina.
29
- - -n = nit
30
29
  - -p = produccion(si no es enviado por defecto toma pruebas).
31
30
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "herramientaenvioestupendo",
3
- "version": "1.0.26",
3
+ "version": "1.0.28",
4
4
  "private": false,
5
5
  "description": "Proyecto para envio documentos masivos",
6
6
  "keywords": [],
package/src/index.js CHANGED
@@ -3,12 +3,11 @@ import { program } from "commander"
3
3
  import { sendTxt, sendXml, sendAttached } from "./services.js"
4
4
 
5
5
 
6
- program.name("estupendo").version("1.0.26")
6
+ program.name("estupendo").version("1.0.28")
7
7
 
8
8
  program.command("send_xml")
9
9
  .requiredOption("-d, --directory <char>", "Directorio donde se encuentran los documentos XML")
10
10
  .option("-p, --prod", "Producción, si no es enviado recibe el api pruebas")
11
- .requiredOption("-n, --nit <char>", "Nit de la empresa")
12
11
  .description("Envio masivos XML")
13
12
  .action(sendXml)
14
13
 
package/src/services.js CHANGED
@@ -8,40 +8,86 @@ const __filename = fileURLToPath(import.meta.url)
8
8
  const __dirname = path.dirname(__filename)
9
9
 
10
10
  //envio aumaticos XML
11
-
12
11
  const sendXml = async (options) => {
13
12
  if (!fs.existsSync(options.directory)) {
14
- console.error("La carpeta no existe")
15
- return
16
- }
17
- const archivos = fs.readdirSync(options.directory)
18
- const pattern = /.xml$/
19
- const xmls = archivos.filter(archivo => pattern.test(archivo))
20
- let urlApi = "https://pruebas.estupendo.com.co/api/documento"
21
- let identificacion = "";
22
- if (options.prod) {
23
- urlApi = "https://app.estupendo.com.co/api/documento"
24
- }
25
- if (options.nit) {
26
- identificacion = options.nit
27
- }
28
- const output = []
29
- console.log("Procesando...")
30
- for (let archivo of xmls) {
31
- const name = path.join(options.directory, archivo)
32
- const content = fs.readFileSync(name, { encoding: "utf-8" })
33
- const encoded = Buffer.from(content).toString("base64")
34
- const data = await request(urlApi, {
35
- api_key: "",
36
- nit: identificacion, // enviar nit de la empresa que deseo recorrer
37
- prefijo: "",
38
- contingencia: false,
39
- xml: encoded
40
- })
41
- output.push(data)
42
- }
43
- const ruta = path.join(process.cwd(), "Output_xml.json")
44
- fs.appendFile(ruta, JSON.stringify(output, null, 4), () => { })
13
+ console.error("La carpeta no existe")
14
+ return
15
+ }
16
+ const archivos = fs.readdirSync(options.directory)
17
+ const pattern = /.xml$/
18
+ const txts = archivos.filter(archivo => pattern.test(archivo))
19
+ let urlBase = "https://pruebas.estupendo.com.co/api"
20
+ if (options.prod) {
21
+ urlBase = "https://app.estupendo.com.co/api"
22
+ }
23
+ const urlApiConsulta = `${urlBase}/CYP/consultarEstadoDocumento`;
24
+ const urlApi = `${urlBase}/CYP`;
25
+ const output = [];
26
+ const pdfDir = path.join(process.cwd(), "pdfs");
27
+ const xmlDir = path.join(process.cwd(), "xmls");
28
+ const procesadosDir = path.join(process.cwd(), "procesados");
29
+
30
+ // Crear carpetas si no existen
31
+ if (!fs.existsSync(pdfDir)) fs.mkdirSync(pdfDir);
32
+ if (!fs.existsSync(xmlDir)) fs.mkdirSync(xmlDir);
33
+ if (!fs.existsSync(procesadosDir)) fs.mkdirSync(procesadosDir);
34
+ console.log("Procesando...")
35
+ for (let archivo of txts) {
36
+ const name = path.join(options.directory, archivo)
37
+ const content = fs.readFileSync(name, { encoding: "utf-8" })
38
+ console.log(`Procesando Archivo: ${archivo}`);
39
+ const encoded = Buffer.from(content).toString("base64");
40
+ try {
41
+ const data =await request(urlApi, {xml: encoded})
42
+ console.log(data)
43
+ // Validar que el documento fue autorizado (estado === 2)
44
+ if (data.estado === 2 ) {
45
+ console.log(urlApiConsulta)
46
+ const dataconsult =await request(urlApiConsulta, {nit: "891400754", numeral: data.documento_id})
47
+ console.log(dataconsult)
48
+
49
+ if (dataconsult.result === true) {
50
+ const pdfUrl = dataconsult.pdf;
51
+ const pdfPath = path.join(pdfDir, `${data.documento_id}.pdf`);
52
+ try {
53
+ const response = await axios.get(pdfUrl, { responseType: 'arraybuffer' });
54
+ fs.writeFileSync(pdfPath, response.data);
55
+ console.log(`PDF guardado: ${pdfPath}`);
56
+ } catch (error) {
57
+ console.error(`Error descargando PDF de ${data.documento_id}:`, error.message);
58
+ }
59
+
60
+ const xmlUrl = dataconsult.xml;
61
+ const xmlPath = path.join(xmlDir, `${data.documento_id}.xml`);
62
+ try {
63
+ const response = await axios.get(xmlUrl, { responseType: 'arraybuffer' });
64
+ fs.writeFileSync(xmlPath, response.data);
65
+ console.log(`XML guardado: ${xmlPath}`);
66
+ } catch (error) {
67
+ console.error(`Error descargando XML de ${data.documento_id}:`, error.message);
68
+ }
69
+
70
+ // Mover archivo .txt a carpeta "procesados"
71
+ const destino = path.join(procesadosDir, archivo);
72
+ fs.renameSync(name, destino);
73
+ console.log(`Archivo movido a: ${destino}`);
74
+ }
75
+
76
+ } else {
77
+ console.log(`Documento no autorizado o con estado diferente de 2. Archivo: ${archivo}`);
78
+ }
79
+ output.push(data)
80
+ } catch (error) {
81
+ console.error(`Error al procesar el archivo ${archivo}:`, error);
82
+ }
83
+
84
+
85
+ }
86
+ const now = new Date();
87
+ const fecha = now.toISOString().slice(0, 19).replace("T", "_").replace(/:/g, "-");
88
+ const filenameDate = `Output_txt_${fecha}.json`;
89
+ const ruta = path.join(process.cwd(), filenameDate)
90
+ fs.appendFile(ruta, JSON.stringify(output, null, 4), () => { })
45
91
  }
46
92
 
47
93
  // envios automaticos TXT
@@ -51,7 +97,7 @@ const sendTxt = async (options) => {
51
97
  return
52
98
  }
53
99
  const archivos = fs.readdirSync(options.directory)
54
- const pattern = /.xml$/
100
+ const pattern = /.txt$/
55
101
  const txts = archivos.filter(archivo => pattern.test(archivo))
56
102
  let urlBase = "https://pruebas.estupendo.com.co/api"
57
103
  if (options.prod) {
@@ -75,7 +121,7 @@ const sendTxt = async (options) => {
75
121
  console.log(`Procesando Archivo: ${archivo}`);
76
122
  const encoded = Buffer.from(content).toString("base64");
77
123
  try {
78
- const data =await request(urlApi, {xml: encoded})
124
+ const data =await request(urlApi, {txtEncode: encoded})
79
125
  console.log(data)
80
126
  // Validar que el documento fue autorizado (estado === 2)
81
127
  if (data.estado === 2 ) {