AYUDA, Facturación Electronica en Costa Rica. Envio de JSON.

3,267 views
Skip to first unread message

Geovanni Solís Perez

unread,
Dec 23, 2017, 5:38:33 PM12/23/17
to Comunidad de Visual Foxpro en Español
Saludos a todos,  en Costa Rica, inicia la obligatoriedad de Facturación Electrónica, tenemos varios INTEGRADORES que solicitan se envían los datos de la factura y ellos se encargan de validar, montar el xml y el pdf del cliente, hemos visitado varios proveedores y estamos haciendo pruebas, uno de estos proveedores, tiene una plataforma interesante y nos gustaria trabajar con ellos, pero nos solicita le enviemos el JSON pero el Web Server nos indica que debe ser enviado mediante una conexion HTTPS. pero sinceramente no tengo ni la menor idea de como hacerlo ya que siembre nuestras aplicaciones han sido creadas para escritorio y no para internet.
Si alguno ha logrado algo así seria de gran ayuda o si me indican algún tema para investigar.

Muchas Gracas de antemano.

Geovanni Solis.

PD. Estamos usando lo siguiente para enviar el JSON: Pero nos devuelve HTTPS es requerido. 
*------------------------------------------------------------------------------------------------------------------------*
LOCAL lOk, oHTTP, cURL, cDATA, cResponse

TRY
   cURL = 'http://www.xxxxxxxxxxxxxxx.com/api/makeXML.stag.42'

   oHTTP = CREATEOBJECT('Msxml2.ServerXMLHTTP.6.0')

   oHTTP.OPEN('POST', cURL, .F.)

   oHTTP.setRequestHeader ('Content-Type', 'application/json')
   oHTTP.SEND(cJSON)
   lOk = .T.		
CATCH TO loErr
   cResponse = '{ "Error:" '+ TRANSFORM(loErr.ErrorNo) + loErr.MESSAGE+'}'
ENDTRY
	
IF lOk
   IF oHTTP.STATUS = 200
      cResponse = oHTTP.responseText
   ELSE
      cResponse = '{"Error": "No se logro la conexion con el Web Service.'+oHTTP.responseText+'"}'
      lOk = .F.
   ENDIF
ENDIF

oHTTP = NULL

MESSAGEBOX(cResponse)



Gerardo Cagnola

unread,
Dec 23, 2017, 5:44:18 PM12/23/17
to publice...@googlegroups.com
revisá la url que te enviaron, porque enviás http y no https en la variable curl...
o sea, a mi parecer está bastante explicativo el mensaje devuelto

Geovanni Solís Perez

unread,
Dec 23, 2017, 6:02:58 PM12/23/17
to Comunidad de Visual Foxpro en Español

Geovanni Solís Perez

unread,
Dec 23, 2017, 6:07:22 PM12/23/17
to Comunidad de Visual Foxpro en Español
Ya los revisé y todos los que me enviaron son http:      ninguno es https,  

Gracias por la observación.

Geovanni Solis.

Gerardo Cagnola

unread,
Dec 23, 2017, 6:10:56 PM12/23/17
to publice...@googlegroups.com
lo probaste con https?

Geovanni Solís Perez

unread,
Dec 23, 2017, 6:30:29 PM12/23/17
to publice...@googlegroups.com
Se realizaron pruebas haciendo el cambio, y da otro error que no recuerdo, lo voy a hacer nuevamente y paso el error que me da.  
Yo considero que el proveedor deberia tener un sitio https y uno conectarse a ese sitio, creo que es lo lógico o me equivoco.

Libre de virus. www.avast.com

Gerardo Cagnola

unread,
Dec 23, 2017, 6:37:46 PM12/23/17
to publice...@googlegroups.com
es lo lógico...

Ronny Solano

unread,
Jan 2, 2018, 11:50:54 PM1/2/18
to publice...@googlegroups.com
Saludos Geovanny y colegas de Costa Rica, tambien tengo que entrarle a este tema para estos días... que les parece si nos reunimos para compartir experiencias... yo trabajo en un Hotel en San Jose, por lo que puede colaborar con una sala de reuniones para varias personas, si estan de acuerdo me indican y lo coordinamos.

Saludos a todos....

Hernan Serrano

unread,
Jan 3, 2018, 6:24:35 AM1/3/18
to publice...@googlegroups.com
Gracias compañero.

El asunto aca. Es que en hacienda la cosa esta que no se entiende. No quieren dar información y cuando la dan es totalmente dispersa.
--
Tico Support S. A.
Tel. (506)8772-6170

roberto

unread,
Jan 3, 2018, 5:26:33 PM1/3/18
to Comunidad de Visual Foxpro en Español
Buenas tardes compañeros. Soy de Costa Rica y también estoy en la misma situación que ustedes. Todas mis aplicaciones son tipo escritorio, tengo ya varios clientes que me han pedido que les haga una aplicación para la factura electrónica y como dicen ustedes en Hacienda, ingresa uno a la página y esta no dice nada.

Desconozco totalmente, que información debo enviar, como enviarla, a donde enviarla. Sería interesante Ronny, poder reunirnos y ver como podemos solucionar el problema. He pedido ayuda a contadores y están en la misma situación, no saben nada.

Yo me apunto mis datos son los siguiente:

Roberto Matarrita
Tel. 8862-5244

Gustavo Mora Rivera

unread,
Jan 3, 2018, 6:04:31 PM1/3/18
to publice...@googlegroups.com
man,, eso es un chorizo para obligar a usar las empresas amigas de la gente de hacienda..
y el colegio de contadores, ni el de informaticos se pronuncian para que sea mas transparente el asunto...
solo te pasan un monton de links con info que no dice NADA en realidad

Rodolfo Arias

unread,
Jan 3, 2018, 7:36:39 PM1/3/18
to publice...@googlegroups.com
Hola Geovanni y compañeros ticos del foro, igual situación en esta semana uno de mis clientes me solicita ver el tema, la idea que ellos tienen es trasmitir directamente sin usar proveedores intermediarios, pero los datos son de muchas generalidades, sería interesante reunirnos y entre todos organizarnos, apoyarnos y hacer nuestras investigaciones y al final generar las apps necesarias, como hicieron nuestros compañeros de México y Ecuador. 

Ronny póngale fecha y miremos si podemos enfrentar el proyecto desde varios puntos, uno de ellos es conseguir que hacienda nos atienda y nos de algo sustancial y luego resolver la programación del mismo.

Hernan Serrano

unread,
Jan 4, 2018, 8:47:14 AM1/4/18
to publice...@googlegroups.com
Yo ya tengo algo avanzado.

Por lo menos se. Que para ingresar al ATV, asi se llama la pagina se necesita un usuario que sea contribuyente de lo contrario no se pueden hacer pruebas.
Ya tengo procedimientos para enviar el usuario y la contraseña y que devuelva la autorizacion.
No he podido hacer pruebas puesto que no brindan usuarios de pruebas para el Sanbox, que es el area de pruebas.
Sin embargo puedo compartir lo que tengo hasta ahora.


Geovanny Quirós Castillo

unread,
Jan 4, 2018, 9:00:59 AM1/4/18
to publice...@googlegroups.com
Buenos días Hernán y compañeros,
 
se agradece cualquier avance puesto que todos vamos en esa misma línea.
 
Saludos,

Rodolfo Arias

unread,
Jan 4, 2018, 10:55:35 AM1/4/18
to publice...@googlegroups.com
Hernan gracias, en lo que puedas colaborar sería excelente para empezar, pero no estaría mal siempre sugiero reunirnos o si hay limitaciones de traslado manejarnos por correo y Whatsapp.

Oscar Quiros Coto

unread,
Jan 4, 2018, 3:10:51 PM1/4/18
to Comunidad de Visual Foxpro en Español
Buenas tardes, me uno a ustedes, tengo varios clientes que necesitan la facturación electrónica, y  en lo personal también.
Me gustaría hacerlo directo sin intermediarios, he solicitado información a hacienda pero no responden, supongo que aun están de vacaciones.
Hay muchos proveedores que dan el servicio, de tal manera que supongo que no es tan complicado, ver en http://www.gs1cr.org/cm-business-directory/?cmcats=factura-electronica

Saludos cordiales y estaré atento a los avances de este hilo.

Hernan Serrano

unread,
Jan 4, 2018, 4:44:50 PM1/4/18
to publice...@googlegroups.com
Esa es la idea tener una reunion. Y ver en que podemos cooperar.

El 4 de enero de 2018, 9:53, Rodolfo Arias <ari...@gmail.com> escribió:
Hernan gracias, en lo que puedas colaborar sería excelente para empezar, pero no estaría mal siempre sugiero reunirnos o si hay limitaciones de traslado manejarnos por correo y Whatsapp.

Hernan Serrano

unread,
Jan 4, 2018, 4:45:18 PM1/4/18
to publice...@googlegroups.com
La idea es apoyarnos entre todos.

Hernan Serrano

unread,
Jan 4, 2018, 9:37:24 PM1/4/18
to publice...@googlegroups.com
Lo siguiente es lo que tengo hasta ahora.
*!* 1×× Informational
*!* 100 Continue
*!* 101 Switching Protocols
*!* 102 Processing
*!* 2×× Success
*!* 200 OK
*!* 201 Created
*!* 202 Accepted
*!* 203 Non-authoritative Information
*!* 204 No Content
*!* 205 Reset Content
*!* 206 Partial Content
*!* 207 Multi-Status
*!* 208 Already Reported
*!* 226 IM Used
*!* 3×× Redirection
*!* 300 Multiple Choices
*!* 301 Moved Permanently
*!* 302 Found
*!* 303 See Other
*!* 304 Not Modified
*!* 305 Use Proxy
*!* 307 Temporary Redirect
*!* 308 Permanent Redirect
*!* 4×× Client Error
*!* 400 Bad Request
*!* 401 Unauthorized
*!* 402 Payment Required
*!* 403 Forbidden
*!* 404 Not Found
*!* 405 Method Not Allowed
*!* 406 Not Acceptable
*!* 407 Proxy Authentication Required
*!* 408 Request Timeout
*!* 409 Conflict
*!* 410 Gone
*!* 411 Length Required
*!* 412 Precondition Failed
*!* 413 Payload Too Large
*!* 414 Request-URI Too Long
*!* 415 Unsupported Media Type
*!* 416 Requested Range Not Satisfiable
*!* 417 Expectation Failed
*!* 418 I'm a teapot
*!* 421 Misdirected Request
*!* 422 Unprocessable Entity
*!* 423 Locked
*!* 424 Failed Dependency
*!* 426 Upgrade Required
*!* 428 Precondition Required
*!* 429 Too Many Requests
*!* 431 Request Header Fields Too Large
*!* 444 Connection Closed Without Response
*!* 451 Unavailable For Legal Reasons
*!* 499 Client Closed Request
*!* 5×× Server Error
*!* 500 Internal Server Error
*!* 501 Not Implemented
*!* 502 Bad Gateway
*!* 503 Service Unavailable
*!* 504 Gateway Timeout
*!* 505 HTTP Version Not Supported
*!* 506 Variant Also Negotiates
*!* 507 Insufficient Storage
*!* 508 Loop Detected
*!* 510 Not Extended
*!* 511 Network Authentication Required
*!* 599 Network Connect Timeout Error
*Autenticación y Autorización
*De acuerdo a la documentación referida previamente el primer paso para conectarse a la plataforma es obtener un Open ID Connect (OIDC.) Token que funciona sobre el estándar de OAuth 2.0.

*Para ello, en ATV. se consigna que la dirección del IDP. a emplear en el entorno de pruebas es:


*Inicialmente se debe definir cuál es el URI. del IDP., el CLIENT ID, el usuario (que corresponde a la identificación del contribuyente) y su credencial.
CLEAR

*SET STEP ON 
*SET PROCEDURE TO qdfoxJSON.prg 
lcMETHOD      = "POST"
IDP_CLIENT_ID = "api-stag"
pwd           = ""&&'miClave'


lcPARAM1 = "grant_type" 
lcDATA1  = "password"

lcPARAM2 = "username"
*Lo genera el ATV en la opcion:
Imágenes integradas 2
lcPARAM3 = "password"
*Lo genera el ATV en la opcion:
lcDATA3  = 'XXXXXXXXXXXX*'

Imágenes integradas 3


lcPARAM4 = "client_id"
lcDATA4  = "api-stag"


=USE_RESTFUL(lcURL, lcMETHOD, lcPARAM1, lcDATA1, lcPARAM2, lcDATA2, lcPARAM3, lcDATA3, lcPARAM4, lcDATA4)

return
*  Posteriormente debemos conectarnos al IDP. (que se expone como un servicio REST) para obtener un ‘access token’ y un ‘refresh token’. 
*  //La respuesta debe ser un código 200. Debe considerarse el caso en que retorne un valor diferente
  
  Function USE_RESTFUL(cURL, cMETHOD, cPARAM1, cDATA1, cPARAM2, cDATA2, cPARAM3, cDATA3, cPARAM4, cDATA4)
LOCAL lOk, oHTTP, cDATA, cResponse

TRY
DO CASE
CASE cMETHOD = 'POST'
cSep = '&'
CASE cMETHOD = 'GET'
cSep = ','
ENDCASE

cDATA=cPARAM1+'='+TRANSFORM(cDATA1)+cSep
cDATA=cDATA+cPARAM2+'='+TRANSFORM(cDATA2)+cSep
cDATA=cDATA+cPARAM3+'='+TRANSFORM(cDATA3)+cSep
cDATA=cDATA+cPARAM4+'='+TRANSFORM(cDATA4)
_cliptext = cDATA

oHTTP = CREATEOBJECT('Msxml2.ServerXMLHTTP.6.0')
oHTTP.OPEN(cMETHOD, cURL, .F.)
oHTTP.setRequestHeader ('Content-Type', 'application/x-www-form-urlencoded')
oHTTP.SEND(cDATA)
lOk = .T.
CATCH TO loErr
cResponse = '{ "Error:" '+ TRANSFORM(loErr.ErrorNo) + loErr.MESSAGE+'}'
jsonstring = cResponse
ENDTRY
IF lOk
IF oHTTP.STATUS = 200
cResponse = oHTTP.responseText
jsonstring = LEFT(cResponse,AT('}'+CHR(13),cResponse))
ELSE
?oHTTP.STATUS
cResponse = oHTTP.responseText
jsonstring = cResponse
lOk = .F.
ENDIF
ENDIF

oHTTP = NULL

MESSAGEBOX(jsonstring)

RETURN lOk
  



Rodolfo Arias

unread,
Jan 4, 2018, 9:59:41 PM1/4/18
to publice...@googlegroups.com
Hola Hernan, gracias por la información.

Indicas que hay una "documentación referida previamente", me puedes decir si la posteaste o te refieres a algún enlace, dado que no la encuentro en el hilo.

Me imagino que la codificación te la dan en visual basic, c# o algo así y tu la traduces a foxpro... esto sería importante obtenerlo  para entender un poco, dado que aun no le encuentro ni pies ni cabeza al flujo... ideal sería reunirnos, para comenzar a diagramar y así encontrarle sentido a como quiere Hacienda que se desarrolle la comunicación de los datos.

De antemano muchas gracias. 

pwd           = ""&&'miClave'


lcPARAM1 = "grant_type" 
lcDATA1  = "password"

lcPARAM2 = "username"
*Lo genera el ATV en la opcion:

Gustavo Mora Rivera

unread,
Jan 4, 2018, 10:02:26 PM1/4/18
to publice...@googlegroups.com
el problema es que hacienda esta mas perdido,, y solo protege ciertos intereses,,
y el colegio de informaticos, no ha dicho NADA...
asi que tenemos que hacerlo por nosotros mismo...
adelante con la reunion!!

Hernan Serrano

unread,
Jan 4, 2018, 11:10:31 PM1/4/18
to publice...@googlegroups.com

Hernan Serrano

unread,
Jan 4, 2018, 11:13:59 PM1/4/18
to publice...@googlegroups.com
Por cierto ese codigo que esta en el enlace es Java

Rodolfo Arias

unread,
Jan 5, 2018, 1:04:33 PM1/5/18
to publice...@googlegroups.com
Muchas gracias Hernan, esta semana que viene estaré revisando a ver si saco algo de luz. Nuevamente muchas gracias.

El 4 de enero de 2018, 22:10, Hernan Serrano <hernan.serr...@gmail.com> escribió:

Geovanni Solís Perez

unread,
Jan 5, 2018, 1:57:33 PM1/5/18
to publice...@googlegroups.com
Saludos a todos, nosotros ya iniciamos el proceso de pruebas, pero no contra Hacienda, sino contra un proveedor integrador, nosotros enviamos un XML en base64 a dicho proveedor, y el se encarga del sellado, creacion el xml definitivo , envio del PDF y custodia por 5 años,  esperamos tener esto probado de acá al lunes,  nuestra aplicación es de escritorio y multiusuario (trabaja en intranet) y creo que en este momento es mejor hacer este proceso con un tercero en el medio que cobre el peaje por factura al cliente, que hacer la implementación total, esto, mientras Hacienda se pone de acuerdo en sus lineamientos.

Saludos.

Geovanni Solis.

Libre de virus. www.avast.com
El 5 de enero de 2018, 12:04, Rodolfo Arias <ari...@gmail.com> escribió:
Muchas gracias Hernan, esta semana que viene estaré revisando a ver si saco algo de luz. Nuevamente muchas gracias.

Geovanni Solís Perez

unread,
Jan 5, 2018, 1:59:22 PM1/5/18
to publice...@googlegroups.com
Póngale fecha y nos reunimos.


Libre de virus. www.avast.com

Rodolfo Arias

unread,
Jan 5, 2018, 2:11:19 PM1/5/18
to publice...@googlegroups.com
Hola Geovanni, precisamente mis clientes eso es lo que no quieren, usar un tercero, ya que el servicio de Hacienda se supone que es "gratuito". Igual que usted, creo que todos por aquí desarrollamos nuestra aplicación en Visual FoxPro por lo tanto es de escritorio.

En mi situación, primero haré el intento antes de ver la alternativa de terceros, hasta ahora no he conocido nada que no pueda resolver con el zorro y alguna ayuda extra (dll,fll,ocx,prg), espero que no sea esta la primera.

Saludos.

Hernan Serrano

unread,
Jan 5, 2018, 3:36:38 PM1/5/18
to publice...@googlegroups.com
El codigo que les comparti, ya es funcional. 

El unico inconveniente que tiene es que al enviar el usuario y la contraseña, el sistema de tributación envia un error 500. Esto es problemas con el servidor.

Pero ya envie un correo a hacienda preguntando si estoy cometiendo algun error. Y todavia no me responden.

Alguien que se anime a agendar un fecha y hora para reunirnos.

Geovanny Quirós Castillo

unread,
Jan 5, 2018, 4:42:29 PM1/5/18
to publice...@googlegroups.com
Buenas,
yo tambien ando  un poco perdido con esto.
 
La idea que dió  uno de ustedes puede funcionar, talvez un grupo de Whatsapp podría ser un primer paso.
 
La reunion tambien es una muy  buena idea, pero hay que ver horarios y disponibilidades de cada uno  de nosotros.
 
Saludos,
 
From: roberto
Sent: Wednesday, January 3, 2018 4:26 PM
Subject: [vfp] Re: AYUDA, Facturación Electronica en Costa Rica. Envio de JSON.
 

GeoSys Diseño de Software

unread,
Jan 5, 2018, 5:20:03 PM1/5/18
to Comunidad de Visual Foxpro en Español
Hola compañeros, yo también estoy interesado en el asunto, pero igual, veo el panorama bien nublado, como dice Geovanny Solis, para empezar creo que es mejor con un tercero, luego cuando Hacienda tenga las cosas claras y transparentes podríamos hacerlo directamente.

Saludos
Anthony Contreras Peralta


Libre de virus. www.avast.com

César Ruiz

unread,
Jan 5, 2018, 5:21:33 PM1/5/18
to publice...@googlegroups.com
Hola amigos, yo estoy igual de perdido, hay que probar con un tercero para empezar y partir de ahí.

Geovanny Quirós Castillo

unread,
Jan 5, 2018, 6:22:18 PM1/5/18
to publice...@googlegroups.com
Hola,
Lo que pasa es que terceros sobran en el  mercado, no  creo que el  proceso  de generar el XML sea complicado,   aqui el tema  es la estructura y el consumo de los WS para envio de facturas y confirmacion de recibidos.
 
Lo que logre investigar lo  comparto.
Saludos,

Rodolfo Arias

unread,
Jan 5, 2018, 6:45:51 PM1/5/18
to publice...@googlegroups.com
Estoy de acuerdo con Geovanny, en mi caso, trataré de evitarle el gasto tal vez innecesario al cliente... también si lo que vaya sacando lo iré compartiendo.

Saludos.

Hernan Serrano

unread,
Jan 5, 2018, 8:05:15 PM1/5/18
to publice...@googlegroups.com
Como paso numero 1.
Segun hacienda, se debe estar registrado en hacienda. Para poder empezar a hacer pruebas. Tienen una area de pruebas que ellos llaman stag. Y el area normal de comunicacion.

Paso numero 2.
El el ATV, que es el sitio de los clientes. Se debe generar el acceso a estos sitios. Pero primero el paso 1.

Paso numero 3. 
Con las credenciales generadas en el ATV. Proceder como dice la documentación que el mismo hacienda refiere. Autenticacion y autorizacion.

De acuerdo a la documentación referida previamente el primer paso para conectarse a la plataforma es obtener un Open ID Connect (OIDC.) Token que funciona sobre el estándar de OAuth 2.0.

Para ello, en ATV. se consigna que la dirección del IDP. a emplear en el entorno de pruebas es:

https://idp.comprobanteselectronicos.go.cr/auth/realms/rut-stag/protocol/openid-connect

Inicialmente se debe definir cuál es el URI. del IDP., el CLIENT ID, el usuario (que corresponde a la identificación del contribuyente) y su credencial.

  private static final String IDP_URI = "https://idp.comprobanteselectronicos.go.cr/auth/realms/rut-stag/protocol/openid-connect";
  private static final String IDP_CLIENT_ID = "api-stag";
  private String usuario = "miIdenti...@stag.comprobanteselectronicos.go.cr";
  private String password = "miClave";

Posteriormente debemos conectarnos al IDP. (que se expone como un servicio REST) para obtener un ‘access token’ y un ‘refresh token’. Esto lo podemos lograr de la siguiente manera:

  Client client = ClientBuilder.newClient();
  WebTarget target = client.target(IDP_URI + "/token");
  Form form = new Form();
  form.param("grant_type", "password")
               .param("username", usuario)
               .param("password", password)
               .param("client_id", IDP_CLIENT_ID);
  Response response = target.request().post(Entity.form(form));


  //La respuesta debe ser un código 200. Debe considerarse el caso en que retorne un valor diferente

  // Indicador que se ha enviado un atributo incorrecto
Según el código que compartí. Estamos en el paso 3. Por que el código que devuelve el programa en cuestión es 500, que significa Error en el Server.
Por lo tanto ya envié un correo a hacienda para preguntarles si hace falta algún parámetro. 





Hernan Serrano

unread,
Jan 5, 2018, 8:06:08 PM1/5/18
to publice...@googlegroups.com
El codigo en visual fox. Es una traduccion del que codigo en Java, que se puede apreciar en la documentacion.

El 5 de enero de 2018, 19:05, Hernan Serrano <hernan.serr...@gmail.com> escribió:
Como paso numero 1.
Segun hacienda, se debe estar registrado en hacienda. Para poder empezar a hacer pruebas. Tienen una area de pruebas que ellos llaman stag. Y el area normal de comunicacion.

Paso numero 2.
El el ATV, que es el sitio de los clientes. Se debe generar el acceso a estos sitios. Pero primero el paso 1.

Paso numero 3. 
Con las credenciales generadas en el ATV. Proceder como dice la documentación que el mismo hacienda refiere. Autenticacion y autorizacion.

De acuerdo a la documentación referida previamente el primer paso para conectarse a la plataforma es obtener un Open ID Connect (OIDC.) Token que funciona sobre el estándar de OAuth 2.0.

Para ello, en ATV. se consigna que la dirección del IDP. a emplear en el entorno de pruebas es:

https://idp.comprobanteselectronicos.go.cr/auth/realms/rut-stag/protocol/openid-connect

Inicialmente se debe definir cuál es el URI. del IDP., el CLIENT ID, el usuario (que corresponde a la identificación del contribuyente) y su credencial.

  private static final String IDP_URI = "https://idp.comprobanteselectronicos.go.cr/auth/realms/rut-stag/protocol/openid-connect";
  private static final String IDP_CLIENT_ID = "api-stag";

Hernan Serrano

unread,
Jan 5, 2018, 8:50:14 PM1/5/18
to publice...@googlegroups.com
Este es el codigo ya mejor documentado.
Es exactamente como esta en la pagina de flecha roja.
Solo que traducido a Visual Fox.

*Autenticación y Autorización
*De acuerdo a la documentación referida previamente el primer paso para conectarse a la plataforma es obtener un Open ID Connect (OIDC.)
*Token que funciona sobre el estándar de OAuth 2.0.
*Para ello, en ATV. se consigna que la dirección del IDP. a emplear en el entorno de pruebas es:
*Inicialmente se debe definir cuál es el URI. del IDP., el CLIENT ID, el usuario (que corresponde a la identificación del contribuyente) y su credencial.
CLEAR

*************************************************************************************************************
*En ATV. se consigna que la dirección del IDP. a emplear en el entorno de produccion es:
*************************************************************************************************************
*************************************************************************************************************

*Inicialmente se debe definir cuál es el URI. del IDP.
*************************************************************************************************************
*En ATV. se consigna que la dirección del IDP. a emplear en el entorno de pruebas es:
*************************************************************************************************************
*************************************************************************************************************

