Tuesday, June 3, 2014

CFDI

Que es un CFD.

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;
    }

}



2 comments:

  1. This comment has been removed by the author.

    ReplyDelete

  2. @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:

    ReplyDelete