Como le hago para la CFD(factura digital) con sql server y mysql con hibernate + dom, algunos consejos por lo menos?

Hola a todos

Tengo un proyecto que hacer el cual es generar la factura digital, la base de datos ya esta hecha, la pasaron de access a sql server (base de datos de cliente, detalle, articulos, etc) y la otra la hice en mysql (la de los folios), el problema está en que tengo que generar el CFD, me dicen que use hibernate, yo la verdad soy nuevo en hibernate y he estado documentandome y aparte tengo que generar el archivo xml con dom de java, lo que les quiero preguntar que me recomiendan hacer la verdad aun estoy novaton, no se me ayudaria mucho dandome ideas sobre todo para generar el xml, quizas hay una api mejor, más documentada?,

Ya tengo una idea más o menos sería hacer que hibernate mapear esas 2 bases de datos, y después hacer el xml, aun asi espero oir sus ideas.

Espero sus comentarios y gracias de antemano por responder

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Nopalin

Leer!!

Una cosa es la CFD y otra las bases de datos donde almacenes la información.

Primero lee y entiende lo que es la CFD, el agloritmo para generarla y para que sirve. Una vez que hayas entendido eso, vas a ver que lo que estas preguntando ya no tendrá sentido.

Generar Factura Digital en Java
SAT

sobres

Un poco de informacion

Me imagino que usas la DB unicamente para folios porque no le pudes mover a la que tienen en SQL server, resultaria mas costoso mantener dos bases de datos y ademas no tiene tanto sentido usar una DB con una tabla sin relacionarse.

Mi experiencia en CFD es que necesitaras relacionar la serie con la empresa, los folios tambien tienen numeros de autorizacion por SAT, la serie debe estar vinculada a un certificado (CSD). Por cierto las series tienen limites de folio por lo que yo veo que lo primero que necesitas es definir los datos que necesitas manipular.

Si tienes la DB describela porque bien me va que tengas o no la DB si no la muestras y pos no se puede recomendar nada asi a ciegas.

Para la conexion de la base de datos yo uso Hibernate y le hago la inyeccion de dependencias con Spring, uso tambien struts para MVC y la parte de presentacion EXTJS, bueno una vez hubo un hilo aqui de "cuales son las mejores tecnologias para trabajar con java" pero pues ahi depende tanto de tu criterio como de la disposicion de imlementacion, si tienes libertad de decidir te recomiendo esas que mencione. hago vinculo al hilo que te hable: http://www.javamexico.org/foros/java_enterprise/que_framework_tecnologia

Bueno para la parte de la generacion de XML utiliza la API propia de Java pues es facil (aunque tambien puedes usar JDom que tambien es facil) yo prefiero la API de Java directamente porque a mi criterio es mas facil manipularlo y mas cuando tienes que agregar los namespaces y diversos XSD y la addenda y esas cosas adicionales que se les mete al cfd

para la criptografia pues tienes que masticarte muy muy bien el anexo 20 (aunque no sirve de mucho pero tienes que conocer bien las especificaciones de la firma, a eso me refiero). que tu firma sea RSA y blah blah,, el punto aqui es que recomiendo uses java.security.Signature el cual ya te permite realizar directamente el MD5 con el RSA y derechito te lo da en un byte[] para que lo expreses en base 64

para la validacion contra XSD pues tambien lo propio de Java va muy bien. javax.xml.validation.Validator

en la base de datos pues no se como jale el SQL server, ademas no se cuantas transacciones necesitas en un momento pico

considera tambien los reportes mensuales, las cancelaciones, las revocaciones de certificados

y las respectivas validaciones de folios, certificados, y estructura xml

saludos

estoy de acuerdo contigo me

estoy de acuerdo contigo me debo documentar más, ya entiendo como hacer el sello digital, lo hago con common ssl de apache, pero aun tengo problemas para ver como voy a usar las bases de datos para generar el xml.
Gracias por contestar

Gracias por contestar, estoy

Gracias por contestar, estoy trabajando con eso todavia si me queda les digo luego como me va, o regreso ya con algo hecho para preguntarles :)

