Diferencia entre revisiones de «Manual DLL hkafact21 - Emisión V4»

De tfhkacolwiki
Ir a la navegación Ir a la búsqueda
 
(No se muestran 10 ediciones intermedias de 5 usuarios)
Línea 37: Línea 37:
 
=== Declaración ===
 
=== Declaración ===
 
<center>
 
<center>
<pre> INT Enviar (string URL, string tokenEmpresa, string tokenPassword, string DatosCliente, string FacturaGlobal, string AnticAutCargDesc, string CpDr, string EntMerc, string ImpuestosFactura, string MpOcTe, string TcTcaIa, string DetalleDeFactura , string Extras, string Adjuntos, string SectorSalud, bool debugMode)</pre></center>
+
<pre> INT Enviar (string URL, string tokenEmpresa, string tokenPassword, string DatosCliente, string FacturaGlobal, string AnticAutCargDesc, string CpDr, string EntMerc, string ImpuestosFactura, string MpOcTe, string TcTcaIa, string Extras, string DetalleDeFactura, string Adjuntos, string SectorSalud, bool debugMode)</pre></center>
  
 
=== String URL ===
 
=== String URL ===
Línea 67: Línea 67:
 
(11 Campos, 9 pipes “|”):
 
(11 Campos, 9 pipes “|”):
 
<center>
 
<center>
<pre>ID01B=01A|CanalDeEntrega|email|fechaProgramada|mensajePersonalizado|nitProveedorReceptor
+
<pre>ID01A=01A|CanalDeEntrega|email|fechaProgramada|mensajePersonalizado|nitProveedorReceptor
 
|telefono|Extensible1.controlInterno1|Extensible1.controlInterno2
 
|telefono|Extensible1.controlInterno1|Extensible1.controlInterno2
 
|Extensible1.nombre|Extensible1.valor
 
|Extensible1.nombre|Extensible1.valor
Línea 99: Línea 99:
 
<pre>ID01F=01F|obligaciones|regimen|Extensible1.controlInterno1|Extensible1.controlInterno2
 
<pre>ID01F=01F|obligaciones|regimen|Extensible1.controlInterno1|Extensible1.controlInterno2
 
|Extensible1.nombre|Extensible1.valor
 
|Extensible1.nombre|Extensible1.valor
|prefijoFacturacion|tipoIdentificacion
 
 
</pre>
 
</pre>
 
</center>
 
</center>
Línea 358: Línea 357:
 
=== String MpOcTe ===
 
=== String MpOcTe ===
 
Esta cadena contiene la información referente a Medios de pagos, Orden de compra y términos de entrega.  
 
Esta cadena contiene la información referente a Medios de pagos, Orden de compra y términos de entrega.  
<br>
 
 
==== <font color="blue"> MediosPago </font>  ====
 
(15 Campos, 14 pipes “|”):
 
<center>
 
<pre>ID02J=02J|codigoBanco|codigoCanalPago|codigoReferencia|fechaDeVencimiento|medioPago|metodoDePago
 
|nombreBanco|numeroDeReferencia|numeroDias|numeroTransferencia|Extensible1.controlInterno1
 
|Extensible1.controlInterno2|Extensible1.nombre|Extensible1.valor
 
</pre>
 
</center>
 
'''Nota:''' Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena 
 
 
<br>
 
<br>
  
Línea 525: Línea 513:
 
Esta cadena contiene los campos extras que se deseen agregar al objeto factura.
 
Esta cadena contiene los campos extras que se deseen agregar al objeto factura.
 
<br>
 
<br>
<u><center>'''Extras = '''<font color="Blue>04</font>ID03A|controlInterno1|controlInterno2|nombre|pdf|valor|xml</u></center>
+
<u><center>'''Extras = '''<font color="Blue>04</font>|controlInterno1|controlInterno2|nombre|pdf|valor|xml</u></center>
 
'''Observaciones:'''
 
'''Observaciones:'''
 
*El string Extras es repetible.
 
*El string Extras es repetible.
Línea 563: Línea 551:
 
</center>
 
</center>
 
<br/>
 
<br/>
'''Nota:'''Los camposGenerales se encuentran numerados según el orden establecido en la resolución.
+
'''Nota:'''Los camposGenerales se encuentran numerados según el orden establecido en la resolución. Para los campos que se envian vacios se debe finalizar la cadena con pipe (|) adicional.  
 
*El string CamposGenerales es repetible.  
 
*El string CamposGenerales es repetible.  
 
<u><center>'''Separación entre Pacientes:'''</u> <span style="color:#000000; background:#FFFF00">“¬”</span>  <span style="color:#000000; background:#FFFF00">(Ejemplo: Paciente1¬Paciente2)</span>   
 
<u><center>'''Separación entre Pacientes:'''</u> <span style="color:#000000; background:#FFFF00">“¬”</span>  <span style="color:#000000; background:#FFFF00">(Ejemplo: Paciente1¬Paciente2)</span>   
Línea 597: Línea 585:
  
  
:01|codigo|consecutivoDocumento|cufe|fechaRespuesta|hash|mensaje|resultado|tipoCufe|1|nombre|fechaAceptacionDIAN
+
:01|codigo|consecutivoDocumento|cufe|fechaRespuesta|hash|mensaje|resultado|tipoCufe|esValidoDian|nombre|fechaAceptacionDIAN
 +
 
 +
:esValidoDian =1 True (Documento Aceptado) -  esValidoDian = 0 False (Documento no Aceptado)
  
 
:01A|mensajeValidacion  
 
:01A|mensajeValidacion  
Línea 655: Línea 645:
 
<big>'''String tipo '''</big>
 
<big>'''String tipo '''</big>
 
<br/>
 
<br/>
“2” Tipo de documento anexo o adjunto.
+
“1” Declaramos en la Clase Adjunto (Class.Adjunto) en Tipo "1" cuando queremos generar la representación gráfica obtenida por el ERP.<br/>
 +
“2” Declaramos en la Clase Adjunto (Class.Adjunto) en Tipo "2" Cuando se van a enviar otros documentos adicionales a la factura, es decir, que estos documentos van a quedar en una cola sin que se haga ningún tipo de envío sin antes indicárselo a la plataforma. Para esto, el<strong> parámetro <enviar> </strong>se debe declarar en cero '0', para indicarle a nuestra plataforma que sincronice el adjunto pero sin enviarlo. Finalmente cuando se declare el último adjunto se debe declarar el <strong>parámetro <enviar></strong> en "1", así nuestra plataforma entiende que es el último adjunto, por tanto envía este último documento más los anteriores que se encontraban en la cola.  
 +
 
 
<br/>
 
<br/>
  
Línea 722: Línea 714:
 
=== Respuesta método EstadoDocumento===
 
=== Respuesta método EstadoDocumento===
 
Las respuestas se darán en un archivo de texto plano con nombre hkafact21fresult con la siguiente estructura:Las respuestas se darán en un archivo de texto plano con nombre hkafact21fresult.txt con la siguiente estructura:
 
Las respuestas se darán en un archivo de texto plano con nombre hkafact21fresult con la siguiente estructura:Las respuestas se darán en un archivo de texto plano con nombre hkafact21fresult.txt con la siguiente estructura:
 +
  
  
Línea 727: Línea 720:
 
:|esValidoDIAN|estatusDocumento|fechaDocumento|mensaje|mensajeDocumento|poseeAdjuntos|poseeRepresentacionGrafica|resultado
 
:|esValidoDIAN|estatusDocumento|fechaDocumento|mensaje|mensajeDocumento|poseeAdjuntos|poseeRepresentacionGrafica|resultado
 
:|tipoCufe|tipoDocumento|trackID|fechaAceptacionDIAN
 
:|tipoCufe|tipoDocumento|trackID|fechaAceptacionDIAN
 +
 +
:esValidoDian =1 True (Documento Aceptado) -  esValidoDian = 0 False (Documento no Aceptado)
 +
  
 
:01A|ambienteDIAN|codigo|comentario|cufe|descripcionEvento|emisorNumeroDocumento|emisorNumeroDocumentoDV|emisorRazonSocial
 
:01A|ambienteDIAN|codigo|comentario|cufe|descripcionEvento|emisorNumeroDocumento|emisorNumeroDocumentoDV|emisorRazonSocial
Línea 733: Línea 729:
 
:tipoEvento|versionUBL|xml
 
:tipoEvento|versionUBL|xml
  
:01A1|codigoInterno1|codigoInterno2|nombre|valor
+
 
 +
:01A1|codigoInterno1|codigoInterno2|nombre|valor
 +
  
 