*************************************************************************************************************
*El CLIENT ID, 
*client_id: forma de acceso que se usa con OAuth 2.0, en este caso es "api-stag"
*************************************************************************************************************
lcPARAM4      = "client_id"
IDP_CLIENT_ID = "api-stag" && "api-prod"

*************************************************************************************************************
*El usuario (que corresponde a la identificación del contribuyente)
*************************************************************************************************************
lcPARAM2 = "username"

*************************************************************************************************************
*y su credencial.
*************************************************************************************************************
lcPARAM3 = "password"
lcDATA3  = 'XXXXXXXXXXXXXXXX'

*************************************************************************************************************
*grant_type: Tipo de acceso que se usa con OAuth 2.0, en este caso es "password"
*************************************************************************************************************
lcPARAM1 = "grant_type" 
lcDATA1  = "password"
*************************************************************************************************************
*POST: Metodo de envio del formulario
*************************************************************************************************************
lcMETHOD      = "POST"

=USE_RESTFUL(URI_IDP, lcMETHOD, lcPARAM1, lcDATA1, lcPARAM2, lcDATA2, lcPARAM3, lcDATA3, lcPARAM4, IDP_CLIENT_ID)

return

FUNCTION USE_RESTFUL(cURL, cMETHOD, cPARAM1, cDATA1, cPARAM2, cDATA2, cPARAM3, cDATA3, cPARAM4, cDATA4)
LOCAL lOk, oHTTP, cDATA, cResponse

TRY
DO CASE
CASE cMETHOD = 'POST'
cSep = '&'
CASE cMETHOD = 'GET'
cSep = ','
ENDCASE
cDATA=cPARAM1+'='+TRANSFORM(cDATA1)+cSep
cDATA=cDATA+cPARAM2+'='+TRANSFORM(cDATA2)+cSep
cDATA=cDATA+cPARAM3+'='+TRANSFORM(cDATA3)+cSep
cDATA=cDATA+cPARAM4+'='+TRANSFORM(cDATA4)
_cliptext = cDATA
oHTTP = CREATEOBJECT('Msxml2.ServerXMLHTTP.6.0')
oHTTP.OPEN(cMETHOD, cURL, .F.)
oHTTP.setRequestHeader ('Content-Type', 'application/x-www-form-urlencoded')
oHTTP.SEND(cDATA)
lOk = .T.
CATCH TO loErr
cResponse = '{ "Error:" '+ TRANSFORM(loErr.ErrorNo) + loErr.MESSAGE+'}'
jsonstring = cResponse
ENDTRY
IF lOk
IF oHTTP.STATUS = 200
cResponse = oHTTP.responseText
jsonstring = LEFT(cResponse,AT('}'+CHR(13),cResponse))
ELSE
?oHTTP.STATUS
cResponse = oHTTP.responseText
* jsonstring = '{"Error": "No se logró la conexión con el Web Service.'+CHR(13)+cResponse+'"}'
jsonstring = cResponse
_cliptext = jsonstring
lOk = .F.
ENDIF
ENDIF

oHTTP = NULL

MESSAGEBOX(jsonstring)

RETURN lOk


El 5 de enero de 2018, 19:06, Hernan Serrano <hernan.serr...@gmail.com> escribió:
El codigo en visual fox. Es una traduccion del que codigo en Java, que se puede apreciar en la documentacion.
El 5 de enero de 2018, 19:05, Hernan Serrano <hernan.serrano.morales@gmail.com> escribió:
Como paso numero 1.
Segun hacienda, se debe estar registrado en hacienda. Para poder empezar a hacer pruebas. Tienen una area de pruebas que ellos llaman stag. Y el area normal de comunicacion.

Paso numero 2.
El el ATV, que es el sitio de los clientes. Se debe generar el acceso a estos sitios. Pero primero el paso 1.

Paso numero 3. 
Con las credenciales generadas en el ATV. Proceder como dice la documentación que el mismo hacienda refiere. Autenticacion y autorizacion.

De acuerdo a la documentación referida previamente el primer paso para conectarse a la plataforma es obtener un Open ID Connect (OIDC.) Token que funciona sobre el estándar de OAuth 2.0.

Para ello, en ATV. se consigna que la dirección del IDP. a emplear en el entorno de pruebas es:

https://idp.comprobanteselectronicos.go.cr/auth/realms/rut-stag/protocol/openid-connect

Inicialmente se debe definir cuál es el URI. del IDP., el CLIENT ID, el usuario (que corresponde a la identificación del contribuyente) y su credencial.

  private static final String IDP_URI = "https://idp.comprobanteselectronicos.go.cr/auth/realms/rut-stag/protocol/openid-connect";
  private static final String IDP_CLIENT_ID = "api-stag";

roberto

unread,
Jan 6, 2018, 5:15:54 PM1/6/18
to Comunidad de Visual Foxpro en Español
Tengo una amiga que labora en Tributación, hoy me envió una serie de información sobre este tema, no lo he podido leer ya que estoy en otro proyecto que me está consumiendo mucho tiempo.

Voy a leerlo y puedo compartirlo luego con ustedes. Creo que si queremos reunirnos debe ser esta semana, es decir lo más pronto posible. Creo que hay un integrante del grupo que nos ofrece un lugar en el Hotel San José, o San José Palacio, no se si serán el mismo. Creo que todos trabajamos y lo más ideal sería reunirnos en la noche, que se yo podría ser tipo 6 de la tarde, o ustedes dicen.

Pero creo que no debemos dejar pasar esto mucho tiempo.

Roberto

Hernan Serrano

unread,
Jan 7, 2018, 6:47:31 PM1/7/18
to publice...@googlegroups.com
Correcto. Tiene que ser un horario asi de ese tipo.

Geovanni Solís Perez

unread,
Jan 8, 2018, 6:19:55 PM1/8/18
to Comunidad de Visual Foxpro en Español
Señores, buenas tardes, segun me dicen el el Web Service es tipo REST, alguno ha tenido experiencia con servicios Web de este tipo?,  tambien me dicen que con curl que es una aplicación externa se pueden enviar archivos,  vuelvo a preguntar, alguno con experiencia en este tipo de envios?

Saludos,  

Geovanni Solis 

Hernan Serrano

unread,
Jan 8, 2018, 7:57:37 PM1/8/18
to publice...@googlegroups.com
Es lo que hace el programa que les comparti.
Y segun lo que me indican otros amigos. Un servicio web, de este tipo deberia recibir sin ningun problema peticiones de aplicaciones desktop como aplicaciones web.


Tony Chinchilla

unread,
Jan 9, 2018, 1:04:31 PM1/9/18
to Comunidad de Visual Foxpro en Español
Todos los servidores de Tributacion son HTTPS, aqui una guia de como se hace:
https://flecharoja.com/blog/2017-12/mh-guia-idp/

Manfred Bejarano

unread,
Jan 9, 2018, 6:59:50 PM1/9/18
to Comunidad de Visual Foxpro en Español
Y que compañeros para cuando queda la Reunion...?





El sábado, 23 de diciembre de 2017, 16:38:33 (UTC-6), Geovanni Solís Perez escribió:

Hernan Serrano

unread,
Jan 9, 2018, 7:25:32 PM1/9/18
to publice...@googlegroups.com
Por que no pasas la informacion de tu amiga.
Tal vez podamos leerla, y tomar notas de ella.

Gracias Roberto.

El 6 de enero de 2018, 16:15, roberto <rmat...@gmail.com> escribió:

Geovanni Solís Perez

unread,
Jan 10, 2018, 10:54:44 AM1/10/18
to publice...@googlegroups.com
Que sea http o https no significa Rest  generalmente se usado Soap con Vfp . Rest y Soap son formas de envío.  Http y https son el transporte.  

Saludos

induce...@gmail.com

unread,
Jan 10, 2018, 12:01:14 PM1/10/18
to Comunidad de Visual Foxpro en Español
No conozco mucho de web services, cuando trato de consumir uno me dice lo siguiente

me podría ayudar con el error o que me falta para quitar el error

Hernan Serrano

unread,
Jan 10, 2018, 7:45:34 PM1/10/18
to publice...@googlegroups.com
Este Web service de tributacion no esta bajo ese esquema que estas utilizando. 

Oscar Quiros Coto

unread,
Jan 11, 2018, 2:58:07 PM1/11/18
to Comunidad de Visual Foxpro en Español
Buenas tardes amigos.
Que avance hay con este tema?
Según tengo entendido, el 15 de enero 2018, trituracion liberara un software gratuito, que estaría bien para algunos, pero necesitamos la integracion con nuestros sistemas y el tiempo se esta acabando.

Saludos cordiales.

Manfred Bejarano

unread,
Jan 11, 2018, 3:30:34 PM1/11/18
to Comunidad de Visual Foxpro en Español
Buanas Compañeros

Muchos estamos atrazados con este tema hay algun avance. Va haber reunion..?

Rodolfo Arias

unread,
Jan 12, 2018, 5:32:07 PM1/12/18
to publice...@googlegroups.com
Hola Oscar y compañeros, por favor corríjanme, tenía entendido, al menos por el contador y auditor de la empresa, que tenemos hasta noviembre para tener lista esta implementación, Están equivocados?.

Oscar Quiros Coto

unread,
Jan 12, 2018, 6:29:55 PM1/12/18
to publice...@googlegroups.com
El contado no me ha indicado nada.
De ser así debería estar en la Gaceta o algún otro sitio oficial.
--
___________________________________________________
Soporte y Sistemas OQC, S.A.
Partner Autorizado de ESET en Costa Rica
Cel:(506) 87 11 00 11
Email:os...@ssoqc.com - oscarqu...@hotmail.com
Skype: oscar.quiros.coto
GTalk: os...@ssoqc.com

roberto

unread,
Jan 12, 2018, 7:10:45 PM1/12/18
to Comunidad de Visual Foxpro en Español
Parece que no hay interés por la reunión, de mi parte me dicen donde y llego.

O bien creo que tenemos que ir solos en este aspecto.

Roberto.

Oscar Quiros Coto

unread,
Jan 12, 2018, 7:15:33 PM1/12/18
to publice...@googlegroups.com
Hagamos un grupo whatsapp

Hernan Serrano

unread,
Jan 14, 2018, 11:31:39 PM1/14/18
to publice...@googlegroups.com
Imágenes integradas 1
Estimados compañeros.

Ya logre loguearme en el Servicio web de tributacion con codigo puro de VFP.

Nada mas necesito depurar un poco el codigo. Y lo estare compartiendo.


Necesito que algunos de ustedes vayan creando las estructuras de los XLM que se necesitan que eso no es tan dificil en VFOX y obviamente que se comprometan a compartir el codigo.

Necesito que me apoyen para poder llevar a cabo este proyecto. Del cual todos nos vamos a beneficiar.

ATTE
Hernan Serrano M.

Geovanni Solís Perez

unread,
Jan 15, 2018, 2:56:37 PM1/15/18
to publice...@googlegroups.com
Nosotros ya logramos conectarnos con un servidor de un Proveedor, pero lo realizamos con C# con un repositorio que cada 30 segundo envia los xml a dicho proveedor para el firmado y distribución.
Esto por la urgencia de tener nuestro ERP conectado a hacienda.

La resolución habla de tener un sitio donde hacienda pueda consultar esta información que saben de esto y como se puede desarrollar desde fox?

Saludos.

Geovanni Solis.


Libre de virus. www.avast.com

Hernan Serrano

unread,
Jan 15, 2018, 2:59:59 PM1/15/18
to publice...@googlegroups.com
Con Vfox, usted puede enviar esa info a un server propio. No le veo el problema.

El 15 de enero de 2018, 13:56, Geovanni Solís Perez <solis...@gmail.com> escribió:
Nosotros ya logramos conectarnos con un servidor de un Proveedor, pero lo realizamos con C# con un repositorio que cada 30 segundo envia los xml a dicho proveedor para el firmado y distribución.
Esto por la urgencia de tener nuestro ERP conectado a hacienda.

La resolución habla de tener un sitio donde hacienda pueda consultar esta información que saben de esto y como se puede desarrollar desde fox?

Saludos.

Geovanni Solis.


Libre de virus. www.avast.com

Oscar Quiros coto

unread,
Jan 15, 2018, 3:03:46 PM1/15/18
to publice...@googlegroups.com

Se que se puede hacer, el asunto es:

 

1.Como se construye el xml, donde están las especificaciones.

2.Cual es la dirección para hacer el llamado y tramite…

3. etc….

 

Entre otras interrogantes que tengo.

 

 

 

Saludos cordiales.

 

Firma Oscar

image001.jpg
image002.png

Hernan Serrano

unread,
Jan 16, 2018, 8:44:20 AM1/16/18
to publice...@googlegroups.com
Estimados amigos, Continuo con el progreso en este proyectos.

Despues de lidiar con el tema de la Autenticación y Autorizacion. 

Estoy en el Armado de los XML.

Esta parte es critica. Pues consta de:
1. Creación del documento. (Según especificaciones de Hacienda)
2. Su encriptación para ser enviado.
3. Firmado del documento para que sea aceptado.

Logrado lo anterior el proyecto estara avanzado casi completamente. Y es alli, en donde me permitire compartirlo.

