Recibos de Nómina .net
Los recibos de nómina son facturas electrónicas con el complemento de nómina; es decir, información adicional para los recibos con información propia por ejemplo número de seguro social, clave patronal, puesto, entre otros..
Ejemplo código fuente
Contamos con varios métodos para generar el cfdi de nómina, te muestro fragmentos para lo alargar mucho esta publicación.
Podrás notas que la mayoria de lineas es pase de parametros y muy pocas en organizar los nodos.
Ejemplo en archivo INI (texto)
Este formato se utiliza para timbrar ejecutando linea de comandos o también por webservice en ambientes donde es difícil instalar el KIT de desarrollo por ejemplo en Hosting compartido con ASP
[receptor]
rfc=SOHM7509289MA
nombre=MIGUEL ANGEL SOSA HERNANDEZ
UsoCFDI=P01
[conceptos]
[conceptos.0]
cantidad=1.000
ClaveUnidad=ACT
ClaveProdServ=84111505
descripcion=Pago de nómina
valorunitario=500.00
importe=500.00
[nomina12]
TipoNomina=O
FechaPago=2016-10-31
FechaInicialPago=2016-10-16
FechaFinalPago=2016-10-31
NumDiasPagados=15
TotalPercepciones=500.00
TotalDeducciones=250.00
TotalOtrosPagos=0.00
[nomina12.Emisor]
RegistroPatronal=546879213
RfcPatronOrigen=AAA010101AAA
[nomina12.Receptor]
ClaveEntFed=JAL
Curp=CACF880922HJCMSR03
NumEmpleado=060
PeriodicidadPago=04
TipoContrato=01
TipoRegimen=02
Antiguedad=P21W
Banco=021
CuentaBancaria=1234567890
FechaInicioRelLaboral=2016-01-01
NumSeguridadSocial=04078873454
Puesto=Desarrollador
RiesgoPuesto=2
SalarioBaseCotApor=435.50
SalarioDiarioIntegrado=435.50
[nomina12.Percepciones]
TotalGravado=250.00
TotalExento=250.00
TotalSueldos=500.00
[nomina12.Percepciones.0]
TipoPercepcion=001
Clave=001
Concepto=Sueldos, Salarios Rayas y Jornales
ImporteGravado=250.00
ImporteExento=250.00
[nomina12.Percepciones.AccionesOTitulos]
ValorMercado=0.00
PrecioAlOtorgarse=0.00
[nomina12.Deducciones]
TotalOtrasDeducciones=150.00
TotalImpuestosRetenidos=100.00
[nomina12.Deducciones.0]
TipoDeduccion=002
Clave=001
Concepto=ISR
Importe=100.00
Ejemplo con CSharp
DLL compatible con .net, aqui un ejemplo de parámetros con csharp
MFObject nomina = new MFObject("Nomina");
nomina["TipoNomina"] = "O";
nomina["FechaPago"] = "2016 - 10 - 31";
nomina["FechaInicialPago"] = "2016-10-16";
nomina["FechaFinalPago"] = "2016-10-31";
nomina["NumDiasPagados"] = "15";
nomina["TotalPercepciones"] = "7500.05";
nomina["TotalDeducciones"] = "1234.09";
nomina["TotalOtrosPagos"] = "0.0";
//receptor de nómina
MFObject nreceptor = new MFObject("Receptor");
nreceptor["ClaveEntFed"] = "JAL";
nreceptor["Curp"] = "CACF880922HJCMSR03";
nreceptor["NumEmpleado"] = "060";
nreceptor["PeriodicidadPago"] = "04";
nreceptor["TipoContrato"] = "01";
nreceptor["TipoRegimen"] = "02";
nreceptor["Antigüedad"] = "P21W";
nreceptor["Banco"] = "021";
nreceptor["CuentaBancaria"] = "1234567890";
nreceptor["Departamento"] = "";
nreceptor["FechaInicioRelLaboral"] = "2016-06-01";
nreceptor["NumSeguridadSocial"] = "04078873454";
nreceptor["Puesto"] = "Desarrollador";
nreceptor["RiesgoPuesto"] = "2";
nreceptor["SalarioBaseCotApor"] = "435.50";
nreceptor["SalarioDiarioIntegrado"] = "435.50";
nreceptor["Sindicalizado"] = "";
nreceptor["TipoJornada"] = "";
//subcontratación
MFObject subcontratacion = new MFObject("SubContratacion");
subcontratacion["RfcLabora"] = "VOC990129I26";
subcontratacion["PorcentajeTiempo"] = "100.00";
nreceptor.AgregaSubnodo(subcontratacion);
nomina.AgregaSubnodo(nreceptor);
//emisor de nómina
MFObject nemisor = new MFObject("Emisor");
nemisor["RegistroPatronal"] = "5525665412";
//Complemento NominaGobierno
MFObject entidad = new MFObject("EntidadSNCF");
entidad["OrigenRecurso"] = "IF";
nemisor.AgregaSubnodo(entidad);
nomina.AgregaSubnodo(nemisor);
//percepciones de nómina
MFObject npercepciones = new MFObject("Percepciones");
npercepciones["TotalGravado"] = "7500.05";
npercepciones["TotalExento"] = "0.00";
npercepciones["TotalSueldos"] = "7500.05";
npercepciones["TotalSeparacionIndemnizacion"] = "15000.00";
npercepciones["TotalJubilacionPensionRetiro"] = "21300.00";
MFObject nper0 = new MFObject("0");
nper0["TipoPercepcion"] = "001";
nper0["Clave"] = "001";
nper0["Concepto"] = "Sueldos, Salarios Rayas y Jornales";
nper0["ImporteGravado"] = "6250.05";
nper0["ImporteExento"] = "0.00";
MFObject nper1 = new MFObject("1");
nper1["TipoPercepcion"] = "049";
nper1["Clave"] = "014";
nper1["Concepto"] = "Premios de asistencia";
nper1["ImporteGravado"] = "625.00";
nper1["ImporteExento"] = "0.00";
MFObject nper2 = new MFObject("2");
nper2["TipoPercepcion"] = "010";
nper2["Clave"] = "013";
nper2["Concepto"] = "Premios por puntualidad";
nper2["ImporteGravado"] = "625.00";
nper2["ImporteExento"] = "0.00";
//Complemento horas extra
MFObject horasextra = new MFObject("HorasExtra");
MFObject hora0 = new MFObject("0");
hora0["Dias"] = "2";
hora0["TipoHoras"] = "01";
hora0["HorasExtra"] = "8";
hora0["ImportePagado"] = "105.70";
MFObject hora1 = new MFObject("1");
hora1["Dias"] = "1";
hora1["TipoHoras"] = "02";
hora1["HorasExtra"] = "6";
hora1["ImportePagado"] = "1000.00";
horasextra.AgregaSubnodo(hora0);
horasextra.AgregaSubnodo(hora1);
nper2.AgregaSubnodo(horasextra);
MFObject percepcion3 = new MFObject("3");
percepcion3["TipoPercepcion"] = "045";
percepcion3["Clave"] = "045";
percepcion3["Concepto"] = "Premios por puntualidad";
percepcion3["ImporteGravado"] = "3000.00";
percepcion3["ImporteExento"] = "0.00";
//Complemento acciones
MFObject acciones = new MFObject("AccionesOTitulos");
acciones["ValorMercado"] = "1000.00";
acciones["PrecioAlOtorgarse"] = "2000.00";
percepcion3.AgregaSubnodo(acciones);
npercepciones.AgregaSubnodo(nper0);
npercepciones.AgregaSubnodo(nper1);
npercepciones.AgregaSubnodo(nper2);
npercepciones.AgregaSubnodo(percepcion3);
//Complemento jubilación
MFObject jubilacion = new MFObject("JubilacionPensionRetiro");
jubilacion["IngresoAcumulable"] = "1000.00";
jubilacion["IngresoNoAcumulable"] = "300.00";
jubilacion["TotalUnaExhibicion"] = "20000.00";
npercepciones.AgregaSubnodo(jubilacion);
//Complemento separación
MFObject separacion = new MFObject("SeparacionIndemnizacion");
separacion["TotalPagado"] = "15000.00";
separacion["NumAñosServicio"] = "3";
separacion["UltimoSueldoMensOrd"] = "5000.00";
separacion["IngresoAcumulable"] = "3000.00";
separacion["IngresoNoAcumulable"] = "1000.00";
npercepciones.AgregaSubnodo(separacion);
nomina.AgregaSubnodo(npercepciones);
//deducciones de nómina
MFObject ndeducciones = new MFObject("Deducciones");
ndeducciones["TotalOtrasDeducciones"] = "179.34";
ndeducciones["TotalImpuestosRetenidos"] = "1054.75";
MFObject nded0 = new MFObject("Nomina.Deducciones.0");
nded0["TipoDeduccion"] = "002";
nded0["Clave"] = "001";
nded0["Concepto"] = "ISR";
nded0["Importe"] = "1054.75";
MFObject nded1 = new MFObject("1");
nded1["TipoDeduccion"] = "001";
nded1["Clave"] = "012";
nded1["Concepto"] = "Seguridad social";
nded1["Importe"] = "179.34";
ndeducciones.AgregaSubnodo(nded0);
ndeducciones.AgregaSubnodo(nded1);
nomina.AgregaSubnodo(ndeducciones);
//Complemento otros pagos
MFObject pagos = new MFObject("OtrosPagos");
MFObject pago0 = new MFObject("0");
pago0["TipoOtroPago"] = "002";
pago0["Clave"] = "012";
pago0["Concepto"] = "Subsidio para el empleo";
pago0["Importe"] = "5000.00";
//Complemento subsidio
MFObject subsidio = new MFObject("SubsidioAlEmpleo");
subsidio["SubsidioCausado"] = "5000.00";
//Compensación saldos a favor
MFObject compensacion = new MFObject("CompensacionSaldosAFavor");
compensacion["SaldoAFavor"] = "300.00";
compensacion["Año"] = "2017";
compensacion["RemanenteSalFav"] = "100.00";
pago0.AgregaSubnodo(compensacion);
pago0.AgregaSubnodo(subsidio);
pagos.AgregaSubnodo(pago0);
nomina.AgregaSubnodo(pagos);
// Incapacidades
MFObject incapacidades = new MFObject("Incapacidades");
MFObject incapacidad0 = new MFObject("0");
incapacidad0["DiasDeIncapacidad"] = "2";
incapacidad0["TipoIncapacidad"] = "01";
incapacidad0["ImporteMonetario"] = "300.00";
incapacidades.AgregaSubnodo(incapacidad0);
nomina.AgregaSubnodo(incapacidades);
Ejemplo con Visual Basic
sdk = New MFSDK()
sdk.Iniciales.Add("version_cfdi", "3.3")
sdk.Iniciales.Add("complemento", "nomina12")
sdk.Iniciales.Add("MODOINI", "DIVISOR")
sdk.Iniciales.Add("cfdi", "C:\sdk2\timbrados\cfdi_ejemplo_factura_nomina" + ".xml")
sdk.Iniciales.Add("xml_debug", "C:\sdk2\timbrados\sin_timbrar_ejemplo_factura_nomina" + ".xml")
sdk.Iniciales.Add("remueve_acentos", "NO")
sdk.Iniciales.Add("RESPUESTA_UTF8", "SI")
sdk.Iniciales.Add("html_a_txt", "NO")
Dim factura As New MFObject("factura")
factura("serie") = "F"
factura("folio") = "123"
factura("fecha_expedicion") = DateTime.Now.ToString("s")
factura("metodo_pago") = "PUE"
factura("forma_pago") = "99"
factura("tipocomprobante") = "N"
factura("moneda") = "MXN"
factura("tipocambio") = "1"
factura("LugarExpedicion") = "27000"
factura("RegimenFiscal") = "601"
factura("subtotal") = "500.00"
'100.00
factura("descuento") = "0.00"
factura("total") = "500.00"
'100.00
Dim cfdiRelacionados As New MFObject("CfdiRelacionados")
Dim cfdirel As New MFObject("UUID")
cfdiRelacionados("TipoRelacion") = "01"
'Se pueden agregar varios relacionados con UUID
cfdirel("0") = "9FB6ED1A-5F37-4FEF-980A-7F8C83B51894"
cfdirel("1") = "4329C28A-FEDB-9016-754A-FACEB0041996"
cfdiRelacionados.AgregaSubnodo(cfdirel)
Dim emisor As New MFObject("emisor")
'emisor["rfc"] = "LAN7008173R5";
'emisor["nombre"] = "General";
emisor("rfc") = "LAN7008173R5"
emisor("nombre") = "CINDEMEX SA DE CV"
emisor("RegimenFiscal") = "601"
Dim receptor As New MFObject("receptor")
receptor("rfc") = "SOHM7509289MA"
receptor("nombre") = "MIGUEL ANGEL SOSA HERNANDEZ"
receptor("UsoCFDI") = "P01"
' Concepto Normal
Dim conceptos As New MFObject("conceptos")
Dim concepto0 As New MFObject("0")
concepto0("ClaveProdServ") = "84111505"
concepto0("ClaveUnidad") = "ACT"
concepto0("Cantidad") = "1"
concepto0("Descripcion") = "Pago de nómina"
concepto0("ValorUnitario") = "500.00"
concepto0("Importe") = "500.00"
conceptos.AgregaSubnodo(concepto0)
Dim nomina As New MFObject("nomina12")
nomina("TipoNomina") = "O"
nomina("FechaPago") = "2016-10-31"
nomina("FechaInicialPago") = "2016-10-16"
nomina("FechaFinalPago") = "2016-10-31"
nomina("NumDiasPagados") = "15"
nomina("TotalPercepciones") = "500.00"
nomina("TotalDeducciones") = "250.00"
nomina("TotalOtrosPagos") = "0.0"
'receptor de nómina
Dim nreceptor As New MFObject("Receptor")
nreceptor("ClaveEntFed") = "JAL"
nreceptor("Curp") = "CACF880922HJCMSR03"
nreceptor("NumEmpleado") = "060"
nreceptor("PeriodicidadPago") = "04"
nreceptor("TipoContrato") = "01"
nreceptor("TipoRegimen") = "02"
nreceptor("Antigüedad") = "P21W"
nreceptor("Banco") = "021"
nreceptor("CuentaBancaria") = "1234567890"
nreceptor("FechaInicioRelLaboral") = "2016-06-01"
nreceptor("NumSeguridadSocial") = "04078873454"
nreceptor("Puesto") = "Desarrollador"
nreceptor("RiesgoPuesto") = "2"
nreceptor("SalarioBaseCotApor") = "435.50"
nreceptor("SalarioDiarioIntegrado") = "435.50"
nomina.AgregaSubnodo(nreceptor)
'emisor de nómina
Dim nemisor As New MFObject("Emisor")
nemisor("RegistroPatronal") = "546879213"
nomina.AgregaSubnodo(nemisor)
'percepciones de nómina
Dim npercepciones As New MFObject("Percepciones")
npercepciones("TotalGravado") = "250.00"
npercepciones("TotalExento") = "250.00"
npercepciones("TotalSueldos") = "500.00"
Dim nper0 As New MFObject("0")
nper0("TipoPercepcion") = "001"
nper0("Clave") = "001"
nper0("Concepto") = "Sueldos, Salarios Rayas y Jornales"
nper0("ImporteGravado") = "200.00"
nper0("ImporteExento") = "250.00"
Dim nper1 As New MFObject("1")
nper1("TipoPercepcion") = "049"
nper1("Clave") = "014"
nper1("Concepto") = "Premios de asistencia"
nper1("ImporteGravado") = "25.00"
nper1("ImporteExento") = "0.00"
Dim nper2 As New MFObject("2")
nper2("TipoPercepcion") = "010"
nper2("Clave") = "013"
nper2("Concepto") = "Premios por puntualidad"
nper2("ImporteGravado") = "25.00"
nper2("ImporteExento") = "0.00"
npercepciones.AgregaSubnodo(nper0)
npercepciones.AgregaSubnodo(nper1)
npercepciones.AgregaSubnodo(nper2)
nomina.AgregaSubnodo(npercepciones)
'deducciones de nómina
Dim ndeducciones As New MFObject("Deducciones")
ndeducciones("TotalOtrasDeducciones") = "150.00"
ndeducciones("TotalImpuestosRetenidos") = "100.00"
Dim nded0 As New MFObject("0")
nded0("TipoDeduccion") = "002"
nded0("Clave") = "001"
nded0("Concepto") = "ISR"
nded0("Importe") = "100.00"
Dim nded1 As New MFObject("1")
nded1("TipoDeduccion") = "001"
nded1("Clave") = "012"
nded1("Concepto") = "Seguridad social"
nded1("Importe") = "150.00"
ndeducciones.AgregaSubnodo(nded0)
ndeducciones.AgregaSubnodo(nded1)
nomina.AgregaSubnodo(ndeducciones)
sdk.AgregaObjeto(PAC())
sdk.AgregaObjeto(Conf())
sdk.AgregaObjeto(factura)
sdk.AgregaObjeto(cfdiRelacionados)
sdk.AgregaObjeto(emisor)
sdk.AgregaObjeto(receptor)
sdk.AgregaObjeto(conceptos)
sdk.AgregaObjeto(nomina)