:01B|canalDeEntrega|email|entregaEstatus|entregaEstatusDescripcion|entregaFecha|fechaProgramada|mensajePersonalizado
 
:01B|canalDeEntrega|email|entregaEstatus|entregaEstatusDescripcion|entregaFecha|fechaProgramada|mensajePersonalizado
 
:|nitProveedorReceptor|recepcionEmailComentario|recepcionEmailEstatus|recepcionEmailFecha|recepcionEmailIPAddress|telefono
 
:|nitProveedorReceptor|recepcionEmailComentario|recepcionEmailEstatus|recepcionEmailFecha|recepcionEmailIPAddress|telefono
 +
  
 
:01C|reglasValidacionDIAN
 
:01C|reglasValidacionDIAN
 +
  
 
<br/>
 
<br/>
Línea 1096: Línea 1096:
 
<br>
 
<br>
 
<br/>
 
<br/>
* ID06= "06|01|SS-CUFE|02"
+
* ID06= "06|01|SS-CUFE|2"
 
* ID06A= "06A|Fulano|Sutano|1|POXBOX01|Principal|Los Chaimas|Bogotá, D.C.|11|-66.01|Bogotá|Soporte|Kr #71D 76-15|Los Andes|Principal|es|11001|Chaima|16a|78|CO|2|sur|parcela||111061|||||"
 
* ID06A= "06A|Fulano|Sutano|1|POXBOX01|Principal|Los Chaimas|Bogotá, D.C.|11|-66.01|Bogotá|Soporte|Kr #71D 76-15|Los Andes|Principal|es|11001|Chaima|16a|78|CO|2|sur|parcela||111061|||||"
 
<br>
 
<br>
  
<big><center><font color="Green">**Los camposGenerales se encuentran numerados según el orden establecido en la resolución.</font></center></big>
+
<big><center><font color="Green">**Los camposGenerales se encuentran numerados según el orden establecido en la resolución 2275.</font></center></big>
 
<br>  
 
<br>  
<pre>ID06B = "06B|1|CODIGO_PRESTADOR"+ "%" + "06B|2|TIPO_DOCUMENTO_IDENTIFICACION" + "%" + "06B|3|NUMERO_DOCUMENTO_IDENTIFICACION" + "%" + "06B|4|PRIMER_APELLIDO"+ %+ "06B|5|SEGUNDO_APELLIDO"+ "%" + "06B|6|PRIMER_NOMBRE" + "%" + "06B|7|SEGUNDO_NOMBRE" + "%" + "06B|8|TIPO_USUARIO" + "%" + "06B|9|MODALIDAD_CONTRATACION" + "%" + "06B|10|COBERTURA_PLAN_BENEFICIOS" +  "%" + "06B|11|NUMERO_AUTORIZACION" +  "%" + "06B|12|NUMERO_MIPRES" +  "%" + "06B|13|NUMERO_ENTREGA_MIPRES" +  "%" + "06B|14|NUMERO_CONTRATO" +  "%" + "06B|15|NUMERO_POLIZA" +  "%" + "06B|16|COPAGO" + "%" + "06B|17|CUOTA_MODERADORA" + "%" + "06B|18|CUOTA_RECUPERACION" + "%" + "06B|19|PAGOS_COMPARTIDOS"</pre>
+
<pre>ID06B = "06B|1|CODIGO_PRESTADOR"+ "%" + "06B|2||" + "%" + "06B|3||" + "%" + "06B|4||" + "%" + "06B|5||"+ "%" + "06B|6||" + "%" + "06B|7||" + "%" + "06B|8||" + "%" + "06B|9|MODALIDAD_PAGO" + "%" + "06B|10|COBERTURA_PLAN_BENEFICIOS" +  "%" + "06B|11||" +  "%" + "06B|12||" +  "%" + "06B|13||" +  "%" + "06B|14|NUMERO_CONTRATO" +  "%" + "06B|15|NUMERO_POLIZA" +  "%" + "06B|16|COPAGO" + "%" + "06B|17|CUOTA_MODERADORA" + "%" + "06B|18||" + "%" + "06B|19|PAGOS_COMPARTIDOS"</pre>
 
<br>
 
<br>
  
 
<big><center><font color="Orange">*** Varios pacientes:</font></center></big>
 
<big><center><font color="Orange">*** Varios pacientes:</font></center></big>
 
<br/>
 
<br/>
<pre>ID06B1 = "06B|1|CODIGO_PRESTADOR"+ "%" + "06B|2|TIPO_DOCUMENTO_IDENTIFICACION" + "%" + "06B|3|NUMERO_DOCUMENTO_IDENTIFICACION" + "%" + "06B|4|PRIMER_APELLIDO"+ %+ "06B|5|SEGUNDO_APELLIDO"+ "%" + "06B|6|PRIMER_NOMBRE" + "%" + "06B|7|SEGUNDO_NOMBRE" + "%" + "06B|8|TIPO_USUARIO" + "%" + "06B|9|MODALIDAD_CONTRATACION" + "%" + "06B|10|COBERTURA_PLAN_BENEFICIOS" +  "%" + "06B|11|NUMERO_AUTORIZACION" +  "%" + "06B|12|NUMERO_MIPRES" +  "%" + "06B|13|NUMERO_ENTREGA_MIPRES" +  "%" + "06B|14|NUMERO_CONTRATO" +  "%" + "06B|15|NUMERO_POLIZA" +  "%" + "06B|16|COPAGO" + "%" + "06B|17|CUOTA_MODERADORA" + "%" + "06B|18|CUOTA_RECUPERACION" + "%" + "06B|19|PAGOS_COMPARTIDOS"</pre>
+
<pre>ID06B = "06B|1|CODIGO_PRESTADOR"+ "%" + "06B|2||" + "%" + "06B|3||" + "%" + "06B|4||" + "%" + "06B|5||"+ "%" + "06B|6||" + "%" + "06B|7||" + "%" + "06B|8||" + "%" + "06B|9|MODALIDAD_PAGO" + "%" + "06B|10|COBERTURA_PLAN_BENEFICIOS" +  "%" + "06B|11||" +  "%" + "06B|12||" +  "%" + "06B|13||" +  "%" + "06B|14|NUMERO_CONTRATO" +  "%" + "06B|15|NUMERO_POLIZA" +  "%" + "06B|16|COPAGO" + "%" + "06B|17|CUOTA_MODERADORA" + "%" + "06B|18||" + "%" + "06B|19|PAGOS_COMPARTIDOS"</pre>
 
<br/>
 
<br/>
<pre>ID06B2 = "06B|1|CODIGO_PRESTADOR"+ "%" + "06B|2|TIPO_DOCUMENTO_IDENTIFICACION" + "%" + "06B|3|NUMERO_DOCUMENTO_IDENTIFICACION" + "%" + "06B|4|PRIMER_APELLIDO"+ %+ "06B|5|SEGUNDO_APELLIDO"+ "%" + "06B|6|PRIMER_NOMBRE" + "%" + "06B|7|SEGUNDO_NOMBRE" + "%" + "06B|8|TIPO_USUARIO" + "%" + "06B|9|MODALIDAD_CONTRATACION" + "%" + "06B|10|COBERTURA_PLAN_BENEFICIOS" +  "%" + "06B|11|NUMERO_AUTORIZACION" +  "%" + "06B|12|NUMERO_MIPRES" +  "%" + "06B|13|NUMERO_ENTREGA_MIPRES" +  "%" + "06B|14|NUMERO_CONTRATO" +  "%" + "06B|15|NUMERO_POLIZA" +  "%" + "06B|16|COPAGO" + "%" + "06B|17|CUOTA_MODERADORA" + "%" + "06B|18|CUOTA_RECUPERACION" + "%" + "06B|19|PAGOS_COMPARTIDOS"</pre>
+
<pre>ID06B1 = "06B|1|CODIGO_PRESTADOR"+ "%" + "06B|2||" + "%" + "06B|3||" + "%" + "06B|4||" + "%" + "06B|5||"+ "%" + "06B|6||" + "%" + "06B|7||" + "%" + "06B|8||" + "%" + "06B|9|MODALIDAD_PAGO" + "%" + "06B|10|COBERTURA_PLAN_BENEFICIOS" +  "%" + "06B|11||" +  "%" + "06B|12||" +  "%" + "06B|13||" +  "%" + "06B|14|NUMERO_CONTRATO" +  "%" + "06B|15|NUMERO_POLIZA" +  "%" + "06B|16|COPAGO" + "%" + "06B|17|CUOTA_MODERADORA" + "%" + "06B|18||" + "%" + "06B|19|PAGOS_COMPARTIDOS"</pre>
 