Ha sido un trabajo arduo, por que solo he tenido las noches para llevarlo a cabo. Pues si no trabajo, no como. Pero esto no es queja.

Todo lo que cuesta al final, tiene su recompensa. Y para mi es la satisfacción de haber ayudado y devolver un poco lo que me han ayudado a mi.

ATTE

HErnan Serrano M.

Hernan Serrano

unread,
Jan 16, 2018, 8:45:13 AM1/16/18
to publice...@googlegroups.com

El 15 de enero de 2018, 14:03, Oscar Quiros coto <os...@ssoqc.com> escribió:

Rodolfo Arias

unread,
Jan 16, 2018, 10:44:26 AM1/16/18
to publice...@googlegroups.com
Hernan te agradezco de parte de todos tu gestión y ofrecimiento, pero será posible que te podamos ayudar en algo, yo al menos esta semanas he estado comprometido con un proyecto que precisamente tengo que entregar el viernes, ya la otra semana pretendo estar viendo en serio este tema y si pudiera apoyarte y colaborar con mi humilde conocimiento, me  pongo a tus ordenes y los demás compañeros foxeros ticos.

Hernan Serrano

unread,
Jan 16, 2018, 11:49:31 AM1/16/18
to publice...@googlegroups.com
Gracias cualquier ayuda es buena.

Basicamente hay que resolver :
1. Formato del XML, para que cumpla con los requisitos de hacienda.
2. Cifrado del XML.
3. Firma del XML.

Esto es lo que se debe resolver por el momento. Para iniciar las pruebas de envio.

ATTE

Hernan Serrano M.



El 16 de enero de 2018, 9:44, Rodolfo Arias <ari...@gmail.com> escribió:
Hernan te agradezco de parte de todos tu gestión y ofrecimiento, pero será posible que te podamos ayudar en algo, yo al menos esta semanas he estado comprometido con un proyecto que precisamente tengo que entregar el viernes, ya la otra semana pretendo estar viendo en serio este tema y si pudiera apoyarte y colaborar con mi humilde conocimiento, me  pongo a tus ordenes y los demás compañeros foxeros ticos.

Hernan Serrano

unread,
Jan 18, 2018, 8:46:40 AM1/18/18
to publice...@googlegroups.com
Ante todo muchas gracias por la ayuda brindada.

Les comento que ya supere la creacion del XML.
Anoche mismo, ahora lo que estoy haciendo es llenando con datos de prueba.
Para su posterior encriptacion y envio a site de pruebas de hacienda.

ATTE

Hernan Serrano M.

Oscar Quiros coto

unread,
Jan 18, 2018, 1:00:54 PM1/18/18
to publice...@googlegroups.com

Excelente Hernan.

 

Les copio una respuesta de hacienda con respecto al tema, no lo he visto aun, espero por la tarde verlo.

 