saludos

Imagen de ezamudio

common ssl?

um... apache no tiene commons ssl. Tal vez te refieres al not-yet-commons-ssl de Julius Davies...

Mala idea

uy, yo lo veo mala idea lo de not-yet-commons, vi la pagina y viene una enorme advertencia:
Warning: not-yet-commons-ssl-0.3.11 should be considered to be of "Alpha" quality! This code probably contains bugs. This code may have security issues.

pues para probar quizas te vaya perfecto pero quien sabe que escenarios pueda tener que te generen una mala firma y eso pues si no te das cuenta puede que firmes 1000 folios con una firma rara y veas a los clientes reclamando y hasta deteniendo el pago de la factura. Fiscalmente es de cuidado porque ahora con 1000 folios invalidos tendrias que hacer cancelacion de los mismos y no se si tu empresa contablemente no tenga problemas para perder folios. esto lo digo porque hay empresas que llevan su conta en erp que como no saben que ya hay factura electronica pues hacen sus famosas facturas preimpresas y eso si tiene que ir a la par con la electronica. El punto es que podria ser molesto muy muy molesto incluso firmar incorrectamente una factura, ahora imaginate mi escenario pesimista con 1000

mi recomendacion es que te vayas por la de java o hay otra que tambien recomiendo http://www.bouncycastle.org/ anque el problema ahi es que nunca pude cargar los CSD quien sabe como se haga, no le busque mucho, pero la firma nunca fallo

a modo de comentario agrego que una mala idea seria usar openssl pues se tendria que usar comandos usando el runtime y usar comandos de terminal para que te genere el archivo y esperar a que lea el archivo y leerlo y bueno, muy costoso en cuanto a tiempo se refiere (y recursos) pero eso si, firma de pocajefa el openssl y nunca me fallo tampoco

hay manera de formatear el xmlGregorianCalendar?

Hola a todos soy nuevo en el foro, alguien me puede orientar para formatear un xmlGregorianCalendar, se que se puede hacer con un SimpleDateFormat pero el resultado queda en un String, el caso es el siguiente: estoy utilizando jaxb para generar los objetos java del comprobante del archivo cfdv2.xsd una vez instanciado el objeto Comprobante en su campo fecha me pide un dato tipo xmlGregorianCalenar y esto me proboca que al generar el XML con unmarshaller me agrega el time zone a la fecha, alguien me puede dar una idea de que puedo hacer....

de antemano muchas gracias....

Imagen de zundarley

ya no se utiliza el md5

hola actualmente me encuentro desarrollando la cfdi de acuerdo a los nuevos lineamientos del anexo 20, y cabe resaltar que la digestion de la cadena original ya no se realiza por medio del md5 ahora es por EL SHA-1 un hash el cual es la unica parte que a cambiado, y siguiendo con el consejo utilizar el api de java para generar los xml es al forma mas practica.

me retiro por el momento, ke tena un execelente inicio en su dia.

Imagen de zundarley

xk no

xk no le das el formato a la fecha antes de agregarlo al xml seria lo ideono, ya ek asi solo utilizarias como la funcion basica de xml la representacion de uan serie de infromacion,

Sobre las CFD y CFDI

Que tal mi amigo,

si esats desarrollando el sistema para ti o para algun cliente, te recomiendo que ademas te informes sobre las nuevas disposiciones del SAT en mexico, debido a que por ley los proveedores de Facturación Electronica deben ser certificados PAC, ninguna empresa o proveedor que nos e encuentre en la lista oficial de hacienda del gobierno federal no podra expedir un documento CFDI

saludos y suerte con tu proyecto.
Alex

Imagen de jasistemas

Sobre los PAC

Muchos PAC estan trabajando con implementadores, esto es, que prestan el servicio de "timbrado" o "sellado y timbrado" y los implementadores hacen el resto (captura, mantenimiento, almacenamiento), generacion de pdfs. Asi, los desarrolladores pueden seguir ofreciendo sus servicios notificandoles al cliente con que PAC estan trabajando.