<br/>
 
<br/>
  
<big><center><font color="Orange">Pacientes= ID06B1 + "¬" + ID06B2</font></center></big>
+
<big><center><font color="Orange">Pacientes= Concatenacion de todos los Pacientes separados por el caracter "¬"= ID06B + "¬" + ID06B1</font></center></big>
 
<br/>
 
<br/>
<pre>ID06C = "06C|||5170000|1|100.50|1"
+
<pre>Pacientes= ID06B + "¬" + ID06B1
SectorSalud= ID06 + "%" + ID06A + "%%" + ID06B + "%%" + ID06C
+
ID06C = "06C|||5170000|1|100.50|1"
SectorSalud= ID06 + "%" + ID06A + "%%" + <font color="Orange"Pacientes</font> + "%%" + ID06C (Varios Pacientes)</pre>
+
SectorSalud= ID06 + "%" + ID06A + "%%" + Pacientes
 +
</pre>
 
<br/>
 
<br/>
 
<font color="Blue">Adjuntos</font>= "0"
 
<font color="Blue">Adjuntos</font>= "0"

Revisión actual del 21:11 8 abr 2024

Sumario

Objetivo


El presente manual tiene como propósito dar a conocer los detalles de los cambios a nivel del consumo de la librería HKAFACT21 para validación previa respecto a la versión del modelo de facturación de validación posterior (HKAFACT).

Alcance


El presente documento abarca desde la instalación de la API hasta las funciones utilizables para el consumo del Servicio Web de Integración para el modelo de facturación de validación previa. La librería hkafact21 es compatible con cualquier desarrollo cuya base sea plataformas WIN32

Nota: En el mismo se describen cada uno de los strings que constituyen el objeto factura. Para obtener mayor información sobre la obligatoriedad de los campos (requeridos/opcionales) ver MANUAL DE INTEGRACION DIRECTA (EMISIÓN - VAL. PREVIA)

Definiciones y Términos


  • C++: lenguaje de programación diseñado para extender al lenguaje de programación C con mecanismos que permiten la manipulación de objetos. En ese sentido, desde el punto de vista de los lenguajes orientados a objetos, el C++ es un lenguaje híbrido, con la particularidad de poder redefinir los operadores, y de crear nuevos tipos que se comporten como tipos fundamentales.
  • DLL: Biblioteca de enlace dinámico o más comúnmente DLL (sigla en inglés de dynamic-link library) es el término con el que se refiere a los archivos con código ejecutable que se cargan bajo demanda de un programa por parte del sistema operativo.
  • SDK: Un kit de desarrollo de software es un conjunto de herramientas de desarrollo de software que le permite al programador o desarrollador de software crear una aplicación informática para un sistema concreto.
  • Servicio Web de Integración: Servicio Web de The Factory HKA Colombia SAS puesto a disposición a propietarios de software administrativos o de gestión para la generación de factura electrónica.

Procedimiento


Instalación: En el SDK descargado, se encontrará con tres herramientas; la librería de integración (hkafact21.dll), el presente manual y un demo funcional de código. Antes de comenzar a hacer uso de la librería en el desarrollo, lo primero que se debe hacer es registrar y referenciar la librería en nuestro proyecto. Esto se consigue siguiendo los siguientes pasos:
  1. Creamos una nueva carpeta.
  2. Descomprimimos el contenido del SDK en la capeta previamente creada.
  3. Copiamos la librería hkafact21.dll.
  4. Pegamos la librería en la carpeta System32 de Windows.
  5. Finalmente, declaramos las distintas funciones a utilizar de la librería.


@IMPORTANTE:

  1. En el caso de que al final de la cadena (Identificador), el campo se encuentre vacío se debe agregar un pipe “|” al final.
  2. Si el identificador no es obligatorio, este pueden enviarse con el identificador seguido de un pipe (Ejemplo: ID02A = "02A|").
  3. Si los identificadores son repetibles puede concatenarse con el separador “% “seguido del identificador con los campos correspondientes a la cadena que desea repetir.


MÉTODO ENVIAR


Función que permite generar el documento electrónico.

Declaración

 INT Enviar (string URL, string tokenEmpresa, string tokenPassword, string DatosCliente, string FacturaGlobal, string AnticAutCargDesc, string CpDr, string EntMerc, string ImpuestosFactura, string MpOcTe, string TcTcaIa, string Extras, string DetalleDeFactura, string Adjuntos, string SectorSalud, bool debugMode)

String URL

  • URL del servicio de emisión.

String tokenEmpresa

  • Token asignado por la plataforma de TFHKA.

String tokenPassword

  • Token asignado por la plataforma de TFHKA.

String datosCliente

  • Datos que componen la información del adquiriente.
Cliente_DatosGenerales

(20 Campos, 19 pipes “|”):

ID01=01|nombreRazonSocial|tipoPersona|segundoNombre|apellido|numeroDocumento|tipoIdentificacion
|email|telefono|notificar|actividadEconomicaCIIU|nombreComercial|nombreContacto
|nota|numeroIdentificacionDV
|telefax|Extensible1.controlInterno1|
Extensible1.controlInterno2|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

Cliente_Destinatario

(11 Campos, 9 pipes “|”):

ID01A=01A|CanalDeEntrega|email|fechaProgramada|mensajePersonalizado|nitProveedorReceptor
|telefono|Extensible1.controlInterno1|Extensible1.controlInterno2
|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

Cliente_DetallesTributarios

(6 Campos, 5 pipes “|”):

ID01B=01B|codigoImpuesto|Extensible1.controlInterno1|Extensible1.controlInterno2
|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

Cliente_InformacionLegal

(8 Campos, 7 pipes “|”):

ID01E=01E|codigoEstablecimiento|nombreRegistroRUT|numeroIdentificacion|numeroIdentificacionDV|
numeroMatriculaMercantil|prefijoFacturacion|tipoIdentificacion


Cliente_ResponsabilidadesRut

(7 Campos, 6 pipes “|”):

ID01F=01F|obligaciones|regimen|Extensible1.controlInterno1|Extensible1.controlInterno2
|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

DireccionCliente

(30 Campos, 29 pipes “|”):

ID01C=01C|aCuidadoDe|aLaAtenciónDe|bloque|buzon|calle|calleAdicional|ciudad|codigoDepartamento|
correccionHusoHorario|departamento|departamentoOrg|direccion|distrito|habitacion|lenguaje
|municipio|nombreEdificio|numeroEdificio|numeroParcela|pais|piso|region|subDivision|ubicación
|zonaPostal|Extensible1.controlInterno1|Extensible1.controlInterno2|
Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

DireccionFiscalCliente

(30 Campos, 29 pipes “|”):

ID01D=01D|aCuidadoDe|aLaAtenciónDe|bloque|buzon|calle|calleAdicional|ciudad|codigoDepartamento
|correccionHusoHorario|departamento|departamentoOrg|direccion|distrito|habitacion|lenguaje
|municipio|nombreEdificio|numeroEdificio|numeroParcela|pais|piso|region|subDivision|ubicación
|zonaPostal|Extensible1.controlInterno1|Extensible1.controlInterno2
|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

datos_Cliente= ID01 %ID01A%ID01B%ID01E%ID01F%%ID01C %%ID01D

Observaciones:

  • Los identificadores 01A, 01B, 01F son repetibles


String FacturaGlobalL

Datos generales del objeto factura.

FacturaGlobal

(23 Campos, 22 pipes “|”):

datos_factura=02|tipoDocumento|consecutivoDocumento|rangoNumeracion|fechaEmision|fechaVencimiento|moneda
|propina|totalDescuentos|totalSinImpuestos|totalMonto|cantidadDecimales|fechaFinPeriodoFacturacion
|fechaInicioPeriodoFacturacion|fechaPagoImpuestos|redondeoAplicado|tipoOperacion|
totalAnticipos|totalBaseImponible|totalBrutoConImpuesto|totalCargosAplicados
|totalProductos|tipoSector


String AnticAutCargDesc

Anticipos, autorizaciones, Cargos y descuentos aplicados en el comprobante.

Anticipos

(11 Campos, 10 pipes “|”):

ID02A=02A|fechaDeRecibido|fechadePago|horaDePago|id|instrucciones|montoPagado|
Extensible1.controlInterno1
|Extensible1.controlInterno2|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

Autorizado

(15 Campos, 14 pipes “|”):

