Es un comprobante fiscal digital.
http://www.sat.gob.mx/informacion_fiscal/factura_electronica/Paginas/requistos_cfd_electronico.aspx
Que es un CFDI
Es un comprobante fiscal firmado
Como creo un CFD
Pasos:
1- Obtengo el XSD
http://www.sat.gob.mx/cfd/3/cfdv32.xsd
2.- Con Jaxb genero el Comprobante o con xjc.
3. - Genero el Comprobante
Comprobante comprobante = new Comprobante();
comprobante.setVersion("3.2");
comprobante.setSerie("HDS");
comprobante.setFolio("3");
/* SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'hh:mm:ss");
comprobante.setFecha(sdf.format(Calendar.getInstance()));
*
*/
comprobante.setTipoDeComprobante("egreso");
comprobante.setFormaDePago("PAGO EN UNA SOLA EXHIBICIÓN");
comprobante.setCondicionesDePago("CONTADO");
comprobante.setMetodoDePago("Efectivo");
comprobante.setNoCertificado("20001000000200001745");
comprobante.setSubTotal(new BigDecimal(4716.08));
comprobante.setDescuento(new BigDecimal(864.21));
comprobante.setMotivoDescuento("Deducciones nómina");
comprobante.setTipoCambio("1.00");
comprobante.setMoneda("MXP");
comprobante.setTotal(new BigDecimal(3506.00));
comprobante.setLugarExpedicion("MONTEMORELOS, NUEVO LEÓN");
Emisor emisor = new Emisor();
emisor.setRfc("UMO8409105C1");
emisor.setNombre("UNIVERSIDAD DE MONTEMORELOS, A.C.");
// DomicilioFiscal domicilio = new DomicilioFiscal("Libertad Pte.", "1300", "Barrio Matamoros", "Montemorelos");
// emisor.setDomicilioFiscal(domicilio);
// RegimenFiscal regimen = new RegimenFiscal("PERSONAS MORALES DEL REGIMEN FISCAL");
// emisor.setRegimenFiscal(regimen);
// emisor.setExpedidoEn(new ExpedidoEn());
comprobante.setEmisor(emisor);
ImpuestosLocales imp = new ImpuestosLocales();
imp.setTotaldeRetenciones(new BigDecimal(10.10));
imp.setVersion("1");
impuesto.ImpuestosLocales.RetencionesLocales rt = new impuesto.ImpuestosLocales.RetencionesLocales();
rt.setImpLocRetenido("ISN");
rt.setImporte(BigDecimal.ZERO);
rt.setTasadeRetencion(BigDecimal.ZERO);
imp.getRetencionesLocalesAndTrasladosLocales().add(rt);
Comprobante.Complemento comp = new Comprobante.Complemento();
List<Object> list = comp.getAny();
list.add(imp);
4. Serializar XSD a un String
JAXBContext context = JAXBContext.newInstance(Comprobante.class);
Marshaller m = context.createMarshaller();
NamespacePrefixMapper mapper = new MyNamespacePrefixMapper();
m.setProperty("com.sun.xml.internal.bind.namespacePrefixMapper", mapper);
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.setProperty(Marshaller.JAXB_SCHEMA_LOCATION, "http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd");
// Write to System.out
m.marshal(comprobante, System.out);
5. Generar MyNamespacePrefixMapper para incluir cfdi como prefix.
class MyNamespacePrefixMapper extends NamespacePrefixMapper {
public MyNamespacePrefixMapper() {
}
@Override
public String getPreferredPrefix(String uri, String suggestion, boolean requirePrefix) {
if (uri.equals("http://www.sat.gob.mx/cfd/3")) {
return "cfdi";
}
return suggestion;
}
}
This comment has been removed by the author.
ReplyDelete
ReplyDelete@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.sat.gob.mx/cfd/3",xmlns = {
@XmlNs(prefix = "cfdi", namespaceURI = "http://www.sat.gob.mx/cfd/3")
}, elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED)
package mx.gob.sat.cfd._3;
import javax.xml.bind.annotation.XmlNs;
en ....../jaxb/mx/gob/sat/cfd/_3/package-info.java: