Complemento Nomina 1.2
Complemento Nomina v 1.2
Varias personas me han preguntado sobre el Complemento Nomina versión 1.2. Este complemento se encuentra implementado dentro de la Librería Cfdi 3.3 el cual es creado de la misma manera en que se han creado los complementos expuestos (principalmente en el de Complemento Otros Derechos e Impuestos) en este blog por lo que pasaré directamente a un ejemplo de su uso.
Para ejecutar el siguiente código es necesario descargar los archivos de proyectos de la Librería Cfdi 3.3 y en el formulario del Proyecto MDTestCfdiV3 color un nuevo botón y en el evento click poner el siguiente código.
TMDCfdi33 _cfdiNomina = new TMDCfdi33();
//Cfdi
_cfdiNomina.Folio ="01";
_cfdiNomina.Fecha = DateTime.Now;
_cfdiNomina.FormaPago = "99";
_cfdiNomina.SubTotal = 7500.05m;
_cfdiNomina.Descuento = 1234.09m;
_cfdiNomina.Moneda = "MXN";
_cfdiNomina.Total = 6265.96m;
_cfdiNomina.TipoDeComprobante = "N";
_cfdiNomina.MetodoPago = "PUE";
_cfdiNomina.LugarExpedicion = "25000";
//Emisor
_cfdiNomina.Emisor.Rfc = "AAGG791104IP2";
_cfdiNomina.Emisor.Nombre = "Alguien interesado";
_cfdiNomina.Emisor.RegimenFiscal = "601";
//Receptor - Los datos son de una CSD de prueba proporcionado por el SAT
//ya que el RFC es verificado por el PAC
_cfdiNomina.Receptor.Rfc = "HEGT7610034S2";
_cfdiNomina.Receptor.Nombre = "EJIDO RODRIGUEZ PUEBLA";
_cfdiNomina.Receptor.UsoCFDI = "P01";
//Concepto
TMDCfdi33ConceptoItem _concepto = _cfdiNomina.Conceptos.Concepto.Add(); _concepto.ClaveProdServ = "84111505";
_concepto.Cantidad = 1;
_concepto.ClaveUnidad = "ACT";
_concepto.Descripcion = "Pago de nómina";
_concepto.ValorUnitario = 7500.05m;
_concepto.Importe = 7500.05m;
_concepto.Descuento = 1234.09m;
/* COMPLEMENTO NOMINA 1.2 */
TMDComplementoNomina12 _nomina = new TMDComplementoNomina12();
_nomina.TipoNomina = "O";
_nomina.FechaPago = DateTime.Now;
_nomina.FechaInicialPago = DateTime.Parse("2017-08-01");
_nomina.FechaFinalPago = DateTime.Parse("2017-08-15");
_nomina.NumDiasPagados = 15;
_nomina.TotalPercepciones = 7500.05m;
_nomina.TotalDeducciones = 1234.09m;
/* EMISOR */
//_nomina.Emisor.Curp = ""; //<- Persona moral no tienen
_nomina.Emisor.RegistroPatronal = "B5510768108";
_nomina.Emisor.RfcPatronOrigen = "AAA010101AAA";
/* RECEPTOR */
_nomina.Receptor.Curp = "AABL840215MDFSRS01";
_nomina.Receptor.NumSeguridadSocial = "123456789";
_nomina.Receptor.FechaInicioRelLaboral = DateTime.Parse("2017-08-01");
_nomina.Receptor.Antigüedad = "P15D";
_nomina.Receptor.TipoContrato = "01";
_nomina.Receptor.Sindicalizado = "No";
_nomina.Receptor.TipoJornada = "01";
_nomina.Receptor.TipoRegimen = "02";
_nomina.Receptor.NumEmpleado = "120";
_nomina.Receptor.Departamento = "Cobranza";
_nomina.Receptor.Puesto = "Velador";
_nomina.Receptor.RiesgoPuesto = "1";
_nomina.Receptor.PeriodicidadPago = "04";
_nomina.Receptor.Banco = "002";
_nomina.Receptor.SalarioBaseCotApor = 490.22m;
_nomina.Receptor.SalarioDiarioIntegrado = 146.47m;
_nomina.Receptor.ClaveEntFed = "COA";
/* PERCEPCIONES */
_nomina.Percepciones.TotalGravado = 7500.05m;
_nomina.Percepciones.TotalExento = 0.0m;
_nomina.Percepciones.TotalSueldos = 7500.05m;
//Percepción 01
TMDNomina12PercepcionItem _percepcion = _nomina.Percepciones.Percepcion.Add();
_percepcion.TipoPercepcion = "001";
_percepcion.Clave = "001";
_percepcion.Concepto = "Sueldos, Salarios, Rayas y Jornales";
_percepcion.ImporteGravado = 6250.05m;
_percepcion.ImporteExento = 0.0m;
//Percepción 02
_percepcion = _nomina.Percepciones.Percepcion.Add();
_percepcion.TipoPercepcion = "049";
_percepcion.Clave = "014";
_percepcion.Concepto = "Premios de asistencia";
_percepcion.ImporteGravado = 625.00m;
_percepcion.ImporteExento = 0.0m;
//Percepción 03
_percepcion = _nomina.Percepciones.Percepcion.Add();
_percepcion.TipoPercepcion = "010";
_percepcion.Clave = "013";
_percepcion.Concepto = "Premios por puntualidad";
_percepcion.ImporteGravado = 625.00m;
_percepcion.ImporteExento = 0.0m;
/* DEDUCCIONES */
_nomina.Deducciones.TotalOtrasDeducciones = 179.34m;
_nomina.Deducciones.TotalImpuestosRetenidos = 1054.75m;
//Deducción 01
TMDNomina12DeduccionItem _deduccion = _nomina.Deducciones.Deduccion.Add();
_deduccion.TipoDeduccion = "002";
_deduccion.Clave = "001";
_deduccion.Concepto = "ISR";
_deduccion.Importe = 1054.75m;
//Deducción 02
_deduccion = _nomina.Deducciones.Deduccion.Add();
_deduccion.TipoDeduccion = "001";
_deduccion.Clave = "012";
_deduccion.Concepto = "Seguridad Social";
_deduccion.Importe = 179.34m;
/*** Agregamos el Complemento al Cfdi ***/
_cfdiNomina.Complemento.Any.Add(_nomina);
El código anterior genera el xml básico de un recibo de nómina, los siguiente pasos serían sellarlo y timbrarlo, lo cual se hace de la siguiente manera:
//Definimos las variables para encontrar los archivos .cer, .key
//y los .xslt estos últimos utilizados en la generación de la cadena original
TMDCfdiConfig.FIELDirectory = string.Format(@"C:\Users\{0}\Desktop\MDTestCfdiV3\Fiel", TMDWinUtils.WindowsUserName);
TMDCfdiConfig.CerFile = "CSD_Pruebas_CFDI_LAN7008173R5.cer"; // "CSD_Prueba_CFDI_LAN8507268IA.cer";
TMDCfdiConfig.KeyFile = "CSD_Pruebas_CFDI_LAN7008173R5.key"; // "CSD_Prueba_CFDI_LAN8507268IA.key";
TMDCfdiConfig.KeyFilePassword = "12345678a"/*"12345678a"*/;
TMDCfdiConfig.UseOnLineXsltFiles = false;
TMDCfdiConfig.XsltFilesDirectory = string.Format(@"C:\Users\{0}\Desktop\MDTestCfdiV3\XSL Files", TMDWinUtils.WindowsUserName);
//Recuerden que cuando sellamos con el parámetro con un valor "true"
//Se cambian, o actualizan, los datos del emisor nombre, rfc,
//número de serie del certificado y su representación en base64
_cfdiNomina.SellaCfdi(true);
TMDPAC _swPac = new TMDPAC_SmarterWebpRUEBAS();
object _customResult;
if (_cfdiNomina.Timbra(_swPac, out _customResult))
MessageBox.Show("CFDI timbrado exitosamente", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
else
MessageBox.Show("Error en timbrado", "", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
Al final se pueden hacer 2 cosas:
1. Obtener el string con el xml Timbrado de la variable devuelta por el PAC y grabar el archivo o
2. Grabar directamente el xml desde la clase TMDCfdi33 con el método SaveXmlCfdi y el nombre del archivo como parámetro
Nota: los archivos pueden variar en la estructura pero ambos son válidos.
El archivo xml generado con la clase TMDCfdi33 fue probado en el Ambiente de Prueba de SmartWeb, dando un resultado exitoso, aquí los resultados
/* ********************************************** */
EL SOFTWARE SE PROPORCIONA "TAL CUAL" Y EL AUTOR RECHAZA TODAS LAS GARANTÍAS CON RESPECTO A ESTE SOFTWARE, INCLUIDAS TODAS LAS GARANTÍAS IMPLÍCITAS DE COMERCIABILIDAD Y ADECUACIÓN. EN NINGÚN CASO EL AUTOR SERÁ RESPONSABLE POR CUALQUIER DAÑO ESPECIAL, DIRECTO, INDIRECTO O CONSECUENTE, O CUALQUIER DAÑO QUE RESULTE DE LA PÉRDIDA DE USO, DATOS O BENEFICIOS, YA SEA EN UNA ACCIÓN DE CONTRATO, NEGLIGENCIA U OTRA ACCIÓN EXTRACONTRACTUAL QUE SURJA DE O EN CONEXIÓN CON EL USO O RENDIMIENTO DE ESTE SOFTWARE.
// -------------------------
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIESWITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
Comentarios
Publicar un comentario