ID02B=02B|email|nombreComercial|nombreContacto|nota|numeroDocumento|numeroDocumentoDV
|razonSocial|telefax|telefono|tipoIdentificacion|Extensible1.controlInterno1
|Extensible1.controlInterno2|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

cargosDescuentos

(12 Campos, 11 pipes “|”):

ID02C=02C|codigo|descripcion|indicador|monto|montoBase|porcentaje|secuencia|Extensible1.controlInterno1
|Extensible1.controlInterno2|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

AnticAutCargDesc = ID02A %%ID02B %%ID02C%%

Observaciones:

  • Los identificadores 02A, 02B son repetibles


String CpDr

Condiciones de pago y documentos referenciados para el comprobante.

CondicionPago

(20 Campos, 19 pipes “|”):

ID02D=02D|codigoEvento|comentario|duracionPeriodo|duracionPeriodoMedida|fechaVencimiento|identificador
|medioPagoAsociado|monto|montoMulta|montoPenalidad|periodoDesde|periodoHasta|porcentajeDescuento
|porcentajePago|referenciaAnticipo|Extensible1.controlInterno1|
Extensible1.controlInterno2|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

DocumentosReferenciados

(18 Campos, 17 pipes “|”): Puedo no enviarse 02E1

ID02E=02E|codigoEstatusDocumento|codigoInterno|cufeDocReferenciado|fecha|fechaFinValidez|fechaInicioValidez
|numeroDocumento|tipoCUFE|tipoDocumento|tipoDocumentoCodigo|Extensible1.controlInterno1|
Extensible1.controlInterno2|Extensible1.nombre|Extensible1.valor|conceptoRecaudo|
monto|numeroIdentificacion ¬02E1|descripción

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

CpDr = ID02D%%ID02E

Observaciones:

  • Los identificadores 02D, 02E son repetibles


String EntMerc (Este indientificador no es obligatorio)

Datos referentes a la entrega de la mercancía.Anticipos, autorizaciones, Cargos y descuentos aplicados en el comprobante.

entregaMercancia

ID02F=02F|fechaEfectivaSalida|fechaEstimada|fechaReal|fechaSolicitada|identificacionTransporte|
matriculaTransporte|Extensible1.controlInterno1|Extensible1.controlInterno2|
Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

datosTransportista

ID02F1=02F1|email|indicadordeAtencion|indicadordeCuidado|nombreContacto|nombreResponsableEntrega
|nota|numeroIdentificacion|numeroIdentificacionDV|numeroMatriculaMercantil|prefijoFacturacion
|telefax|telefono|tipoIdentificacion|transportadorNombre|transportadorNumeroDocumento
|transportadorNumeroDocumentoDV|transportadorTipoIdentificacion|Extensible1.controlInterno1
|Extensible1.controlInterno2|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

detallesTributariosTransportista

ID02F1A=02F1A|codigoImpuesto|Extensible1.controlInterno1|Extensible1.controlInterno2|Extensible1.nombre
|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

direccionTransportista

ID02F1B=02F1B|aCuidadoDe|aLaAtenciónDe|bloque|buzon|calle|calleAdicional|ciudad|codigoDepartamento
|correccionHusoHorario|departamento|departamentoOrg|direccion|distrito|habitacion
|lenguaje|municipio|nombreEdificio|numeroEdificio|numeroParcela|pais|piso|region
|subDivision|ubicación|zonaPostal|Extensible1.controlInterno1|Extensible1.controlInterno2
|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

responsabilidadRUT

ID02F1C=02F1C|obligaciones|regimen|Extensible1.controlInterno1|Extensible1.controlInterno2
|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

transportadorDireccion

ID02F1D=02F1D|aCuidadoDe|aLaAtenciónDe|bloque|buzon|calle|calleAdicional|ciudad
|codigoDepartamento|correccionHusoHorario|departamento|departamentoOrg
|direccion|distrito|habitacion|lenguaje|municipio|nombreEdificio|numeroEdificio
|numeroParcela|pais|piso|region|subDivision|ubicación|zonaPostal|Extensible1.controlInterno1
|Extensible1.controlInterno2|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

direccionDespacho

ID02F2=02F2|aCuidadoDe|aLaAtenciónDe|bloque|buzon|calle|calleAdicional|ciudad
|codigoDepartamento|correccionHusoHorario|departamento|departamentoOrg
|direccion|distrito|habitacion|lenguaje|municipio|nombreEdificio|numeroEdificio
|numeroParcela|pais|piso|region|subDivision|ubicación|zonaPostal|
Extensible1.controlInterno1|Extensible1.controlInterno2|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

direccionEntrega

ID02F3=02F3aCuidadoDe|aLaAtenciónDe|bloque|buzon|calle|calleAdicional|ciudad|codigoDepartamento
|correccionHusoHorario|departamento|departamentoOrg|direccion|distrito|habitacion
|lenguaje|municipio|nombreEdificio|numeroEdificio|numeroParcela|pais|piso
|region|subDivision|ubicación|zonaPostal|Extensible1.controlInterno1|
Extensible1.controlInterno2|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena
Si se envía: EntMerc = ID02F%%ID02F1%%

Si no se desea envía: EntMerc = ""

Observaciones:

  • Los identificadores ID02F1A, 02F1B1, 02F1C, 02F1D1, 02F2A, 02F3A son repetibles


String ImpuestosFactura

Esta cadena contiene la información referente a los impuestos aplicados en el documento.

ImpuestosGenerales

(13 Campos, 12 pipes “|”):

ID02G=02G|baseImponibleTOTALImp|codigoTOTALImp|controlInterno|porcentajeTOTALImp
|unidadMedida|unidadMedidaTributo|valorTOTALImp|valorTributoUnidad|Extensible1.controlInterno1
|Extensible1.controlInterno2|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

ImpuestosTotales

(8 Campos, 7 pipes “|”):

ID02H=02H|codigoTOTALImp|montoTotal|Extensible1.controlInterno1|Extensible1.controlInterno2
|Extensible1.nombre|Extensible1.valor|redondeoAplicado


ImpuestosFactura = ID02G%%ID02H

Nota: En caso de enviar el campo redondeoAplicado vacío se tomará por defecto 0.00

Nota: Si el campo redondeoAplicado se encuentra vacío debe enviar un pipe (|) al final de la cadena.
Obsercaciones:

  • Los identificadores ID02G, ID02H son repetibles


String MpOcTe

Esta cadena contiene la información referente a Medios de pagos, Orden de compra y términos de entrega.

MediosPago

(15 Campos, 14 pipes “|”):

ID02J=02J|codigoBanco|codigoCanalPago|codigoReferencia|fechaDeVencimiento|medioPago|metodoDePago
|nombreBanco|numeroDeReferencia|numeroDias|numeroTransferencia|Extensible1.controlInterno1
|Extensible1.controlInterno2|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

Orden_Compra

(12 Campos, 11 pipes “|”):

ID02K=02K|codigoCliente|fecha|numeroOrden|numeroPedido|tipoCUFE|tipoOrden
|uuid|Extensible1.controlInterno1|Extensible1.controlInterno2|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

Terminos_Entrega

(10 Campos, 9 pipes “|”):

ID02N=02N|codigoCondicionEntrega|costoTransporte|identificacion|monto
|responsableEntrega|Extensible1.controlInterno1|Extensible1.controlInterno2|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

MpOcTe = ID02J%%ID02K%%ID02N


Observaciones:

  • Los identificadores ID02J, ID02K son repetibles


String TcTcaIa

Esta cadena contiene la información referente a la tasa de cambio, tasa de cambio alternativa e información adicional.

TasaCambio

(13 Campos, 12 pipes “|”):

ID02L=02L|baseMonedaDestino|baseMonedaOrigen|fechaDeTasaDeCambio|indicadorDeTasa
|monedaDestino|monedaOrigen|operadorCalculo|tasaDeCambio|Extensible1.controlInterno1
|Extensible1.controlInterno2|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

TasaCambioAlternativa

(13 Campos, 12 pipes “|”):

ID02M=02M|baseMonedaDestino|baseMonedaOrigen|fechaDeTasaDeCambio|indicadorDeTasa
|monedaDestino|monedaOrigen|operadorCalculo|tasaDeCambio|Extensible1.controlInterno1
|Extensible1.controlInterno2|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

InformacionAdicional

(2 Campos, 1 pipes “|”):

ID02I=02I|Texto


TcTcaIa= ID02L%%ID02M%%ID02I


Observaciones:

  • Los identificadores ID02I son repetibles


String DetalleDeFactura

Esta cadena contiene la información referente a los items

DetalleDeFactura

(43 Campos, 42 pipes “|”):

ID03=03|cantidaPorEmpaque|CantidadReal|CantidadRealUnidadMedida|cantidadUnidades
|codigoFabricante|codigoIdentificacionPais|codigoProducto|codigoTipoPrecio|descripcion
|descripcionTecnica|estandarCodigo|estandarCodigoID|estandarCodigoIdentificador|estandarCodigoProducto
|estandarOrganizacion|estandarSubcodigoProducto|mandatorioNumeroIdentificacion|mandatorioNumeroIdentificacionDV
|mandatorioTipoIdentificacion|marca|modelo|muestraGratis|NombreFabricante|nota|precioReferencia
|precioTotal|precioTotalSinImpuestos|PrecioVentaUnitario|secuencia|seriales|subCodigoFabricante
|subcodigoProducto|tipoAIU|unidadMedida|informacionAdicional|Extensible1.controlInterno1
|Extensible1.controlInterno2|Extensible1.nombre|Extensible1.valor|descripcion2|descripcion3| idEsquema

Nota: Si envía vacío el campo idEsquema se debe enviar un pipe (|) al final de la cadena

DF_CargosDescuentos

(12 Campos, 11 pipes “|”):

ID03A=03A|codigo|descripcion|indicador|monto|montoBase|porcentaje|secuencia
|Extensible1.controlInterno1|Extensible1.controlInterno2|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

DF_ImpDet

(13 Campos, 12 pipes “|”):

ID03C=03C|baseImponibleTOTALImp|codigoTOTALImp|controlInterno|porcentajeTOTALImp
|unidadMedida|unidadMedidaTributo|valorTOTALImp|valorTributoUnidad|Extensible1.controlInterno1
|Extensible1.controlInterno2|Extensible1.nombre|Extensible1.valor

Nota: Si Extensible1.valor se debe enviar un pipe (|) al final de la cadena

DF_ImpTot

(8 Campos, 7 pipes “|”):

ID03D=03D|codigoTOTALImp|montoTotal|Extensible1.controlInterno1|Extensible1.controlInterno2
|Extensible1.nombre|Extensible1.valor|redondeoAplicado

Nota: En caso de enviar el campo redondeoAplicado vacio se tomara por defecto 0.00

Nota: Si el campo redondeoAplicado se encuentra vacío debe enviar un pipe (|) al final de la cadena

Observaciones:

  • Separación entre campos del ítem: $$


DF_InformacionAdicional

(7 Campos, 6 pipes “|”):

ID03E=03E|nombre|valor|código|cantidad|secuencia|unidadMedidaTransporte


Nota:Si el campo unidadMedidaTransporte se encuentra vacío debe enviar un pipe (|) al final de la cadena

Observaciones:

  • Separación entre ítems: ¬(Ejemplo: item1¬item2)
DetalleDeFactura =ID03$$ID03A$$ID03C$$ID03D$$ID03E (Si se envía descuento)


DetalleDeFactura =ID03$$ID03C$$ID03D$$ID03E $$ID03E (Si NO se envía descuento)


DetalleDeFactura =ID03$$ID03C$$ID03D (Si NO se envía descuento ni información Adicional)


String Extras

Esta cadena contiene los campos extras que se deseen agregar al objeto factura.

Extras = 04|controlInterno1|controlInterno2|nombre|pdf|valor|xml

Observaciones:

  • El string Extras es repetible.


String SectorSalud

Esta cadena contiene la información referente al sector salud:

sectorSalud

(4 Campos, 3 pipes “|”):

ID06=06|TipoIdentificacion|IdPersonalizacion|TipoEscenario


DireccionResidencia

(30 Campos, 29 pipes “|”):

ID06A=06A|aCuidadoDe|aLaAtenciónDe|bloque|buzon|calle|calleAdicional|ciudad
|codigoDepartamento|correccionHusoHorario|departamento|departamentoOrg|direccion
|distrito|habitacion|lenguaje|municipio|nombreEdificio|numeroEdificio|numeroParcela
|pais|piso|region|subDivision|ubicación|zonaPostal|Extensible1.controlInterno1
|Extensible1.controlInterno2|Extensible1.nombre|Extensible1.valor


CamposGenerales

(3 Campos, 2 pipes “|”):

Esta cadena contiene la información referente a los Pacientes.

ID06B=06B|Nombre|Valor


Nota:Los camposGenerales se encuentran numerados según el orden establecido en la resolución. Para los campos que se envian vacios se debe finalizar la cadena con pipe (|) adicional.

  • El string CamposGenerales es repetible.
Separación entre Pacientes: “¬” (Ejemplo: Paciente1¬Paciente2)


Sextras

(7 Campos, 6 pipes “|”):

ID06C=06C|controlInterno1|controlInterno2|nombre|pdf|valor|xml
  • El string Extras es repetible.
SectorSalud= ID06 +“%” + ID06A + “%%” + ID06B + “%%”+ ID06C


String Adjunto

Caracter que establece si el documento que se emite contendrá o no adjuntos. Valores posibles:

  • “0” No se admiten adjuntos. Se genera XML y representación Gráfica estándar por The Factory HKA.
  • “1” Admite archivos adjuntos. Se genera XML y representación Gráfica estándar por The Factory HKA.
  • “10” No se admiten adjuntos. Se genera solo XML sin representación Gráfica estándar por The Factory HKA.
  • “11” Admite archivos adjuntos. Se genera solo XML sin representación gráfica estándar por The Factory HKA.

String debugMode

Flag para indicar a la dll que registre el log de debug en pruebas.


Respuesta de método Enviar

Las respuestas se darán en un archivo de texto plano con nombre hkafact21fresult.txt con la siguiente estructura:


01|codigo|consecutivoDocumento|cufe|fechaRespuesta|hash|mensaje|resultado|tipoCufe|esValidoDian|nombre|fechaAceptacionDIAN
esValidoDian =1 True (Documento Aceptado) - esValidoDian = 0 False (Documento no Aceptado)
01A|mensajeValidacion
01B|reglasValidacionDIAN


Nota:El string del QR se escribe en un archivo de texto llamado string_QR.txt

Nota:La dll también dispone del método EnviarCustom, similar al anterior con la diferencia de que este método permite generar el archivo plano de resultado con un nombre diferente y en un directorio distinto al local mediante el parámetro NombreArchivo. Para más detalles ver código ejemplo suministrado en el SDK.

Método EnviarArchivo


Función que permite adjuntar o enviar archivos (anexos) por email durante la emisión del documento electrónico. Este método se ejecuta después de consumir el método Enviar con el parámetro adjuntos en “1” o en “11”.

Declaración

 INT EnviarArchivo (string URLAdj, string tokenEmpresa, string tokenPassword, string ndocumento, string enviar, string formato, string nombre, string tipo, string email, string ruta, bool debugMode).

String URLAdj

  • URL del servicio de carga de Adjuntos (Sin ?wsdl).


String tokenEmpresa

  • Token asignado por la plataforma de TFHKA.


String tokenPassword

  • Token asignado por la plataforma de TFHKA.


String ndocumento
Prefijo y consecutivo del Documento electrónico concatenado sin separadores (Documento al cual se adjuntará el archivo).

String enviar
Parámetro que indica la finalización de la carga de adjuntos. Posee dos valores:

  • “0” Adjunta el archivo y lo asocia al documento electrónico sin enviar el email al Adquiriente.
  • “1” Adjunta el archivo y lo asocia al documento electrónico y envía el email al Adquiriente.

String formato
Extension del archivo adjunto, formatos permitidos: png, bmp, jpg, pdf, doc, docx, xsl, xlsx, ppt, pptx.

String nombre
Nombre que tomará el archive adjunto.

String tipo
“1” Declaramos en la Clase Adjunto (Class.Adjunto) en Tipo "1" cuando queremos generar la representación gráfica obtenida por el ERP.
“2” Declaramos en la Clase Adjunto (Class.Adjunto) en Tipo "2" Cuando se van a enviar otros documentos adicionales a la factura, es decir, que estos documentos van a quedar en una cola sin que se haga ningún tipo de envío sin antes indicárselo a la plataforma. Para esto, el parámetro <enviar> se debe declarar en cero '0', para indicarle a nuestra plataforma que sincronice el adjunto pero sin enviarlo. Finalmente cuando se declare el último adjunto se debe declarar el parámetro <enviar> en "1", así nuestra plataforma entiende que es el último adjunto, por tanto envía este último documento más los anteriores que se encontraban en la cola.


String email
Correo al cual se dese enviar el XML (AttachedDocument), la Representación Gráfica y los anexos o adjuntos.