De: FE [mailto:F...@hacienda.go.cr]
Enviado el: jueves, 18 de enero de 2018 10:06 a.m.
Para: Oscar Quiros coto <os...@ssoqc.com>
Asunto: RE: Consulta con factura electrónica. [#00050382]

 

Buenos días, podrá consultar la información de comprobantes electrónicos  por medio del siguiente Link en la versión 4.2 la cual es la normativa vigente.

 

https://tribunet.hacienda.go.cr/FormatosYEstructurasXML.jsp

 

De los cuales se le recomienda leer en primera instancia los siguientes:

 

 https://tribunet.hacienda.go.cr/docs/esquemas/2016/v4.2/ResolucionComprobantesElectronicosDGT-R-48-2016_4.2.pdf

 

https://tribunet.hacienda.go.cr/docs/esquemas/2016/v4.2/ANEXOS%20Y%20ESTRUCTURAS_V4.2.pdf

 

Adicionalmente le remito la documentación técnica para realizar la conexión.

 

  • Documento de técnico API
  •  

https://tribunet.hacienda.go.cr/docs/esquemas/2016/v4.1/comprobantes-electronicos-api.html

 

 

  • URL

PRODUCCION

 URL API RECEPCION = https://api.comprobanteselectronicos.go.cr/recepcion/v1/

 OAUTH 2.0 ACCESS TOKEN URL = https://idp.comprobanteselectronicos.go.cr/auth/realms/rut/protocol/openid-connect/token

CLIENT ID = api-prod

CLIENT SECRET = [VACIO]

SCOPE = [VACIO]

 

STAGING / SANDBOX 

URL API RECEPCION = https://api.comprobanteselectronicos.go.cr/recepcion-sandbox/v1/

 OAUTH 2.0 ACCESS TOKEN URL = https://idp.comprobanteselectronicos.go.cr/auth/realms/rut-stag/protocol/openid-connect/token

CLIENT ID = api-stag

CLIENT SECRET = [VACIO]

SCOPE = [VACIO]

 

La llave criptográfica de hacienda en caso de decidirse por utilizar esta la pueden obtener por el sistema ATV al igual que la contraseña para obtener el Token .

 

Saludos,

 

 

 

 

 

De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de Hernan Serrano
Enviado el: jueves, 18 de enero de 2018 7:47 a.m.
Para: publice...@googlegroups.com
Asunto: Re: [vfp] Re: AYUDA, Facturación Electronica en Costa Rica. Envio de JSON.

 

Ante todo muchas gracias por la ayuda brindada.

image001.jpg
image002.png

Oscar Melendez

unread,
Jan 19, 2018, 1:04:44 PM1/19/18
to publice...@googlegroups.com
Hernan Serrano, Buenas tardes, de casualidad tenes el codigo ya hecho (se que le faltan algunas segun lei) de la factura electronica (no importa como pueda tenerlo es para implementarlo haciendole unas mejoras o necesidades)
si lo tiene me lo puede enviar a chi...@gmail.com

El 18 de enero de 2018, 7:46, Hernan Serrano <hernan.serr...@gmail.com> escribió:
Ante todo muchas gracias por la ayuda brindada.

Les comento que ya supere la creacion del XML.
Anoche mismo, ahora lo que estoy haciendo es llenando con datos de prueba.
Para su posterior encriptacion y envio a site de pruebas de hacienda.

ATTE

Hernan Serrano M.

Oscar Quiros coto

unread,
Jan 19, 2018, 1:19:00 PM1/19/18
to publice...@googlegroups.com

Buenas tardes.

Creo que este es un tema de interés de todos, no se si están dispuestos a compartir sus conocimientos, en mi caso si, pero he revisado toda la documentación hay cosas que no entiendo, en este momento estoy revisando la estructura para generar la factura en xml, aun cuando tenga el formato de la factura, no se como hacer el llamado o el envío de dicho documento, por lo anterior expuesto, no lo comprendo.

 

 

 

Saludos cordiales.

 

 

 

De: publice...@googlegroups.com [mailto:publice...@googlegroups.com] En nombre de Oscar Melendez
Enviado el: viernes, 19 de enero de 2018 12:05 p.m.
Para: publice...@googlegroups.com
Asunto: Re: [vfp] Re: AYUDA, Facturación Electronica en Costa Rica. Envio de JSON.

 

Hernan Serrano, Buenas tardes, de casualidad tenes el codigo ya hecho (se que le faltan algunas segun lei) de la factura electronica (no importa como pueda tenerlo es para implementarlo haciendole unas mejoras o necesidades)

image001.jpg
image002.png

Oscar Melendez

unread,
Jan 19, 2018, 2:55:16 PM1/19/18
to publice...@googlegroups.com
Estuve probrando el codigo y diferentes servidores y solo logro tener errores de codigo 404 y 500 del servidor

El 4 de enero de 2018, 20:37, Hernan Serrano <hernan.serr...@gmail.com> escribió:
Lo siguiente es lo que tengo hasta ahora.
*!* 1×× Informational
*!* 100 Continue
*!* 101 Switching Protocols
*!* 102 Processing
*!* 2×× Success
*!* 200 OK
*!* 201 Created
*!* 202 Accepted
*!* 203 Non-authoritative Information
*!* 204 No Content
*!* 205 Reset Content
*!* 206 Partial Content
*!* 207 Multi-Status
*!* 208 Already Reported
*!* 226 IM Used
*!* 3×× Redirection
*!* 300 Multiple Choices
*!* 301 Moved Permanently
*!* 302 Found
*!* 303 See Other
*!* 304 Not Modified
*!* 305 Use Proxy
*!* 307 Temporary Redirect
*!* 308 Permanent Redirect
*!* 4×× Client Error
*!* 400 Bad Request
*!* 401 Unauthorized
*!* 402 Payment Required
*!* 403 Forbidden
*!* 404 Not Found
*!* 405 Method Not Allowed
*!* 406 Not Acceptable
*!* 407 Proxy Authentication Required
*!* 408 Request Timeout
*!* 409 Conflict
*!* 410 Gone
*!* 411 Length Required
*!* 412 Precondition Failed
*!* 413 Payload Too Large
*!* 414 Request-URI Too Long
*!* 415 Unsupported Media Type
*!* 416 Requested Range Not Satisfiable
*!* 417 Expectation Failed
*!* 418 I'm a teapot
*!* 421 Misdirected Request
*!* 422 Unprocessable Entity
*!* 423 Locked
*!* 424 Failed Dependency
*!* 426 Upgrade Required
*!* 428 Precondition Required
*!* 429 Too Many Requests
*!* 431 Request Header Fields Too Large
*!* 444 Connection Closed Without Response
*!* 451 Unavailable For Legal Reasons
*!* 499 Client Closed Request
*!* 5×× Server Error
*!* 500 Internal Server Error
*!* 501 Not Implemented
*!* 502 Bad Gateway
*!* 503 Service Unavailable
*!* 504 Gateway Timeout
*!* 505 HTTP Version Not Supported
*!* 506 Variant Also Negotiates
*!* 507 Insufficient Storage
*!* 508 Loop Detected
*!* 510 Not Extended
*!* 511 Network Authentication Required
*!* 599 Network Connect Timeout Error
*Autenticación y Autorización
*De acuerdo a la documentación referida previamente el primer paso para conectarse a la plataforma es obtener un Open ID Connect (OIDC.) Token que funciona sobre el estándar de OAuth 2.0.

*Para ello, en ATV. se consigna que la dirección del IDP. a emplear en el entorno de pruebas es:


*Inicialmente se debe definir cuál es el URI. del IDP., el CLIENT ID, el usuario (que corresponde a la identificación del contribuyente) y su credencial.
CLEAR

*SET STEP ON 
*SET PROCEDURE TO qdfoxJSON.prg 
lcMETHOD      = "POST"
IDP_CLIENT_ID = "api-stag"
pwd           = ""&&'miClave'


lcPARAM1 = "grant_type" 
lcDATA1  = "password"

lcPARAM2 = "username"
*Lo genera el ATV en la opcion:
Imágenes integradas 2
lcPARAM3 = "password"
*Lo genera el ATV en la opcion:
lcDATA3  = 'XXXXXXXXXXXX*'

Imágenes integradas 3


lcPARAM4 = "client_id"
lcDATA4  = "api-stag"


=USE_RESTFUL(lcURL, lcMETHOD, lcPARAM1, lcDATA1, lcPARAM2, lcDATA2, lcPARAM3, lcDATA3, lcPARAM4, lcDATA4)

return
*  Posteriormente debemos conectarnos al IDP. (que se expone como un servicio REST) para obtener un ‘access token’ y un ‘refresh token’. 
*  //La respuesta debe ser un código 200. Debe considerarse el caso en que retorne un valor diferente
  
  Function USE_RESTFUL(cURL, cMETHOD, cPARAM1, cDATA1, cPARAM2, cDATA2, cPARAM3, cDATA3, cPARAM4, cDATA4)
LOCAL lOk, oHTTP, cDATA, cResponse

TRY
DO CASE
CASE cMETHOD = 'POST'
cSep = '&'
CASE cMETHOD = 'GET'
cSep = ','
ENDCASE

cDATA=cPARAM1+'='+TRANSFORM(cDATA1)+cSep
cDATA=cDATA+cPARAM2+'='+TRANSFORM(cDATA2)+cSep
cDATA=cDATA+cPARAM3+'='+TRANSFORM(cDATA3)+cSep
cDATA=cDATA+cPARAM4+'='+TRANSFORM(cDATA4)
_cliptext = cDATA

oHTTP = CREATEOBJECT('Msxml2.ServerXMLHTTP.6.0')
oHTTP.OPEN(cMETHOD, cURL, .F.)
oHTTP.setRequestHeader ('Content-Type', 'application/x-www-form-urlencoded')
oHTTP.SEND(cDATA)
lOk = .T.
CATCH TO loErr
cResponse = '{ "Error:" '+ TRANSFORM(loErr.ErrorNo) + loErr.MESSAGE+'}'
jsonstring = cResponse
ENDTRY
IF lOk
IF oHTTP.STATUS = 200
cResponse = oHTTP.responseText
jsonstring = LEFT(cResponse,AT('}'+CHR(13),cResponse))
ELSE
?oHTTP.STATUS
cResponse = oHTTP.responseText
jsonstring = cResponse
lOk = .F.
ENDIF
ENDIF

oHTTP = NULL

MESSAGEBOX(jsonstring)

RETURN lOk
  




El 4 de enero de 2018, 15:45, Hernan Serrano <hernan.serrano.morales@gmail.com> escribió:
La idea es apoyarnos entre todos.

El 4 de enero de 2018, 8:01, Geovanny Quirós Castillo <geovann...@gmail.com> escribió:
Buenos días Hernán y compañeros,
 
se agradece cualquier avance puesto que todos vamos en esa misma línea.
 
Saludos,
 
 
Sent: Thursday, January 4, 2018 7:47 AM
Subject: Re: [vfp] Re: AYUDA, Facturación Electronica en Costa Rica. Envio de JSON.
 
Yo ya tengo algo avanzado.

Por lo menos se. Que para ingresar al ATV, asi se llama la pagina se necesita un usuario que sea contribuyente de lo contrario no se pueden hacer pruebas.
Ya tengo procedimientos para enviar el usuario y la contraseña y que devuelva la autorizacion.
No he podido hacer pruebas puesto que no brindan usuarios de pruebas para el Sanbox, que es el area de pruebas.
Sin embargo puedo compartir lo que tengo hasta ahora.


 
El 3 de enero de 2018, 18:36, Rodolfo Arias <ari...@gmail.com> escribió:
Hola Geovanni y compañeros ticos del foro, igual situación en esta semana uno de mis clientes me solicita ver el tema, la idea que ellos tienen es trasmitir directamente sin usar proveedores intermediarios, pero los datos son de muchas generalidades, sería interesante reunirnos y entre todos organizarnos, apoyarnos y hacer nuestras investigaciones y al final generar las apps necesarias, como hicieron nuestros compañeros de México y Ecuador. 
 
Ronny póngale fecha y miremos si podemos enfrentar el proyecto desde varios puntos, uno de ellos es conseguir que hacienda nos atienda y nos de algo sustancial y luego resolver la programación del mismo.
 
El 3 de enero de 2018, 17:03, Gustavo Mora Rivera <rgr...@gmail.com> escribió:
man,, eso es un chorizo para obligar a usar las empresas amigas de la gente de hacienda..
y el colegio de contadores, ni el de informaticos se pronuncian para que sea mas transparente el asunto...
solo te pasan un monton de links con info que no dice NADA en realidad
 
----- Original Message -----
From: roberto
Sent: Wednesday, January 03, 2018 4:26 PM
Subject: [vfp] Re: AYUDA, Facturación Electronica en Costa Rica. Envio de JSON.
 
Buenas tardes compañeros. Soy de Costa Rica y también estoy en la misma situación que ustedes. Todas mis aplicaciones son tipo escritorio, tengo ya varios clientes que me han pedido que les haga una aplicación para la factura electrónica y como dicen ustedes en Hacienda, ingresa uno a la página y esta no dice nada.
 
Desconozco totalmente, que información debo enviar, como enviarla, a donde enviarla. Sería interesante Ronny, poder reunirnos y ver como podemos solucionar el problema. He pedido ayuda a contadores y están en la misma situación, no saben nada.
 
Yo me apunto mis datos son los siguiente:
 
Roberto Matarrita
Libre de virus. www.avast.com
--
Tico Support S. A.
Tel. (506)8772-6170



--
Tico Support S. A.
Tel. (506)8772-6170

Oscar Melendez

unread,
Jan 19, 2018, 5:33:17 PM1/19/18
to publice...@googlegroups.com
Ya pude hacer conectar con el servidor de hacienda (es una madre el servidor) pero sigo con lo demas de xml

El 19 de enero de 2018, 13:55, Oscar Melendez <chi...@gmail.com> escribió:
Estuve probrando el codigo y diferentes servidores y solo logro tener errores de codigo 404 y 500 del servidor
pwd           = ""&&'miClave'


lcPARAM1 = "grant_type" 
lcDATA1  = "password"

lcPARAM2 = "username"
*Lo genera el ATV en la opcion:

Hernan Serrano

unread,
Jan 20, 2018, 9:46:28 AM1/20/18
to publice...@googlegroups.com
Que bueno ya estamos en el mismo nivel.
Yo estoy trabajando en el XML. El cifrado y Firmado con XADES-EPES.

Hernan Serrano

unread,
Jan 20, 2018, 11:10:06 AM1/20/18
to publice...@googlegroups.com
Señores. Comparto la creacion del XML.
Falta la Firma. Como les indico. Se debe crear una clase en C-SHARP. Para lograr la firma en el XML. Por obvias razones de tiempo es mas rapido. Que programarla en FOX,

*SET DEFAULT TO "g:\facturaelectronica\ticosoft\"
SET SAFETY OFF
ArchivoXml = "facturacr.xml"
cComentario = "Corresponde a la clave del comprobante. Es un campo de 50 posiciones y se tiene que utilizar para la consulta del codigo QR. Ver nota 1 y 4.1"
TEXT TO XmlHacienda TEXTMERGE NOSHOW ADDITIVE
<?xml version="1.0" encoding="UTF-8"?>
         xmlns:xs="http://www.w3.org/2001/XMLSchema
         xmlns:ds="http://www.w3.org/2000/09/xmldsig#
         elementFormDefault="qualified" attributeFormDefault="unqualified" version="4.2" vc:minVersion="1.1">          
<xs:element name="FacturaElectronica">
<xs:annotation>
<xs:documentation>Elemento Raiz de la Facturacion Electronica</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="Clave" type="ClaveType">
<xs:annotation>
<xs:documentation><<cComentario>></xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="NumeroConsecutivo" type="NumeroConsecutivoType">
<xs:annotation>
<xs:documentation>Numeracion consecutiva del comprobante</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="FechaEmision" type="xs:dateTime"/>
<xs:element name="Emisor" type="EmisorType">
<xs:annotation>
<xs:documentation>Emisor del documento</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Receptor" type="ReceptorType" minOccurs="0">
<xs:annotation>
<xs:documentation>Receptor del documento</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="CondicionVenta">
<xs:annotation>
<xs:documentation>Condiciones de la venta: 01 Contado, 02 Credito, 03 Consignacion, 04 Apartado, 05 Arrendamiento con opcion de compra, 06 Arrendamiento en funcion financiera, 99 Otros</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="01">
<xs:annotation>
<xs:documentation>Contado</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="02">
<xs:annotation>
<xs:documentation>Credito</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="03">
<xs:annotation>
<xs:documentation>Consignacion</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="04">
<xs:annotation>
<xs:documentation>Apartado</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="05">
<xs:annotation>
<xs:documentation>Arrendamiento con opcion de compra</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="06">
<xs:annotation>
<xs:documentation>Arrendamiento en funcion financiera</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="99">
<xs:annotation>
<xs:documentation>Otros</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="PlazoCredito" minOccurs="0">
<xs:annotation>
<xs:documentation>Plazo del credito, es obligatorio cuando la venta del producto o prestacion del servicio sea a credito</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="10"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="MedioPago" maxOccurs="4">
<xs:annotation>
<xs:documentation>Corresponde al medio de pago empleado: 01 Efectivo, 02 Tarjeta, 03 Cheque, 04 Transferencia - deposito bancario, 05 - Recaudado por terceros, 99 Otros</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="01">
<xs:annotation>
<xs:documentation>Efectivo</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="02">
<xs:annotation>
<xs:documentation> Tarjeta</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="03">
<xs:annotation>
<xs:documentation>Cheque</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="04">
<xs:annotation>
<xs:documentation>Transferencia - deposito bancario</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="05">
<xs:annotation>
<xs:documentation>Recaudado por terceros</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="99">
<xs:annotation>
<xs:documentation>Otros</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:element>
ENDTEXT 
*SELECT CURDETALLE
*SCAN
***************************************************************************************
**************************LINEAS DE DETALLE DE LA FACTURA*******************************
****************************************************************************************
*DETALLE DEL ARTICULO
TEXT TO XmlHacienda TEXTMERGE NOSHOW ADDITIVE
<xs:element name="DetalleServicio">
<xs:annotation>
<xs:documentation>Detalle de la mercancia o servicio prestado.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="LineaDetalle" maxOccurs="1000">
<xs:annotation>
<xs:documentation>Cada linea del detalle de la mercancia o servicio prestado.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="NumeroLinea" type="xs:positiveInteger">
<xs:annotation>
<xs:documentation>Numero de linea del detalle</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Codigo" type="CodigoType" minOccurs="0" maxOccurs="5"/>
<xs:element name="Cantidad">
<xs:annotation>
<xs:documentation>Cantidad</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:totalDigits value="16"/>
<xs:fractionDigits value="3"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="UnidadMedida" type="UnidadMedidaType">
<xs:annotation>
<xs:documentation>Unidad de medida </xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="UnidadMedidaComercial" minOccurs="0">
<xs:annotation>
<xs:documentation>Unidad de medida comercial</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Detalle">
<xs:annotation>
<xs:documentation>Detalle de la mercancia transferida o servicio prestado</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="160"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="PrecioUnitario" type="DecimalDineroType">
<xs:annotation>
<xs:documentation>Precio Unitario</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MontoTotal" type="DecimalDineroType">
<xs:annotation>
<xs:documentation>Se obtiene de multiplicar el campo cantidad por el campo precio unitario</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MontoDescuento" type="DecimalDineroType" minOccurs="0">
<xs:annotation>
<xs:documentation>Monto de descuento concedido, el cual es obligatorio si existe descuento</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="NaturalezaDescuento" minOccurs="0">
<xs:annotation>
<xs:documentation>Naturaleza del descuento, que es obligatorio si existe descuento</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="80"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="SubTotal" type="DecimalDineroType">
<xs:annotation>
<xs:documentation>Se obtiene de la resta del campo monto total menos monto de descuento concedido</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Impuesto" type="ImpuestoType" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Cuando el producto o servicio este gravado con algun impuesto se debe indicar cada uno de ellos.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MontoTotalLinea" type="DecimalDineroType">
<xs:annotation>
<xs:documentation>Se obtiene de la suma de los campos subtotal mas monto de los impuestos</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
ENDTEXT 
*ENDSCAN
******************************************************************************************
************************FIN LINEAS DE DETALLE DE LA FACTURA*******************************
******************************************************************************************
TEXT TO XmlHacienda TEXTMERGE NOSHOW ADDITIVE
<xs:element name="ResumenFactura">
<xs:complexType>
<xs:sequence>
<xs:element name="CodigoMoneda" minOccurs="0">
<xs:annotation>
<xs:documentation>Codigo de la moneda de acuerdo al ISO 4217</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="AED"/>
<xs:enumeration value="AFN"/>
<xs:enumeration value="ALL"/>
<xs:enumeration value="AMD"/>
<xs:enumeration value="ANG"/>
<xs:enumeration value="AOA"/>
<xs:enumeration value="ARS"/>
<xs:enumeration value="AUD"/>
<xs:enumeration value="AWG"/>
<xs:enumeration value="AZN"/>
<xs:enumeration value="BAM"/>
<xs:enumeration value="BBD"/>
<xs:enumeration value="BDT"/>
<xs:enumeration value="BGN"/>
<xs:enumeration value="BHD"/>
<xs:enumeration value="BIF"/>
<xs:enumeration value="BMD"/>
<xs:enumeration value="BND"/>
<xs:enumeration value="BOB"/>
<xs:enumeration value="BOV"/>
<xs:enumeration value="BRL"/>
<xs:enumeration value="BSD"/>
<xs:enumeration value="BTN"/>
<xs:enumeration value="BWP"/>
<xs:enumeration value="BYR"/>
<xs:enumeration value="BZD"/>
<xs:enumeration value="CAD"/>
<xs:enumeration value="CDF"/>
<xs:enumeration value="CHE"/>
<xs:enumeration value="CHF"/>
<xs:enumeration value="CHW"/>
<xs:enumeration value="CLF"/>
<xs:enumeration value="CLP"/>
<xs:enumeration value="CNY"/>
<xs:enumeration value="COP"/>
<xs:enumeration value="COU"/>
<xs:enumeration value="CRC"/>
<xs:enumeration value="CUC"/>
<xs:enumeration value="CUP"/>
<xs:enumeration value="CVE"/>
<xs:enumeration value="CZK"/>
<xs:enumeration value="DJF"/>
<xs:enumeration value="DKK"/>
<xs:enumeration value="DOP"/>
<xs:enumeration value="DZD"/>
<xs:enumeration value="EGP"/>
<xs:enumeration value="ERN"/>
<xs:enumeration value="ETB"/>
<xs:enumeration value="EUR"/>
<xs:enumeration value="FJD"/>
<xs:enumeration value="FKP"/>
<xs:enumeration value="GBP"/>
<xs:enumeration value="GEL"/>
<xs:enumeration value="GHS"/>
<xs:enumeration value="GIP"/>
<xs:enumeration value="GMD"/>
<xs:enumeration value="GNF"/>
<xs:enumeration value="GTQ"/>
<xs:enumeration value="GYD"/>
<xs:enumeration value="HKD"/>
<xs:enumeration value="HNL"/>
<xs:enumeration value="HRK"/>
<xs:enumeration value="HTG"/>
<xs:enumeration value="HUF"/>
<xs:enumeration value="IDR"/>
<xs:enumeration value="ILS"/>
<xs:enumeration value="INR"/>
<xs:enumeration value="IQD"/>
<xs:enumeration value="IRR"/>
<xs:enumeration value="ISK"/>
<xs:enumeration value="JMD"/>
<xs:enumeration value="JOD"/>
<xs:enumeration value="JPY"/>
<xs:enumeration value="KES"/>
<xs:enumeration value="KGS"/>
<xs:enumeration value="KHR"/>
<xs:enumeration value="KMF"/>
<xs:enumeration value="KPW"/>
<xs:enumeration value="KRW"/>
<xs:enumeration value="KWD"/>
<xs:enumeration value="KYD"/>
<xs:enumeration value="KZT"/>
<xs:enumeration value="LAK"/>
<xs:enumeration value="LBP"/>
<xs:enumeration value="LKR"/>
<xs:enumeration value="LRD"/>
<xs:enumeration value="LSL"/>
<xs:enumeration value="LYD"/>
<xs:enumeration value="MAD"/>
<xs:enumeration value="MDL"/>
<xs:enumeration value="MGA"/>
<xs:enumeration value="MKD"/>
<xs:enumeration value="MMK"/>
<xs:enumeration value="MNT"/>
<xs:enumeration value="MOP"/>
<xs:enumeration value="MRO"/>
<xs:enumeration value="MUR"/>
<xs:enumeration value="MVR"/>
<xs:enumeration value="MWK"/>
<xs:enumeration value="MXN"/>
<xs:enumeration value="MXV"/>
<xs:enumeration value="MYR"/>
<xs:enumeration value="MZN"/>
<xs:enumeration value="NAD"/>
<xs:enumeration value="NGN"/>
<xs:enumeration value="NIO"/>
<xs:enumeration value="NOK"/>
<xs:enumeration value="NPR"/>
<xs:enumeration value="NZD"/>
<xs:enumeration value="OMR"/>
<xs:enumeration value="PAB"/>
<xs:enumeration value="PEN"/>
<xs:enumeration value="PGK"/>
<xs:enumeration value="PHP"/>
<xs:enumeration value="PKR"/>
<xs:enumeration value="PLN"/>
<xs:enumeration value="PYG"/>
<xs:enumeration value="QAR"/>
<xs:enumeration value="RON"/>
<xs:enumeration value="RSD"/>
<xs:enumeration value="RUB"/>
<xs:enumeration value="RWF"/>
<xs:enumeration value="SAR"/>
<xs:enumeration value="SBD"/>
<xs:enumeration value="SCR"/>
<xs:enumeration value="SDG"/>
<xs:enumeration value="SEK"/>
<xs:enumeration value="SGD"/>
<xs:enumeration value="SHP"/>
<xs:enumeration value="SLL"/>
<xs:enumeration value="SOS"/>
<xs:enumeration value="SRD"/>
<xs:enumeration value="SSP"/>
<xs:enumeration value="STD"/>
<xs:enumeration value="SVC"/>
<xs:enumeration value="SYP"/>
<xs:enumeration value="SZL"/>
<xs:enumeration value="THB"/>
<xs:enumeration value="TJS"/>
<xs:enumeration value="TMT"/>
<xs:enumeration value="TND"/>
<xs:enumeration value="TOP"/>
<xs:enumeration value="TRY"/>
<xs:enumeration value="TTD"/>
<xs:enumeration value="TWD"/>
<xs:enumeration value="TZS"/>
<xs:enumeration value="UAH"/>
<xs:enumeration value="UGX"/>
<xs:enumeration value="USD"/>
<xs:enumeration value="USN"/>
<xs:enumeration value="UYI"/>
<xs:enumeration value="UYU"/>
<xs:enumeration value="UZS"/>
<xs:enumeration value="VEF"/>
<xs:enumeration value="VND"/>
<xs:enumeration value="VUV"/>
<xs:enumeration value="WST"/>
<xs:enumeration value="XAF"/>
<xs:enumeration value="XAG"/>
<xs:enumeration value="XAU"/>
<xs:enumeration value="XBA"/>
<xs:enumeration value="XBB"/>
<xs:enumeration value="XBC"/>
<xs:enumeration value="XBD"/>
<xs:enumeration value="XCD"/>
<xs:enumeration value="XDR"/>
<xs:enumeration value="XOF"/>
<xs:enumeration value="XPD"/>
<xs:enumeration value="XPF"/>
<xs:enumeration value="XPT"/>
<xs:enumeration value="XSU"/>
<xs:enumeration value="XTS"/>
<xs:enumeration value="XUA"/>
<xs:enumeration value="XXX"/>
<xs:enumeration value="YER"/>
<xs:enumeration value="ZAR"/>
<xs:enumeration value="ZMW"/>
<xs:enumeration value="ZWL"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="TipoCambio" type="DecimalDineroType" minOccurs="0">
<xs:annotation>
<xs:documentation>Tipo de cambio</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="TotalServGravados" type="DecimalDineroType" minOccurs="0">
<xs:annotation>
<xs:documentation>Total de los servicios gravados con IV</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="TotalServExentos" type="DecimalDineroType" minOccurs="0">
<xs:annotation>
<xs:documentation>Total de los servicios exentos de IV</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="TotalMercanciasGravadas" type="DecimalDineroType" minOccurs="0">
<xs:annotation>
<xs:documentation>Total mercancias gravadas con IV</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="TotalMercanciasExentas" type="DecimalDineroType" minOccurs="0">
<xs:annotation>
<xs:documentation>Total mercancias exentas de IV</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="TotalGravado" type="DecimalDineroType" minOccurs="0">
<xs:annotation>
<xs:documentation>Total gravado. se obtiene de la suma del total servicios gravados con IV + total mercancias gravadas con IV</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="TotalExento" type="DecimalDineroType" minOccurs="0">
<xs:annotation>
<xs:documentation>Total Exento, se obtiene de la suma de los campos total servicios exentos IV mas total mercancias exentas IV</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="TotalVenta" type="DecimalDineroType">
<xs:annotation>
<xs:documentation>Se obtiene de la suma de los campos total gravado mas total exento</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="TotalDescuentos" type="DecimalDineroType" minOccurs="0">
<xs:annotation>
<xs:documentation>Se obtiene de la suma de todos los campo de monto de descuento concedido</xs:documentation>
</xs:annotation>
</xs:element>
\\MONTO TOTAL NETO
<xs:element name="TotalVentaNeta" type="DecimalDineroType">
<xs:annotation>
<xs:documentation>Se obtiene de la resta de los campos total venta menos total descuento</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="TotalImpuesto" type="DecimalDineroType" minOccurs="0">
<xs:annotation>
<xs:documentation>Se obtiene de la suma de todos campos monto del impuesto</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="TotalComprobante" type="DecimalDineroType">
<xs:annotation>
<xs:documentation>Se obtiene de la suma de los campos total venta neta mas monto total de los impuestos</xs:documentation>
</xs:annotation>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="InformacionReferencia" minOccurs="0" maxOccurs="10">
<xs:complexType>
<xs:sequence>
<xs:element name="TipoDoc">
<xs:annotation>
<xs:documentation>Tipo de documento de referencia. 01 Factura electronica, 02 Nota de debito electronica, 03 nota de credito electronica, 04 Tiquete electronico, 05 Nota de despacho, 06 Contrato, 07 Procedimiento, 08 Comprobante emitido en contigencia, 99 Otros</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="01">
<xs:annotation>
<xs:documentation>Factura electronica</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="02">
<xs:annotation>
<xs:documentation>Nota de debido electronica</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="03">
<xs:annotation>
<xs:documentation>nota de credito electronica</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="04">
<xs:annotation>
<xs:documentation>Tiquete electronico</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="05">
<xs:annotation>
<xs:documentation>Nota de despacho</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="06">
<xs:annotation>
<xs:documentation>Contrato</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="07">
<xs:annotation>
<xs:documentation>Procedimiento</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="08">
<xs:annotation>
<xs:documentation>Comprobante emitido en contigencia</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="99">
<xs:annotation>
<xs:documentation>Otros</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Numero">
<xs:annotation>
<xs:documentation>Numero de documento de referencia</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="50"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
\\FECHA DE EMISION DEL DOCUMENTO
<xs:element name="FechaEmision" type="xs:dateTime">
<xs:annotation>
<xs:documentation>Fecha y hora de emision del documento de referencia</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Codigo">
<xs:annotation>
<xs:documentation>Codigo de referencia. 01 Anula documento de referencia, 02 Corrige texto de documento de referencia, 03 Corrige monto, 04 Referencia a otro documento, 05 Sustituye comprobante provisional por contigencia, 99 Otros</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="01">
<xs:annotation>
<xs:documentation>Anula documento de referencia</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="02">
<xs:annotation>
<xs:documentation>Corrige texto de ocumento de referencia</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="03">
<xs:annotation>
<xs:documentation>Corrige monto</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="04">
<xs:annotation>
<xs:documentation>Referencia a otro documento</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="05">
<xs:annotation>
<xs:documentation>Sustituye comprobante provisional por contigencia</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="99">
<xs:annotation>
<xs:documentation>Otros</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Razon">
<xs:annotation>
<xs:documentation>Razon de referencia</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="180"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="Normativa">
<xs:annotation>
<xs:documentation>Normativa vigente</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="NumeroResolucion">
<xs:annotation>
<xs:documentation>Se debe indicar el numero de resolucion DGT XXXX</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="13"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="FechaResolucion">
<xs:annotation>
<xs:documentation>La fecha y hora de resolucion. DD-MM-YYYY HH:MM:SS</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
\\OTROS
<xs:element name="Otros" minOccurs="0">
<xs:complexType>
<xs:sequence>
<xs:element name="OtroTexto" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Elemento opcional que se puede utilizar la almacenar texto.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:simpleContent>
<xs:extension base="xs:string">
<xs:attribute name="codigo" type="xs:string">
<xs:annotation>
<xs:documentation>Codigo opcional para facilitar la identificacion del elemento.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:element>
<xs:element name="OtroContenido" minOccurs="0" maxOccurs="unbounded">
<xs:annotation>
<xs:documentation>Elemento opcional que se puede utilizar para almacenar contenido estructurado.</xs:documentation>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:any namespace="##other" processContents="lax"/>
</xs:sequence>
<xs:attribute name="codigo" type="xs:string">
<xs:annotation>
<xs:documentation>Codigo opcional para facilitar la identificacion del elemento.</xs:documentation>
</xs:annotation>
</xs:attribute>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element ref="ds:Signature" minOccurs="1" maxOccurs="1"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="EmisorType">
<xs:sequence>
<xs:element name="Nombre" nillable="false">
<xs:annotation>
<xs:documentation>Nombre o razon social</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="80"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
\\NUMERO DE IDENTIFICACION
<xs:element name="Identificacion" type="IdentificacionType"/>
\\NOMBRE COMERCIAL
<xs:element name="NombreComercial" minOccurs="0">
<xs:annotation>
<xs:documentation>En caso de que se cuente con nombre comercial debe indicarse</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="80"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
\\UBICACION
<xs:element name="Ubicacion" type="UbicacionType"/>
\\TELEFONO
<xs:element name="Telefono" type="TelefonoType" nillable="true" minOccurs="0"/>
\\FAX
<xs:element name="Fax" type="TelefonoType" nillable="true" minOccurs="0"/>
<xs:element name="CorreoElectronico">
<xs:annotation>
<xs:documentation>Debe cumplir con la siguiente estructura:\s*\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\s*</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string"/>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ReceptorType">
<xs:sequence>
<xs:element name="Nombre" nillable="false">
<xs:annotation>
<xs:documentation>Nombre o razon social</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="80"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Identificacion" type="IdentificacionType" minOccurs="0"/>
<xs:element name="IdentificacionExtranjero" minOccurs="0">
<xs:annotation>
<xs:documentation>Este campo sera de condicion obligatoria, cuando el cliente lo requiera</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="NombreComercial" minOccurs="0">
<xs:annotation>
<xs:documentation>En caso de que se cuente con nombre comercial debe indicarse</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="80"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Ubicacion" type="UbicacionType" minOccurs="0"/>
<xs:element name="Telefono" type="TelefonoType" minOccurs="0"/>
<xs:element name="Fax" type="TelefonoType" minOccurs="0"/>
<xs:element name="CorreoElectronico" minOccurs="0">
<xs:annotation>
<xs:documentation>Este campo sera de condicion obligatoria, cuando el cliente lo requiera. Debe cumplir con la siguiente estructura: \s*\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*\s*</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string"/>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="IdentificacionType">
<xs:sequence>
<xs:element name="Tipo" nillable="false">
<xs:annotation>
<xs:documentation>Tipo de identificacion: 01 Cedula Fisica, 02 Cedula Juridica, 03 DIMEX, 04 NITE</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="01">
<xs:annotation>
<xs:documentation>Cedula Fisica</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="02">
<xs:annotation>
<xs:documentation> Cedula Juridica</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="03">
<xs:annotation>
<xs:documentation>DIMEX</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="04">
<xs:annotation>
<xs:documentation>NITE</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Numero" nillable="false">
<xs:annotation>
<xs:documentation>Numero de identificacion, el contribuyente debe estar inscrito ante la Administracion Tributaria</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="\d{9,12}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="UbicacionType">
<xs:sequence>
<xs:element name="Provincia">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="1"/>
<xs:maxLength value="1"/>
<xs:pattern value="\d"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Canton">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="2"/>
<xs:maxLength value="2"/>
<xs:pattern value="\d\d"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Distrito">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="2"/>
<xs:maxLength value="2"/>
<xs:pattern value="\d\d"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Barrio" minOccurs="0">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:minLength value="2"/>
<xs:maxLength value="2"/>
<xs:pattern value="\d\d"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="OtrasSenas">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="160"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="TelefonoType">
<xs:sequence>
<xs:element name="CodigoPais">
<xs:annotation>
<xs:documentation>Codigo del pais</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:totalDigits value="3"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="NumTelefono">
<xs:annotation>
<xs:documentation>Numero de telefono</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:totalDigits value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ExoneracionType">
<xs:sequence>
<xs:element name="TipoDocumento">
<xs:annotation>
<xs:documentation>Tipo de documento de exoneracion o autorizacion. 01 Compras Autorizadas, 02 Ventas exentas a diplomaticos, 03 Orden de compra (instituciones publicas y otros organismos), 04 Exenciones Direccion General de Hacienda, 05 Zonas Francas, 99 Otros</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="01">
<xs:annotation>
<xs:documentation>Compras Autorizadas</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="02">
<xs:annotation>
<xs:documentation>Ventas exentas a diplomaticos</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="03">
<xs:annotation>
<xs:documentation>Orden de compra (instituciones publicas y otros organismos)</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="04">
<xs:annotation>
<xs:documentation>Exenciones Direccion General de Hacienda</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="05">
<xs:annotation>
<xs:documentation>Zonas Francas</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="99">
<xs:annotation>
<xs:documentation>Otros</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="NumeroDocumento">
<xs:annotation>
<xs:documentation>Numero de documento de exoneracion o autorizacion</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="17"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="NombreInstitucion">
<xs:annotation>
<xs:documentation>Nombre de la institucion o dependencia que emitio la exoneracion</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="100"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="FechaEmision" type="xs:dateTime">
<xs:annotation>
<xs:documentation>Fecha y hora de la emision del documento de exoneracion o autorizacion.</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="MontoImpuesto" type="DecimalDineroType">
<xs:annotation>
<xs:documentation>Monto del impuesto exonerado o autorizado sin impuestos</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="PorcentajeCompra">
<xs:annotation>
<xs:documentation>Porcentaje de la compra autorizada o exonerada</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:integer">
<xs:totalDigits value="3"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="ImpuestoType">
<xs:sequence>
<xs:element name="Codigo">
<xs:annotation>
<xs:documentation>Codigo del impuesto: 01 Impuesto General sobre las ventas, 02 Impuesto Selectivo de Consumo, 03 Impuesto unico a los combustivos, 04 Impuesto especifico de bebidas alcoholicas, 05 Impuesto especifico sobre las bebidas envasadas sin contenido alcoholico y jabones de tocador, 06 Impuesto a los productos de tabaco, 07 Servicios, 99 Otros, 08 Impuesto General a las Ventas Diplomaticos, 09 Impuesto General sobre Ventas compras autorizadas, 10 Impuesto General sobre las ventas instituciones publicas y otros organismos, 11 Impuesto Selectivo de consumo compras autorizadas, 12 Impuesto Especifico al cemento, 98 Otros</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="01">
<xs:annotation>
<xs:documentation>Impuesto General sobre las ventas</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="02">
<xs:annotation>
<xs:documentation> Impuesto Selectivo de Consumo</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="03">
<xs:annotation>
<xs:documentation>Impuesto ünico a los combustivos</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="04">
<xs:annotation>
<xs:documentation>Impuesto especifico de bebidas alcoholicas</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="05">
<xs:annotation>
<xs:documentation>impuesto especifico sobre las bebidas envasadas sin contenido alcoholico y jabones de tocador</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="06">
<xs:annotation>
<xs:documentation>impuesto a los productos de tabaco</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="07">
<xs:annotation>
<xs:documentation>servicios</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="08">
<xs:annotation>
<xs:documentation>Impuesto General a las Ventas Diplomaticos</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="09">
<xs:annotation>
<xs:documentation>Impuesto General sobre Ventas compras autorizadas</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="10">
<xs:annotation>
<xs:documentation>Impuesto General sobre las ventas instituciones publicas y otros organismos</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="11">
<xs:annotation>
<xs:documentation>Impuesto Selectivo de consumo compras autorizadas</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="12">
<xs:annotation>
<xs:documentation>Impuesto Especifico al Cemento</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="98">
<xs:annotation>
<xs:documentation>Otros</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="99">
<xs:annotation>
<xs:documentation>Otros</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Tarifa">
<xs:annotation>
<xs:documentation>Tarifa del impuesto</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:decimal">
<xs:totalDigits value="4"/>
<xs:fractionDigits value="2"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Monto" type="DecimalDineroType">
<xs:annotation>
<xs:documentation>Se obtiene de la multiplicacion del campo subtotal por la tarifa del impuesto</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="Exoneracion" type="ExoneracionType" minOccurs="0"/>
</xs:sequence>
</xs:complexType>
<xs:complexType name="CodigoType">
<xs:sequence>
<xs:element name="Tipo">
<xs:annotation>
<xs:documentation>Tipo de codigo de producto o servicio: 01: Codigo del producto del vendedor, 02 Codigo del producto del comprador, 03 Codigo del producto asignado por la industria, 04 Codigo de uso interno, 99 Otros</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="01">
<xs:annotation>
<xs:documentation>Codigo del producto del vendedor</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="02">
<xs:annotation>
<xs:documentation>Codigo del producto del comprador</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="03">
<xs:annotation>
<xs:documentation>codigo del producto asignado por la industria</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="04">
<xs:annotation>
<xs:documentation>codigo de uso interno</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="99">
<xs:annotation>
<xs:documentation>Otros</xs:documentation>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="Codigo">
<xs:annotation>
<xs:documentation>Codigo del producto o servicio</xs:documentation>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:maxLength value="20"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:simpleType name="DecimalDineroType">
<xs:annotation>
<xs:documentation>Tipo de dato decimal para representar los valores de dinero.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:decimal">
<xs:totalDigits value="18"/>
<xs:fractionDigits value="5"/>
<xs:maxInclusive value="9999999999999.99999"/>
<xs:minInclusive value="0"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="ClaveType">
<xs:annotation>
<xs:documentation>Tipo de dato String que solo permite el uso de numeros con un largo de 50.</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="\d{50,50}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="NumeroConsecutivoType">
<xs:annotation>
<xs:documentation>Tipo de dato String que solo permite el uso de numeros con un largo de 20</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:pattern value="\d{20,20}"/>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="UnidadMedidaType">
<xs:annotation>
<xs:documentation>Unidades de Medida basadas en el estandar RTC 443:2010</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:string">
<xs:enumeration value="Sp">
<xs:annotation>
<xs:documentation>Servicios Profesionales</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="m">
<xs:annotation>
<xs:documentation>Metro</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="kg">
<xs:annotation>
<xs:documentation>Kilogramo</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="s">
<xs:annotation>
<xs:documentation>Segundo</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="A">
<xs:annotation>
<xs:documentation>Ampere</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="K">
<xs:annotation>
<xs:documentation>Kelvin</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="mol">
<xs:annotation>
<xs:documentation>Mol</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="cd">
<xs:annotation>
<xs:documentation>Candela</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="m²">
<xs:annotation>
<xs:documentation>metro cuadrado</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="m³">
<xs:annotation>
<xs:documentation>metro cubico</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="m/s">
<xs:annotation>
<xs:documentation>metro por segundo</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="m/s²">
<xs:annotation>
<xs:documentation>metro por segundo cuadrado</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="1/m">
<xs:annotation>
<xs:documentation>1 por metro</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="kg/m³">
<xs:annotation>
<xs:documentation>kilogramo por metro cubico</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="A/m²">
<xs:annotation>
<xs:documentation>ampere por metro cuadrado</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="A/m">
<xs:annotation>
<xs:documentation>ampere por metro</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="mol/m³">
<xs:annotation>
<xs:documentation>mol por metro cubico</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="cd/m²">
<xs:annotation>
<xs:documentation>candela por metro cuadrado</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="1">
<xs:annotation>
<xs:documentation>uno (indice de refraccion)</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="rad">
<xs:annotation>
<xs:documentation>radian</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="sr">
<xs:annotation>
<xs:documentation>estereorradian</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Hz">
<xs:annotation>
<xs:documentation>hertz</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="N">
<xs:annotation>
<xs:documentation>newton</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Pa">
<xs:annotation>
<xs:documentation>pascal</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="J">
<xs:annotation>
<xs:documentation>Joule</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="W">
<xs:annotation>
<xs:documentation>Watt</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="C">
<xs:annotation>
<xs:documentation>coulomb</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="V">
<xs:annotation>
<xs:documentation>volt</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="F">
<xs:annotation>
<xs:documentation>farad</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Ω">
<xs:annotation>
<xs:documentation>ohm</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="S">
<xs:annotation>
<xs:documentation>siemens</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Wb">
<xs:annotation>
<xs:documentation>weber</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="T">
<xs:annotation>
<xs:documentation>tesla</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="H">
<xs:annotation>
<xs:documentation>henry</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="°C">
<xs:annotation>
<xs:documentation>grado Celsius</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="lm">
<xs:annotation>
<xs:documentation>lumen</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="lx">
<xs:annotation>
<xs:documentation>lux</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Bq">
<xs:annotation>
<xs:documentation>Becquerel</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Gy">
<xs:annotation>
<xs:documentation>gray</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Sv">
<xs:annotation>
<xs:documentation>sievert</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="kat">
<xs:annotation>
<xs:documentation>katal</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Pa·s">
<xs:annotation>
<xs:documentation>pascal segundo</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="N·m">
<xs:annotation>
<xs:documentation>newton metro</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="N/m">
<xs:annotation>
<xs:documentation>newton por metro</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="rad/s">
<xs:annotation>
<xs:documentation>radian por segundo</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="rad/s²">
<xs:annotation>
<xs:documentation>radian por segundo cuadrado</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="W/m²">
<xs:annotation>
<xs:documentation>watt por metro cuadrado</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="J/K">
<xs:annotation>
<xs:documentation>joule por kelvin</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="J/(kg·K)">
<xs:annotation>
<xs:documentation>joule por kilogramo kelvin</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="J/kg">
<xs:annotation>
<xs:documentation>joule por kilogramo</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="W/(m·K)">
<xs:annotation>
<xs:documentation>watt por metro kevin</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="J/m³">
<xs:annotation>
<xs:documentation>joule por metro cubico</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="V/m">
<xs:annotation>
<xs:documentation>volt por metro</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="C/m³">
<xs:annotation>
<xs:documentation>coulomb por metro cubico</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="C/m²">
<xs:annotation>
<xs:documentation>coulomb por metro cuadrado</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="F/m">
<xs:annotation>
<xs:documentation>farad por metro</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="H/m">
<xs:annotation>
<xs:documentation>henry por metro</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="J/mol">
<xs:annotation>
<xs:documentation>joule por mol</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="J/(mol·K)">
<xs:annotation>
<xs:documentation>joule por mol kelvin</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="C/kg">
<xs:annotation>
<xs:documentation>coulomb por kilogramo</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Gy/s">
<xs:annotation>
<xs:documentation>gray por segundo</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="W/sr">
<xs:annotation>
<xs:documentation>watt por estereorradian</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="W/(m²·sr)">
<xs:annotation>
<xs:documentation>watt por metro cuadrado estereorradian</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="kat/m³">
<xs:annotation>
<xs:documentation>katal por metro cubico</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="min">
<xs:annotation>
<xs:documentation>minuto</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="h">
<xs:annotation>
<xs:documentation>hora</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="d">
<xs:annotation>
<xs:documentation>dia</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="º">
<xs:annotation>
<xs:documentation>grado</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="´">
<xs:annotation>
<xs:documentation>minuto</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="´´">
<xs:annotation>
<xs:documentation>segundo</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="L">
<xs:annotation>
<xs:documentation>litro</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="t">
<xs:annotation>
<xs:documentation>tonelada</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Np">
<xs:annotation>
<xs:documentation>neper</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="B">
<xs:annotation>
<xs:documentation>bel</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="eV">
<xs:annotation>
<xs:documentation>electronvolt</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="u">
<xs:annotation>
<xs:documentation>unidad de masa atomica unificada</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="ua">
<xs:annotation>
<xs:documentation>unidad astronomica</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Unid">
<xs:annotation>
<xs:documentation>unidad</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Gal">
<xs:annotation>
<xs:documentation>galon</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="g">
<xs:annotation>
<xs:documentation>gramo</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Km">
<xs:annotation>
<xs:documentation>kilometro</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="ln">
<xs:annotation>
<xs:documentation>pulgada</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="cm">
<xs:annotation>
<xs:documentation>centimetro</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="mL">
<xs:annotation>
<xs:documentation>mililitro</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="mm">
<xs:annotation>
<xs:documentation>milimetro</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Oz">
<xs:annotation>
<xs:documentation>onzas</xs:documentation>
</xs:annotation>
</xs:enumeration>
<xs:enumeration value="Otros">
<xs:annotation>
<xs:documentation/>
</xs:annotation>
</xs:enumeration>
</xs:restriction>
</xs:simpleType>
</xs:schema>
ENDTEXT 

STRTOFILE(XmlHacienda,ArchivoXml)
*El texto del XML.
*debe convertirse a un byte array
*y codificarse en Base64.
*El mapa de caracteres a utilizar en el XML. y en la codificacion Base64 es UTF8.

cRuta = SYS(5)+ADDBS(SYS(2003))
Firmar = CREATEOBJECT("firmado")
cFirmado = "FirmadoDGTD.xml"
Firmar.FirmarXAdesEpes(cFirmado,"certificado.p12")

*Convertir a UTF-8
lcFile = cFirmado
lcANSI = strconv(FileToStr( m.lcFile ),9)
lcUTF8 = SYS(5)+ADDBS(SYS(2003))+Forceext(m.lcFile, 'utf')
*Convierte a UTF8 con firma BOM
STRTOFILE(m.lcANSI,m.lcUTF8,4)
*ArchivoXml = lcUTF8
lnH = FOPEN(m.lcUTF8, 10)
IF lnH > 0
  lcBOM = FREAD(m.lnH, 3)
  IF m.lcBOM == 0hEFBBBF
= FCLOSE(m.lnH)
*Convertir a un byte array
lvBinary = CREATEBINARY(FILETOSTR(m.lcUTF8))
_cliptext = lvBinary
lcBINARY = SYS(5)+ADDBS(SYS(2003))+Forceext(m.lcFile, 'Bin')
pnfich = FCREATE(m.lcBINARY)
    FPUTS(pnfich, m.lvBinary)
FCLOSE(pnfich)
*Covertir a Base64
vc_Base64 = STRCONV(FILETOSTR(m.lcBINARY),13)
  ELSE
  = FCLOSE(m.lnH)
    WAIT WINDOW "No UTF-8 BOM"
  ENDIF
ELSE
  *-- Error
ENDIF
*!* clear
*!* ?vc_Base64
**Archivo Listo para ser enviado a Tributacion.
lcBAS64 = Forceext(m.lcBINARY, 'b64')
STRTOFILE(vc_Base64,m.lcBAS64)
                           

Hernan Serrano

unread,
Jan 27, 2018, 9:04:24 AM1/27/18
to publice...@googlegroups.com
Adjunto el codigo de creacion encriptacion y firmado del .xml.
Ya estoy haciendo pruebas de envio a Hacienda.
crear factura electronica 4.2a.prg

Hernan Serrano

unread,
Jan 28, 2018, 10:52:00 PM1/28/18
to publice...@googlegroups.com
Compañeros, ya logre el envio a Tributacion.
Excepto que no me devuelve error. (Creo que es aceptacion.)
Apenas depure el codigo lo comparto.

ATTE
Hernan

El 27 de enero de 2018, 8:04, Hernan Serrano <hernan.serr...@gmail.com> escribió:
Adjunto el codigo de creacion encriptacion y firmado del .xml.
Ya estoy haciendo pruebas de envio a Hacienda.

Hernan Serrano

unread,
Jan 29, 2018, 8:26:52 AM1/29/18
to publice...@googlegroups.com
El JSON, devuelto trae el mensaje. En este caso rechazado. Pero ahora hay que revisar para ver por que no lo esta aceptando. Tarea para hoy.

El 28 de enero de 2018, 21:51, Hernan Serrano <hernan.serr...@gmail.com> escribió:
Compañeros, ya logre el envio a Tributacion.
Excepto que no me devuelve error. (Creo que es aceptacion.)
Apenas depure el codigo lo comparto.

ATTE
Hernan

Geovanni Solís Perez

unread,
Feb 7, 2018, 1:44:26 PM2/7/18
to publice...@googlegroups.com
Excelente don Hernan, Muchas gracias por compartir todo lo que has hecho por la comunidad, de verdad, gracias.


Libre de virus. www.avast.com
El 29 de enero de 2018, 7:26, Hernan Serrano <hernan.serr...@gmail.com> escribió:
El JSON, devuelto trae el mensaje. En este caso rechazado. Pero ahora hay que revisar para ver por que no lo esta aceptando. Tarea para hoy.
...

[Mensaje recortado]  

Hernan Serrano

unread,
Feb 7, 2018, 9:41:27 PM2/7/18
to publice...@googlegroups.com
En realidad si te devuelve rechazado, vuelve a consultar el documento. Esta vez te van a devolver los datos de por que lo estan rechazando. Te los devuelven encriptado en base64, -debes desencriptarlo para ver los errores enviados. Corregir y volver a enviar.

El 7 de febrero de 2018, 12:44, Geovanni Solís Perez <solis...@gmail.com> escribió:
Excelente don Hernan, Muchas gracias por compartir todo lo que has hecho por la comunidad, de verdad, gracias.


Libre de virus. www.avast.com



--
Tico Support S. A.
Tel. (506)8819-4369

Carlos Ulate

unread,
Feb 23, 2018, 9:55:39 AM2/23/18
to Comunidad de Visual Foxpro en Español
Muchas gracias a todos por compartir su conocimiento..
En este momento estoy realizando un sistema de Facturación Electrónica y estoy en la etapa del XML, creo estar bastante avanzado, sin embargo tengo una duda con la Clave Númerica. Los caracteres del 43 al 50 corresponden a un código de seguridad.. Ese código es un código para el uso interno de mí propio sistema o se genera con algún algoritmo?

Saludos y gracias...




El miércoles, 7 de febrero de 2018, 12:44:26 (UTC-6), Geovanni Solís Perez escribió:
Excelente don Hernan, Muchas gracias por compartir todo lo que has hecho por la comunidad, de verdad, gracias.


Libre de virus. www.avast.com
El 29 de enero de 2018, 7:26, Hernan Serrano <hernan.serr...@gmail.com> escribió:
El JSON, devuelto trae el mensaje. En este caso rechazado. Pero ahora hay que revisar para ver por que no lo esta aceptando. Tarea para hoy.
El 28 de enero de 2018, 21:51, Hernan Serrano <hernan.serr...@gmail.com> escribió:
Compañeros, ya logre el envio a Tributacion.
Excepto que no me devuelve error. (Creo que es aceptacion.)
Apenas depure el codigo lo comparto.

ATTE
Hernan
<span style="whit

Hernan Serrano

unread,
Feb 23, 2018, 11:47:46 AM2/23/18
to publice...@googlegroups.com
Amigo. Tu le pones al sistema. el numero que desees. Y ese es el que envias.
--
Tico Support S. A.
Tel. (506)8819-4369

Carlos Ulate

unread,
Feb 23, 2018, 1:12:13 PM2/23/18
to Comunidad de Visual Foxpro en Español
Muchas gracias por la Info..
Ahora estoy trabajando en el Firmado del XML,. Por el momento estoy estancado, estoy trabajando en PHP, si alguien tiene algo acerca de esto se lo agradecería..

Saludos..

ejgar...@hotmail.com

unread,
Feb 24, 2018, 9:24:20 PM2/24/18
to Comunidad de Visual Foxpro en Español
Buenas amigos,

Aqui un dato super importante, para trabajar con este tipo de servicios es necesario utilizar herramientas de diagnostico para revisar que estan enviando al servidor y al mismo tiempo que esta respondiendo, y en muchas ocasiones la informacion queda oculta en los encabezados de respuesta o en el mismo cuerpo sin mucho acceso del lado del codigo que tengan.

Les recomiendo que usen Fiddler, aca un ejemplo de troubleshooting de envio y respuesta, tambien es importante usar la funcion de Echo test, pero concretamente con los servicios del Ministerio de Hacienda, observen como devuelve el detalle del error 400: abajo en el body me indica que tengo un error en el fomrato de fecha, asi sucesivamnete hasta lograr serializar el XML que requiere el servicio.


 

Creo que con esto no van a tener mas problemas para llegar a sus soluciones,

Saludos, desde Vzla.

facelec...@gmail.com

unread,
Apr 5, 2018, 10:56:48 AM4/5/18
to Comunidad de Visual Foxpro en Español
Saludos amigos, tengo disponible para la venta el codigo fuente para Facturación Electrónica Costa Rica en Visual FoxPro 9, 100% código FoxPro sin librerias ni dlls externas, solo se requiere el uso del openssl para calculo de firma. Incluyo Ejecutable .exe Demo 100% operativo que demuestra la operacion del módulo, conecta con hacienda, solicita token, calcula la firma, envia el documento y recibe la respuesta.
Adjunto captures de pantalla.
Imagenes.zip

Kevin Calderón Ramírez

unread,
Oct 9, 2018, 9:54:39 AM10/9/18
to Comunidad de Visual Foxpro en Español
Saludos gente,

Leyendo un poco veo que muchos acá tienen el mismo inconveniente, hay muy poca documentación sobre el envío de facturas a hacienda, yo tengo un inconveniente con el envío de mensajes de recepción, creo un Json pero de hacienda recibó un mensaje de validación que no me dice nada, si alguno me puede ayudar, se lo agradecería.

Este es el Json que estoy enviando.

{
  "clave": "50603091800310104202800100001010000159585167567896",
  "fecha": "2018-10-08T16:11:16-06:00",
  "emisor": {
    "tipoIdentificacion": "02",
    "numeroIdentificacion": "3101000000"
  },
  "receptor": {
    "tipoIdentificacion": "02",
    "numeroIdentificacion": "2300000000"
  },
  "callbackUrl": "null",
  "numeroconsecutivoReceptor": "00100001050000000001",
  "comprobanteXML": "PD94bWwgdmVyc2lvbj0iMS4w..................."
}


Pero recibo de Hacienda este mensaje en el encabezado:

      • "Tue, 09 Oct 2018 13:46:35 GMT"
      • "application/json"
      • "0"
      • "close"
      • "*/*"
      • "gzip"
      • "Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers"
      • "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, CONNECT, PATCH"
      • "*"
      • "3600"
      • "ID-pebpriin0101-prod-comprobanteselectronicos-go-cr-39517-1537713567632-0-16827737"
      • "__cfduid=d1b9c9c4ac341f86c279228034dca41f81537206547"
      • "fd7338c1-b6f5-4739-811b-a393c1fe784e"
      • "PostmanRuntime/7.3.0"
      • "El Payload de recepción no es válido. ERROR = El Payload no incluye alguno de los campos requeridos"
      • "6000"
      • "5994"
      • "1539113642"
      • "max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct""
      • "cloudflare"
      • "46714b5418db52fc-MIA"


De antemano agradezco mucho cualquier colaboración, saludos

Kevin Calderón

Jc Mejia

unread,
Oct 20, 2018, 5:04:22 AM10/20/18
to Comunidad de Visual Foxpro en Español
Hola,

Me parece que el error esta en que usas el atributo "numeroconsecutivoReceptor" y lo correcto seria "consecutivoReceptor"

Espero que te sea de ayuda,

Saludos

JC Mejia

Kevin Calderón Ramírez

unread,
Nov 6, 2018, 5:23:03 PM11/6/18
to Comunidad de Visual Foxpro en Español
Buenos días gente, 

otra consulta, estamos tratando de enviar facturas para pruebas al sandbox, pero no nos esta validando el certificado al momento de enviarlo al API.

<?xml version="1.0" encoding="UTF-8"?>
    <Clave>50630071800310107736300100001010000000440130071844</Clave>
    <NombreEmisor>DESCONOCIDO</NombreEmisor>
    <TipoIdentificacionEmisor>02</TipoIdentificacionEmisor>
    <NumeroCedulaEmisor>003101077363</NumeroCedulaEmisor>
    <TipoIdentificacionReceptor>02</TipoIdentificacionReceptor>
    <NumeroCedulaReceptor>002300042155</NumeroCedulaReceptor>
    <Mensaje>3</Mensaje>
    <DetalleMensaje>Este comprobante fue aceptado en el ambiente de pruebas, por lo cual no tiene validez para fines tributarios

La firma del comprobante electrónico no es válida</DetalleMensaje>
    <TotalFactura>0</TotalFactura>

Alguno esta teniendo el mismo problema, se consulta en el verificador de gometa: https://apis.gometa.org/validar


Valida.PNG


Si alguno me puede brindar ayuda, se lo agradezco.

César Ruiz

unread,
Nov 6, 2018, 6:23:35 PM11/6/18
to publice...@googlegroups.com
Revisa el XML normalmente es algún detalle ahí.  Otro punto podría ser generar otra llave criptografica también por ahí podría estar el detalle, sin embargo me centraría en el XML primero

Saludos
Reply all
Reply to author
Forward
0 new messages