String ruta
Cadena de caracteres con la ubicación del archivo que será enviado a través del servicio.

String debugMode
Flag para indicar a la dll que registre el log de debug en pruebas.

@IMPORTANTE:

Al emitir un documento electrónico con el parámetro Adjunto en “1” u “11” el email no se enviará al adquiriente hasta no consumir el método EnviarArchivo.


Respuesta de método EnviarArchivo

Las respuestas se darán en un archivo de texto plano con nombre hkafact21fresult.txt con la siguiente estructura:


01|codigo| mensaje|resultado


Método EstadoDocumento


Función que permite consultar el estado de un documento emitido previamente.

Declaración

 INT EstadoDocumento (string URL, string tokenEmpresa, string tokenPassword, string documento, bool debugMode)

String URLAdj

  • URL del servicio de carga de Adjuntos (Sin ?wsdl).


String tokenEmpresa

  • Token asignado por la plataforma de TFHKA.


String tokenPassword

  • Token asignado por la plataforma de TFHKA.


String ndocumento
Prefijo y consecutivo del Documento electrónico concatenado sin separadores (Documento al cual se adjuntará el archivo).

String debugMode
Flag para indicar a la dll que registre el log de debug en pruebas.


Respuesta método EstadoDocumento

Las respuestas se darán en un archivo de texto plano con nombre hkafact21fresult con la siguiente estructura:Las respuestas se darán en un archivo de texto plano con nombre hkafact21fresult.txt con la siguiente estructura:


01|codigo|estatusDocumento|ambiente|cadenaCufe|consecutivo|cufe|descripcionDocumento|descripcionEstatusDocumento|entregaMetodoDIAN
|esValidoDIAN|estatusDocumento|fechaDocumento|mensaje|mensajeDocumento|poseeAdjuntos|poseeRepresentacionGrafica|resultado
|tipoCufe|tipoDocumento|trackID|fechaAceptacionDIAN
esValidoDian =1 True (Documento Aceptado) - esValidoDian = 0 False (Documento no Aceptado)


01A|ambienteDIAN|codigo|comentario|cufe|descripcionEvento|emisorNumeroDocumento|emisorNumeroDocumentoDV|emisorRazonSocial
|emisorTipoIdentificacion|fechaEmision|fechaRecepcion|hash|idPerfilDIAN|mensaje|nombreArchivoXML|nota|numeroDelEvento
|receptorNumeroDocumento|receptorNumeroDocumentoDV|receptorRazonSocial|receptorTipoIdentificacion|resultado|tipoCufe|
tipoEvento|versionUBL|xml


01A1|codigoInterno1|codigoInterno2|nombre|valor


01B|canalDeEntrega|email|entregaEstatus|entregaEstatusDescripcion|entregaFecha|fechaProgramada|mensajePersonalizado
|nitProveedorReceptor|recepcionEmailComentario|recepcionEmailEstatus|recepcionEmailFecha|recepcionEmailIPAddress|telefono


01C|reglasValidacionDIAN



Nota:El string del QR se escribe en un archivo de texto llamado string_QR.txt

Nota:La dll también dispone del método EstadoDocumentoCustom, similar al anterior con la diferencia de que este método permite generar el archivo plano de resultado con un nombre diferente y en un directorio distinto al local mediante el parámetro NombreArchivo. Para más detalles ver código ejemplo suministrado en el SDK.

Método FoliosRestantes


Función que permite consultar la cantidad de folios disponibles

Declaración

 INT FoliosRestantes (string URL, string tokenEmpresa, string tokenPassword, string otro, bool debugMode)

String URLAdj

  • URL del servicio de carga de Adjuntos (Sin ?wsdl).


String tokenEmpresa

  • Token asignado por la plataforma de TFHKA.


String tokenPassword

  • Token asignado por la plataforma de TFHKA.


<bi> String otro
Actualmente en desuso, campo reservado para futuras versiones.

String debugMode
Flag para indicar a la dll que registre el log de debug en pruebas.


Respuesta método FoliosRestantes:

Las respuestas se darán en un archivo de texto plano con nombre hkafact21fresult con la siguiente estructura:


código|foliosRestantes|mensaje|resultados.



Método EnvioCorreoAdjuntos


Función que permite reenviar el correo de notificación que se emite cuando se genera un documento electrónico con adjuntos

Declaración

 INT EnvioCorreoAdjuntos (string URL, string tokenEmpresa, string tokenPassword, string documento,
 string correo, string adjunto, bool debugMode)

String URLAdj

  • URL del servicio de carga de Adjuntos (Sin ?wsdl).


String tokenEmpresa

  • Token asignado por la plataforma de TFHKA.


String tokenPassword

  • Token asignado por la plataforma de TFHKA.


String documento
Prefijo y consecutivo del Documento electrónico concatenado sin separadores (Documento que se quiere reenviar).

String correo
Correo al cual se dese enviar el XML (AttachedDocument) y la Representación Gráfica Estándar si aplica.

String adjunto
Carácter que establece si el documento será reenviado con adjuntos. Valores posibles:

  • “0” Realiza el reenvió del correo sin adjuntos
  • “1” Realiza el reenvió del correo con los adjuntos almacenados durante la emisión del documento.

String debugMode
Flag para indicar a la dll que registre el log de debug en pruebas.


Respuesta método EnvioCorreoAdjuntos

Las respuestas se darán en un archivo de texto plano con nombre hkafact21fresult con la siguiente estructura:


código|mensaje|resultados.


'Nota:La dll también dispone del método EnvioCorreo, similar al anterior con la diferencia de que este no contiene el parámetro adjunto.

Método DescargarXML


Función que permite descargar el XML Fiscal de un documento emitido previamente (solo el documento electrónico Invoice, CreditNote y DebitNote). El archivo XML es creado en el directorio local de la aplicación.

Declaración

 INT DescargarXML (string URL, string tokenEmpresa, string tokenPassword, string documento, bool debugMode))

String URLAdj

  • URL del servicio de carga de Adjuntos (Sin ?wsdl).


String tokenEmpresa

  • Token asignado por la plataforma de TFHKA.


String tokenPassword

  • Token asignado por la plataforma de TFHKA.


String documento
Prefijo y consecutivo del Documento electrónico concatenado sin separadores (Documento que se quiere consultar).

String debugMode
Flag para indicar a la dll que registre el log de debug en pruebas.


Respuesta método DescargarXML

Las respuestas se darán en un archivo de texto plano con nombre hkafact21fresult con la siguiente estructura:


código|mensaje|resultados.

Método DescargarPDF


Función que permite descargar la Representación Gráfica Estándar de un documento emitido previamente. El archivo PDF es creado en el directorio local de la aplicación.

Declaración

INT DescargarPDF (string URL, string tokenEmpresa, string tokenPassword, string documento, bool debugMode)

String URLAdj

  • URL del servicio de carga de Adjuntos (Sin ?wsdl).


String tokenEmpresa

  • Token asignado por la plataforma de TFHKA.


String tokenPassword

  • Token asignado por la plataforma de TFHKA.


String documento
Prefijo y consecutivo del Documento electrónico concatenado sin separadores (Documento que se quiere consultar).

String debugMode
Flag para indicar a la dll que registre el log de debug en pruebas.


Respuesta método DescargarPDF

Las respuestas se darán en un archivo de texto plano con nombre hkafact21fresult con la siguiente estructura:


código|mensaje|resultados.

@IMPORTANTE:

Si durante la emisión del documento (método Enviar) el parámetro adjuntos se asignó en “10” u “11”, la plataforma The Factory HKA - DFACTURE no generará representación gráfica (PDF) estándar, por lo tanto no se puede consumir éste método ya que el servicio arrojará un error indicando que NO existe PDF asociado, ya que se asume que la representación gráfica ha sido generada de manera local por el software de facturación (ERP).

Método GenerarContenedor


Función que permite descargar el XML AttachedDocument de un documento emitido previamente (Este archivo contiene el XML de un documento electrónico (Invoice, CreditNote ó DebitNote) y todos los eventos (ApplicationResponse) generados hasta la fecha). El archivo XML es creado en el directorio local de la aplicación.

Declaración

INT GenerarContenedor (string URL, string tokenEmpresa, string tokenPassword, string documento, bool debugMode)

String URLAdj

  • URL del servicio de carga de Adjuntos (Sin ?wsdl).


String tokenEmpresa

  • Token asignado por la plataforma de TFHKA.


String tokenPassword

  • Token asignado por la plataforma de TFHKA.


String documento
Prefijo y consecutivo del Documento electrónico concatenado sin separadores (Documento que se quiere consultar).

String debugMode
Flag para indicar a la dll que registre el log de debug en pruebas.


Respuesta método GenerarContenedor

Las respuestas se darán en un archivo de texto plano con nombre hkafact21fresult con la siguiente estructura:


código|mensaje|Fecha|Hash|resultados.

Ejemplo Strings Método Enviar


* Url= http://demoemision21.thefactoryhka.com.co/ws/v1.0/Service.svc '
* TokenEmp='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
* TokenPas='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'


GESTION DE STRINGS PARA PARAMETRO: datos_Cliente

  • ID01="01|Cristche|1|Evardho|ParedesMarquina|746260|31|email@gmail.com|3185853106|SI|0812|CHEV DEV|Cristche Paredes|cliente importante|0|123123123|||||"
  • ID01A = "01A|0|email1@thefactoryhka.com;email2@gmail.com|2019-07-31 13:01:01|Mensaje programadito||1235467|||||"
  • ID01B = "01B|01|||||"
  • ID01E = "01E|1|Cristche Paredes|746260|0|456456|FE1|31"
  • ID01F = "01F|O-13|04|||||"
  • ID01C = "01C|Fulano|Sutano|1|POXBOX01|Principal|Los Chaimas|Bogotá, D.C.|11|-66.01|Bogotá|Soporte|Kr #71D 76-15|Los :Andes|Principal|es|11001|Chaima|16a|78|CO|2|sur|parcela||111061|||||"
  • ID01D = "01D|Fulano|Sutano|1|POXBOX01|Principal|Los Chaimas|Bogotá, D.C.|11|-66.01|Bogotá|Soporte|Kr #71D 76-15|Los :Andes|Principal|es|11001|Chaima|16a|78|CO|2|sur|parcela||111061|||||"
datos_Cliente = ID01 + "%" + ID01A + "%" + ID01B + "%" + ID01E + "%" + ID01F + "%%" + ID01C + "%%" + ID01D


GESTION DE STRINGS PARA PARAMETRO: datos_factura

  • datos_factura= " 02|01|CONSECUTIVO|RANGO-CAMPODESDE|2019-11-29 00:00:00|2019-10-29|COP|0.00|0.00|5980.00|7116.20|2||||0.00|10|0.00|5980.00|7116.20|0.00|1|"
  • **datos_factura ="02|01|CONSECUTIVO|RANGO-CAMPODESDE|2019-11-29 00:00:00|2019-10-29|COP|0.00|0.00|5980.00|7116.20|2||||0.00|10|0.00|5980.00|7116.20|0.00|1|2" (Con el campo tipoSector)


GESTION DE STRINGS PARA PARAMETRO: anticAutorizado_CargDesc'

  • ID02A = "02A|2019-07-21|2019-07-21|12:12:12|1|instruccion|||||" (No es obligatorio)
  • ID02A = "02A|"
  • ID02B = "02B|" (No es obligatorio para nada)
  • ID02B = "02B|"
  • ID02C = "02C|11|descripcion del descuento|0|100.00|1980.00|5.00|1|||||" (No es obligatorio)
  • ID02C = "02C|"
  • anticAutorizado_CargDesc = ID02A + "%%" + ID02B + "%%" + ID02C


GESTION DE STRINGS PARA PARAMETRO: CP_DR'

  • ID02D = "02D||nota en codicion de pago|10|1|2019-07-31|1|1|100.00|50.00|150.00|2019-07-21|2019-07-31|10.00|90.00|111222333" (No es obligatorio)
  • ID02D = "02D|"
  • ID02E="02E|6|4|4191110db1f3c8060a4ce34e40c6ec6541ac1bd248264624bfe1b60fdf02aea7e15c5a49969cc08f498b938a9e3cd954|2019-07-29|2019-07-29|2019-07-29|PRUE21|CUFE-SHA384|Factura de Ventas|01|||||| || ¬02E1|descipcion documento referenciado" (Condicionado)
  • ID02E="02E|5|4|4191110db1f3c8060a4ce34e40c6ec6541ac1bd248264624bfe1b60fdf02aea7e15c5a49969cc08f498b938a9e3cd954|2019-07-29|2019-07-29|2019-07-29|PRUE21|CUFE-SHA384|Factura de Ventas|01|||||Copago|100.00|900895784 (con los campos conceptoRecaudo,monto,numeroIdentificacion)
  • ID02E = "02E|"
  • CP_DR = ID02D + "%%" + ID02E


GESTION DE STRINGS PARA PARAMETRO: EntMerc

  • ID02F = "02F|2019-06-27 11:32:30|2019-06-29 11:32:30|2019-07-01 11:32:30|2019-07-01 11:32:30|1|ABCD123|||||"
  • ID02F1 = "02F1|mail@gmail.com|1|1|Fulanito Gonzales|Pedrito Perez|Mercancia delicada|800123456|2|QWERT|PRUE|123456789|3451269|31|Juan Lopez|40012365|1|13|||||"
  • ID02F1A = "02F1A|01|||||"
  • ID02F1B = "02F1B|ResponsableEntrega|Sutano|1|POXBOX01|Principal|Los Chaimas|BOGOTÁ, D.C.|11|-66.01|Bogotá|Soporte|Kr #71D 76-15|Los Andes|Principal|es|11001|Chaima|16a|78|CO|2|sur|parcela||111061|||||"
  • ID02F1C = "02F1C|O-12|04|||||"
  • ID02F1D = "02F1D|TransportadorDireccion|Sutano|1|POXBOX01|Principal|Los Chaimas|BOGOTÁ, D.C.|11|-66.01|Bogotá|Soporte|Kr #71D 76-15|Los Andes|Principal|es|11001|Chaima|16a|78|CO|2|sur|parcela||111061|||||"
  • ID02F2 = "02F2|direccionDespacho|Sutano|1|POXBOX01|Principal|Los Chaimas|BOGOTÁ, D.C.|11|-66.01|Bogotá|Soporte|Kr #71D 76-15|Los Andes|Principal|es|11001|Chaima|16a|78|CO|2|sur|parcela||111061|||||"
  • ID02F3 = "02F3|direccionEntrega|Sutano|1|POXBOX01|Principal|Los Chaimas|BOGOTÁ, D.C.|11|-66.01|Bogotá|Soporte|Kr #71D 76-15|Los Andes|Principal|es|11001|Chaima|16a|78|CO|2|sur|parcela||111061|||||%02F3A|4|74|41|4|N|O|"
  • EntMerc = ID02F + "%%" + ID02F1 + "%%" + ID02F1A + "%%" + ID02F1B + "%%" + ID02F1C + "%%" + ID02F1D + "%%" + ID02F2 + "%%" + ID02F3


GESTION DE STRINGS PARA PARAMETRO: ImpuestosFactura

  • ID02G = "02G|1980|01||19.00|KGM|94|376.20|0.00|||||"
  • ID02H ="02H|01|1136.20|||||0.00"
  • **ID02H ="02H|01|1136.20||||||" (sin el campo redondeoAplicado)
  • ImpuestosFactura = ID02G + "%%" + ID02H


GESTION DE STRINGS PARA PARAMETRO: MPOCTE

  • ID02J = "02J|3356|0312|123QBCV|2019-01-01|10|1|Bancolombia|Referencia de pago 1|22|982467|||||"
  • ID02K = "02K|987654|2019-04-29 00:00:00|1233456|321456|CUFE-SHA384|1|85b5cfa4-16af-48a0-9388-501e519ed659|||||" (No es obligatorio)
  • ID02K = "02K|"
  • ID02N = "02N|CFR|100.00|200311301|100.00|cliente|||||" (Condicionado)
  • ID02N = "02N|"
  • MPOCTE = ID02J + "%%" + ID02K + "%%" + ID02N


GESTION DE STRINGS PARA PARAMETRO: TC_TCA_IA

  • ID02L = "02L|0000001.00|0000001.00|2019-01-01|123456|USD|COP|Division|000000.50|||||" (Condicionado)
  • ID02L = "02L|"
  • 'ID02M = "02M|0000001.00|0000001.00|2019-01-01|123456|USD|COP|Division|000000.50|||||" (No es obligatorio)
  • ID02M = "02M|"
  • 'ID02I = "02I|Informacion Adicional de Pruebita" (No es obligatorio)
  • ID02I = "02I|"
  • TC_TCA_IA = ID02L + "%%" + ID02M + "%%" + ID02I


GESTION DE STRINGS PARA PARAMETRO: Extras

  • Extras = "04|||443|1|pedro picapiedra|1"


GESTION DE STRINGS PARA PARAMETRO: DetalleDeFactura

  • ID03 = "03|1|1|94|1|||ABC123||Productico de prueba 1|primer producto para enviar al web service|999|||123||||||||0||nota en el producto01||2356.20|1980.00|1980.00|1|||||94||||||descripcion2|descripcion3||" (sin el campo idEsquema)
  • ID03 = "03|1|1|94|1|||ABC123||Productico de prueba 1|primer producto para enviar al web service|999|||123||||||||0||nota en el producto01||2356.20|1980.00|1980.00|1|||||94||||||descripcion2|descripcion3|1" (con el campo idEsquema)
  • 'ID03A = "03A|00|descuento comercial 123456789|0|0.00|0.00|0.00|1|||||"(Descuento en el detalle)
  • ID03C = "03C|1980.00|01||19.00|KGM|94|376.20||||||"
  • ID03D = "03D|01|376.20|||||0.00"
  • ID03E = "03E|03|24350| |2500000|1|WSD "
  • 'DetalleDeFactura = ID03 + "$$" + ID03A + "$$" + ID03C + "$$" + ID03D + "$$" + ID03E (con Descuento Detalle)
  • DetalleDeFactura = ID03 + "$$" + ID03C + "$$" + ID03D + "$$" + ID03E


GESTION DE STRINGS PARA PARAMETRO: SectorSalud

  • ID06= "06|01|SS-CUFE|2"
  • ID06A= "06A|Fulano|Sutano|1|POXBOX01|Principal|Los Chaimas|Bogotá, D.C.|11|-66.01|Bogotá|Soporte|Kr #71D 76-15|Los Andes|Principal|es|11001|Chaima|16a|78|CO|2|sur|parcela||111061|||||"


**Los camposGenerales se encuentran numerados según el orden establecido en la resolución 2275.


ID06B = "06B|1|CODIGO_PRESTADOR"+ "%" + "06B|2||" + "%" + "06B|3||" + "%" + "06B|4||" + "%" + "06B|5||"+ "%" + "06B|6||" + "%" + "06B|7||" + "%" + "06B|8||" + "%" + "06B|9|MODALIDAD_PAGO" + "%" + "06B|10|COBERTURA_PLAN_BENEFICIOS" +  "%" + "06B|11||" +  "%" + "06B|12||" +  "%" + "06B|13||" +  "%" + "06B|14|NUMERO_CONTRATO" +  "%" + "06B|15|NUMERO_POLIZA" +  "%" + "06B|16|COPAGO" + "%" + "06B|17|CUOTA_MODERADORA" + "%" + "06B|18||" + "%" + "06B|19|PAGOS_COMPARTIDOS"


*** Varios pacientes:


ID06B = "06B|1|CODIGO_PRESTADOR"+ "%" + "06B|2||" + "%" + "06B|3||" + "%" + "06B|4||" + "%" + "06B|5||"+ "%" + "06B|6||" + "%" + "06B|7||" + "%" + "06B|8||" + "%" + "06B|9|MODALIDAD_PAGO" + "%" + "06B|10|COBERTURA_PLAN_BENEFICIOS" +  "%" + "06B|11||" +  "%" + "06B|12||" +  "%" + "06B|13||" +  "%" + "06B|14|NUMERO_CONTRATO" +  "%" + "06B|15|NUMERO_POLIZA" +  "%" + "06B|16|COPAGO" + "%" + "06B|17|CUOTA_MODERADORA" + "%" + "06B|18||" + "%" + "06B|19|PAGOS_COMPARTIDOS"


ID06B1 = "06B|1|CODIGO_PRESTADOR"+ "%" + "06B|2||" + "%" + "06B|3||" + "%" + "06B|4||" + "%" + "06B|5||"+ "%" + "06B|6||" + "%" + "06B|7||" + "%" + "06B|8||" + "%" + "06B|9|MODALIDAD_PAGO" + "%" + "06B|10|COBERTURA_PLAN_BENEFICIOS" +  "%" + "06B|11||" +  "%" + "06B|12||" +  "%" + "06B|13||" +  "%" + "06B|14|NUMERO_CONTRATO" +  "%" + "06B|15|NUMERO_POLIZA" +  "%" + "06B|16|COPAGO" + "%" + "06B|17|CUOTA_MODERADORA" + "%" + "06B|18||" + "%" + "06B|19|PAGOS_COMPARTIDOS"


Pacientes= Concatenacion de todos los Pacientes separados por el caracter "¬"= ID06B + "¬" + ID06B1


Pacientes= ID06B + "¬" + ID06B1
ID06C = "06C|||5170000|1|100.50|1"
SectorSalud= ID06 + "%" + ID06A  + "%%" + Pacientes


Adjuntos= "0"
Enviar (url, tokenEmp, tokenPas, datos_Cliente, Factura_Global, Antic_Autorizado_CargDesc, CondPago_DocReferencia, Entrega_Mercancia, Impuestos_Factura, MedPago_OC_TermEntrega, TasaCamb_TasaCambAlt_InfAdic, Extras, Detalle_De_Factura, Adjuntos, SectorSalud, debugMode)

Ejemplo Strings Método EnviarArchivo


* Url= 'http://demoemision21.thefactoryhka.com.co/ws/adjuntos/Service.svc'
* TokenEmp='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
* TokenPas='xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
  • Ndocumento = “PRUE1”
  • Enviar = “1”
  • Formato =”pdf”
  • Nombre = “Adjunto”
  • Tipo = “2”
  • Email = “integracion_fel_co@thefactoryhka.com”
  • Ruta = “C:\Adjunto.PDF”


Personalización del Correo


El arreglo “extras” también permite manejar algunas funcionalidades especiales de la plataforma, como la de correo electrónico personalizado mediante el uso de los campos extensibles 11, 13 y 14. Para obtener más detalles, referirse al MANUAL DE INTEGRACION DIRECTA (EMISIÓN - VAL. PREVIA) sección PERSONALIZACIÓN DEL CORREO

Generación De Notas Con Y Sin Referencia a Documentos


En el anexo técnico V1.8 se plantea la emisión de notas de crédito y débito bajo los siguientes escenarios:

  • Emisión de notas de Val. previa con referencia a facturas de Val. Previa
  • Emisión de notas de Val. previa con referencia a facturas de Val. Posterior
  • Emisión de notas de Val. previa sin referencia

Para ello se debe tener en cuenta la estructura de la clase documentosReferenciados y el campo tipoOperación para cada escenarios. Para obtener más detalles, referirse al MANUAL DE INTEGRACION DIRECTA (EMISIÓN - VAL. PREVIA)] sección GENERACIÓN DE NOTAS CON Y SIN REFERENCIA A DOCUMENTOS donde se ejemplifica cada uno de estos casos.

Transmisión De Documentos De Contingencia Tipo 03


La transmisión de documentos de contingencia está sujeta a la estructura de la clase documentosReferenciados y el campo tipoDocumento. Este escenario junto con las condiciones en las cuales aplica y la respuesta obtenida por parte de la DIAN se especifican en el MANUAL DE INTEGRACION DIRECTA (EMISIÓN - VAL. PREVIA) sección TRANSMISIÓN DE DOCUMENTOS DE CONTINGENCIA TIPO 03 (ATRIBUIBLE AL EMISOR).

Radicar Documentos Electrónicos En Plataformas De Recepción


El XML que se debe radicar en las plataformas de recepción es el que envía nuestro servicio en la notificación de correo llamado AttachedDocument (Contenedor de Documentos), la estructura de este documento tiene por objetivo contener en un único archivo XML un documento electrónico (Invoice, CreditNote ó DebitNote) y todos los eventos (ApplicationResponse) registrados hasta la fecha, este XML también puede ser descargado a través del método GenerarContenedor.
La estructura de este archivo se ejemplifica en en el MANUAL DE INTEGRACION DIRECTA (EMISIÓN - VAL PREVIA) sección RADICAR DOCUMENTOS ELECTRÓNICOS EN PLATAFORMAS DE RECEPCIÓN

Ambiente De Habilitación


El ambiente de pruebas liberado (ambiente demo) corresponde a un entorno de pruebas propio del proveedor tecnológico (The Factory HKA) con el objetivo de que los desarrolladores y Casas de Software puedan realizar pruebas de los ajustes realizados a los ERP bajo el modelo de facturación con validación previa. Las pruebas realizadas en este ambiente NO serán enviadas al web service de habilitación de la DIAN.





Copyright
THE FACTORY HKA COLOMBIA

Copyright © 2016 The Factory HKA. Todos los derechos reservados.