Callmed SUSE, Descripción y Uso del API de Surtimiento Farmacias - Tandotek/Callmed-doc GitHub Wiki

Callmed SUSE - Integración con farmacias

Callmed facilita a las farmacias la integración al Ecosistema para ejecutar el surtimiento de manera ágil y transparente. Uno de los canales más importantes de integración es este Servicio Web, que le permitirá a la Farmacia escanear en su Punto de Venta los códigos de barras NUR de las Recetas Electrónicas emitidas por Callmed.

Al ejecutar el surtimiento la Farmacia "quema" dicho NUR, esto significa que el NUR no podrá surtirse en ningún otro lugar además de ingresar dicho NUR a la "bolsa" de NURs que la Farmacia podrá cobrarle al Cliente en común.

El Servicio Web cuenta con todas las validaciones y reglas de negocio que el Cliente establece tanto para la emisión como para el surtimiento, de este modo si el Servicio Web le dice a la Farmacia que el NUR puede ser surtido entonces invariablemente será pagado.

Este documento está enfocado a los equipos técnicos de las cadenas de farmacias y les permite conocer el API para integrarse al surtimiento de medicamentos emitidos a través de la plataforma Callmed.

El APP (Android, iOS y Web) que despliega Callmed para el uso de las mismas farmacias utiliza este API y el hecho de tener credenciales para consumirlo también le otorga acceso al APP de surtimiento.

Es importante considerar durante la integración que Callmed es multicliente, por lo que podrá utilizarse el mismo Servicio Web para surtir a cualquiera de los Clientes que emiten recetas a través del Ecosistema Callmed.

Tabla de contenido

Introducción

Descripción del proceso

Endpoints

Autenticación

Obtener la Clave del Cliente

Listar NURs de Receta

Obtener datos de Médico y Paciente

Obtener datos y prevalidación de NUR

Surtir NUR

Cancelar Surtimiento de NUR

Consultar Equivalencias

Consultar estatus de NUR en Blockchain

Validar Receta vs Certificado del Emisor

Introducción

Algunas palabras importantes que recordar:

NUR - Número Único de Reclamación

Este número es único e irrepetible, no secuencial y no predecible; que ampara un medicamento con 1 o más cajas. Tiene asociado un EAN/SKU así como la lista de bioequivalencias que pueden sustituir el EAN recetado. Un NUR emitido por una administradora solo puede ser surtido una vez, mientras que aquellos NUR emitidos por consultas particulares que no son de venta a crédito puede ser surtido las veces que se desee y siempre de acuerdo a la regulación de la autoridad.

El resultado de una consulta médica en Callmed es una receta con uno o más NUR, cada uno representa un medicamento con "n" cajas.

El NUR también le servirá a la farmacia para cobrar a la administradora.

El NUR en las peticiones se identifica como "Folio"

Clave de Cliente - Clave única que permite a la farmacia relacionar a la administradora con los NUR que está surtiendo.

Esta clave se envía acompañada del NUR en cada solicitud, es importante ya que le permite a SUSE enrutar las peticiones a la implementación de Callmed que corresponda.

Callmed SUSE proporciona también métodos que permiten averiguar la Clave de Cliente a partir de un NUR para efectos de facilitar la operación.

Token - Callmed le proporciona a la farmacia el método para obtener un Token antes de cada sesión de transacciones

En cada sesión debemos obtener un Token el cual usaremos en todas las peticiones posteriores. La sesión es el ciclo de Obtener datos del Nur, hasta surtirlo.

Descripción general del proceso

El proceso es muy simple y puede ejecutarse de diferentes formas.

Obtener Clave de Cliente de manera programática.

Esta forma permite obtener la Clave Cliente basado en el NUR, cualquiera de la receta, y posteriormente ejecutar las peticiones de consulta y surtimiento ya teniendo la Clave Cliente.

Esta opción permite incluir varios NUR en un solo Ticket ya que envía todos los NUR disponibles.

  1. Autenticación - Obtengo un Token para las peticiones que siguen.

  2. Consulto Clave de Cliente - Envío Token, un NUR, cualquiera de la receta, y Callmed SUSE me devuelve la Clave de Cliente a utilizar.

  3. Obtengo listado de NURs - Envío Token, un NUR, cualquiera de la receta acompañado de la Clave de Cliente.

  4. [OPCIONAL] - Envío Token, Clave Cliente y NUR, Obtengo información completa de médico y paciente del NUR.

  5. [OPCIONAL] - Envio Token, Clave Cliente y NUR, Obtengo listado de bioequivalencias del NUR.

  6. Surto NUR - Envío Token, Clave CLiente y el NUR que deseo surtir, acompañado de Clave de Cliente, EAN, etc.

El paso 6 se puede ejecutar tantas veces como NURs quiera surtir durante la sesión.

Seleccionar Cliente en Interfaz de Usuario

En esta forma, el punto de venta de la farmacia puede tener una opcion donde selecciona el "Cliente" del cual va a surtir recetas. Una vez seleccionado el cliente en pantalla este se relaciona con un pequeño catálogo de Claves Cliente que proporciona Callmed.

Se recomienda preferentemente utilizar el método para obtener la Clave del Cliente basado en el NUR, de este modo se facilita el proceso para el personal encargado de la venta.

Esta opción permite incluir varios NUR en un solo Ticket ya que envía todos los NUR disponibles.

  1. Autenticación - Obtengo un Token para las peticiones que siguen.

  2. Obtengo listado de NURs - Envío Token, un NUR, cualquiera de la receta acompañado de la Clave de Cliente.

  3. [OPCIONAL] - Envío Token, Clave Cliente y NUR, Obtengo información completa de médico y paciente del NUR.

  4. [OPCIONAL] - Envio Token, Clave Cliente y NUR, Obtengo listado de bioequivalencias del NUR.

  5. Surto NUR - Envío Token, Clave CLiente y el NUR que deseo surtir, acompañado de Clave de Cliente, EAN, etc.

El paso 5 se puede ejecutar tantas veces como NURs quiera surtir durante la sesión.

Un NUR a la vez (Legacy)

Esta forma está pensada para no desplegar lista de NURs, sino que se capture o escanee uno por uno los NURs que vienen en una receta que se desea surtir.

  1. Autenticación - Obtengo un Token para las peticiones que siguen.
  2. Obtengo Clave Cliente por cualquiera de las dos formas descritas previamente
  3. Obtengo datos de un NUR escaneado o capturado
  4. Surto NUR

El paso 3 y 4 se puede ejecutar tantas veces como se desee.

Endpoints

Pruebas

https://suseproxy.callmed.mx/SUSE2/SUSEReceta.svc

La Farmacia podrá solicitar un Usuario y Contraseña para el ambiente de pruebas/desarrollo así como insumos que le permitirán realizar las configuraciónes y pruebas de su lado. Una vez concluidas las pruebas Callmed proporcionará a la farmacia el endpoint productivo así como Usuario y contraseña de dicho ambiente.

Autenticación

Callmed SUSE entrega a cada farmacia un par de claves, Usuario y Contraseña, que le permitirán generar Tokens de seguridad cada vez que vaya a consumir los métodos.

/GetToken

Este método permite obtener un Token

Method POST

https://suseproxy.callmed.mx/SUSE2/SUSEReceta.svc/GetToken

Header

 'Content-type': 'application/json'

Body

    {
        "Usuario": "usrFarmacia",
        "Contra": "W3bbHnn76contraseña"
    }

Returns 200 OK

"b4abdaa2291d8ad3232371233bcb070e8d1f1af"

Cualquier otro Status Code diferente a 200 indica un error.

Debemos guardar esa cadena y considerarla el Token

Obtener Clave de Cliente basado en un NUR

Como se comentó en párrafos previos, Callmed es multicliente y siempre es importante conocer a qué cliente corresónde cada NUR. Al momento de la implementación de cada Cliente en común Callmed le provee a la farmacia un código para cada cliente el cual deberá ser el elemento en común.

Así pues, la farmacia escanea el NUR, Obtiene el # de Cliente y procede a ejecutar el proceso de surtimiento enviandole siempre a Callmed dicho # de Cliente. El número de cliente es un Alfanumérico de máximo 10 caracteres.

/GetClaveCliente

Nos permite consultar la Clave de Cliente a la cual corresponde un NUR.

Method POST

https://suseproxy.callmed.mx/SUSE2/SUSEReceta.svc/GetClaveCliente

Header

 'Content-type': 'application/json'

Body

    {
       "Folio": "100581822326",
       "Token":"3b4abdaa2291d8aaadd3232371233bcb070e8d1f1af"
    }

Returns 200 OK

Debemos evaluar el Status Code de la petición, si es 200 OK, entonces tenemos que valuar el campo "Success", si es false la solicitud devolvió un error cuyo mensaje estará en el campo "Message".

{
    "Success": true,
    "Code": "00001",
    "Message": "OK",
    "ClaveCliente":"0293"
  
}

Obtener listado de NURS

/GetAllRecetas

Este método permite obtener el listado de NURs que contiene una receta completa. Requiere un NUR, cualquiera que venga en la misma receta.

Como se comentó previamente, el NUR se envía en el campo "Folio".

Method POST

https://suseproxy.callmed.mx/SUSE2/SUSEReceta.svc/GetAllRecetas

Header

 'Content-type': 'application/json'

Body

    {
       "ClaveCliente": "0293",
       "Folio": "100581822326",
       "Token":"3b4abdaa2291d8ad3232371233bcb070e8d1f1af"
    }

Returns 200 OK

Debemos evaluar el Status Code de la petición, si es 200 OK, entonces tenemos que valuar el campo "Success", si es false la solicitud devolvió un error cuyo mensaje estará en el campo "Message". NOTA: Algunos campos son "legacy" y existen solamente para compatibilidad hacia atrás con algunas Farmacias.

{
    "Success": true,
    "Code": "00001",
    "Message": "OK",
    "Medicamentos": [
	{
        "Cantidad": "1",
        "EAN": "3700028501509",
        "EANEquivalente": null,
        "FechaConsulta": "4/20/2022 10:06:06 PM",
        "Folio": null,
        "ICD10": "K56.0",
        "Indicaciones": "ESTA ES UNA PRUEBA",
        "Medicamento": "SYSTANE ULTRA OFT 0.7 ML 30 UNIDOSIS     1509(LUBRICANTE OFTALMICO SOLUCION OFTALMICA  30 UNIDADES)",
        "NUR": "100581822326",
        "PacienteName": null,
        "Status": 0
    }
	],
    "Receta": null
}

El campo "Status" contiene el estado actual del NUR.

Status Descripción
0 Vigente
1 Surtida (no se puede surtir)
2 Facturada (no se puede surtir)
3 No vigente (no se puede surtir
8 Vigente, necesita NIP para surtirse *

Para el Status 8 es necesario enviar el NIP en el método /SetSurtiMed en el campo Authorization

Obtener datos de Médico y Paciente

/GetValReceta

Nos permite obtener los datos relacionados con un NUR, adicional al medicamento; médico, paciente, etc.

Method POST

https://suseproxy.callmed.mx/SUSE2/SUSEReceta.svc/GetValReceta

Header

 'Content-type': 'application/json'

Body

    {
       "ClaveCliente": "0293",
       "Folio": "100581822326",
       "Token":"3b4abdaa2291d8ad3232371233bcb070e8d1f1af"

    }

Returns 200 OK

Debemos evaluar el Status Code de la petición, si es 200 OK, entonces tenemos que valuar el campo "Success", si es false la solicitud devolvió un error cuyo mensaje estará en el campo "Message".

    {
	"Success": true,
	"Code": "000001",
	"Message": "OK",
	"Medicamento": null,
	"Receta": {
		"Autorizacion": "30122021",
		"Folio": null,
		"NUR": "0009863572",
		"FechaConsulta": null,
		"NombreMedico": "GUSTAVO FRING",
		"ClaveMedico": "2135135"
		"ConsultorioID": "PARTIDA: 497"
		"ConsultorioNombre": "Calle Prueba",
		"FolioConsultorio": "",
		"DoctorEspecialidad": "MEDICINA GENERAL",
		"NombrePaciente": "NOMBRE APELLIDOPATERNO APELLIDOMATERNO",
		"ClavePaciente": "984508",
		"Familiar": "12",
		"EdadPaciente": "26",
		"SexoPaciente": "F",
		"Status": null
		}
	}

Obtener datos de un NUR

/GetValMedicamento

Obtiene los datos de un NUR, a qué medicamento, EAN y descripción corresponde. Así mismo el método realiza la pre-validación, es decir, informa si el NUR es susceptible a ser surtido.

Method POST

https://suseproxy.callmed.mx/SUSE2/SUSEReceta.svc/GetValMedicamento

Header

 'Content-type': 'application/json'

Body

    {
       "ClaveCliente": "0293",
       "Folio": "100581822326",
       "Token":"3b4abdaa2291d8ad3232371233bcb070e8d1f1af"

    }

Returns 200 OK

Debemos evaluar el Status Code de la petición, si es 200 OK, entonces tenemos que valuar el campo "Success", si es false la solicitud devolvió un error cuyo mensaje estará en el campo "Message".

    {
	"Success": true,
	"Code": "999999",
	"Message": "OK",
	"Medicamento": {
		"Cantidad": "1",
		"EAN": "7501094917012",
		"FechaConsulta": "12/31/2019 11:17:58 AM",
		"Folio": null,
		"ICD10": "",
		"Indicaciones": "            TOMAR UN COMPRIMIDO CADA 12HORAS",
		"Medicamento": "GALVUS MET 50/850MG CPR C60CAJA CON 60 COMPRIMIDOS 50/850 MGVILDAGLIPTINA/METFORMINA",
		"NUR": "0009886845",
		"PacienteName": null,
		"Status": null
	},
	"Receta": null
    }

Surtir un NUR

/SetSurtiMed

Permite registrar un medicamento como surtido, lo marca en Callmed para que la farmacia lo pueda incluir en un contrarrecibo de inmediato.

Este método realiza también varias validaciones.

Es muy importante no validar el EAN/SKU en el front antes de realizar la solicitud ya que Callmed realiza está validación con base en Bioequivalencias y reglas de negocio de cada administradora.

Cuando el Status de un NUR es 8, se tiene que enviar el NIP en el campo Authorization el cual será validado previo al surtimiento.

Method POST

https://suseproxy.callmed.mx/SUSE2/SUSEReceta.svc/SetSurtiMed

Header

 'Content-type': 'application/json'

Body

	{
	    "ClaveCliente": "0293",
	    "Folio": "100581822326",
	    "Authorization": "<nip>",
	    "CodeEAN":"7501094917012",
	    "Units":"1",
	    "Ticket":"009012",
	    "Sucursal":"1935",
	    "Precio":"123.12",
	    "Token":"34a3cc9fdba2239ef0da98250a83c0a0f30"
	}

Returns 200 OK

Debemos evaluar el Status Code de la petición, si es 200 OK, entonces tenemos que valuar el campo "Success", si es false la solicitud devolvió un error cuyo mensaje estará en el campo "Message".

Siempre que obtengamos un "Success" = true significa que el NUR fue surtido exitosamente.

   {
	"Success": true,
	"Code": "000001",
	"Message": "OK",
	"Medicamento": null,
	"Receta": null
    }

Cancelar el surtimiento de un NUR

/SetCancelar

Permite cancelar el surtimiento de un medicamento previamente surtido. Este método tiene algunas reglas.

[x] No permite cancelar NURs 24 horas después del surtimiento.

[x] No permite cancelar surtimiento ejecutado por otra cadena de farmacias.

[x] No permite cancelar surtimiento de NURs que ya hayan sido prefacturados o facturados.

Nos va a pedir los mismos datos que se utilizaron para surtir, salvo por el Token, que puede pertener a otro momento o sesión.

Method POST

https://suseproxy.callmed.mx/SUSE2/SUSEReceta.svc/SetCancelar

Header

 'Content-type': 'application/json'

Body

    {
       "ClaveCliente": "0293",
       "Folio": "100581822326",
       "Token":"3b4abdaa2291d8ad3232371233bcb070e8d1f1af"

    }

Returns 200 OK

Debemos evaluar el Status Code de la petición, si es 200 OK, entonces tenemos que valuar el campo "Success", si es false la solicitud devolvió un error cuyo mensaje estará en el campo "Message".

Siempre que obtengamos un "Success" = true significa que el surtimiento del NUR fue cancelado exitosamente y ha quedado libre para ser surtido nuevamente.

   {
	"Success": true,
	"Code": "000001",
	"Message": "OK",
	"Medicamento": null,
	"Receta": null
    }

Obtener listado de Equivalencias de un NUR

/GetEquivalencias

Cuando la Farmacia se integra con el Cliente y Callmed proporciona una lista de medicamentos así como las posibles equivalencias, por ejemplo genéricos de marca propia que son equivalentes a las partidas o medicamentos solicitados por el propio cliente. Estos son autorizados por el Cliente y cargados a Callmed para permitir el surtimiento "en lugar de".

Este método devuelve los Medicamentos que pueden ser usados para sustituir el que originalmente se recetó y asignó al NUR en Consulta. La idea es que al enviar el SetSurtir podamos enviar uno de los EAN de esta lista. Al surtir con una Equivalencia se deben mandar los datos de esta, incluido el EAN y el Precio que corresponde a la Equivalencia.

Al surtir Callmed siempre va a validar la Equivalencia tomando como base el EAN que se envía en SetSurtir.

Method POST

https://suseproxy.callmed.mx/SUSE2/SUSEReceta.svc/GetEquivalencias

Header

 'Content-type': 'application/json'

Body

    {
        "ClaveCliente": "0202",
	"Token": "53842c50d7bbaec70fd5e0a1869ffce7as22;902268",	
	"Folio": "0013970312"
    }

Returns 200 OK

Debemos evaluar el Status Code de la petición, si es 200 OK, entonces tenemos un arreglo de Equivalencias. Si este arreglo viene vacío significa que no existen Equivalencias

NOTA ACLARATORIA El atributo EAN corresponde a la equivalencia definida por la farmacia, y EANEquivalente es el EAN o Código prescrito por el médico, el cual puede ser inclusive un código homologado por el cliente o administradora. Como ejemplo de lo anterior:

Puede existir un código del siguiente modo:

CMED00001 CLARITROMICINA 500 MG. » Caja con 10 Tab. • Vía de Adm. Oral

Y una farmacia pudo haber definido los siguientes EAN propios como equivalencia del código CMED00001

Por tanto, quedaría así:

EANEquivalente EAN Medicamento
CMED00001 7501033920790 KLARICID HP 500 MG 10 TAB
CMED00001 7501300450159 SOLIEVO 500 MG 10 TAB
CMED00001 7501314701926 ADEL 500 MG 10 TAB
CMED00001 7501385494666 CLEARMICIN 500 MG 10 TAB
CMED00001 7501328979144 APROVEL 150 MG 28 TAB

Por tanto, como farmacia que está consumiendo el Servicio Web se debe tomar en cuenta el EAN que se regresa en la lista para buscar dentro de sus propios sistemas.

[{
	"Cantidad": null,
	"EAN": "7501033920790",
	"EANEquivalente": "CMED00001",
	"FechaConsulta": null,
	"Folio": null,
	"ICD10": null,
	"Indicaciones": null,
	"Medicamento": "KLARICID HP 500 MG 10 TAB",
	"NUR": null,
	"PacienteName": null,
	"Status": null
}, {
	"Cantidad": null,
	"EAN": "7501300450159",
	"EANEquivalente": "CMED00001",
	"FechaConsulta": null,
	"Folio": null,
	"ICD10": null,
	"Indicaciones": null,
	"Medicamento": "SOLIEVO 500 MG 10 TAB",
	"NUR": null,
	"PacienteName": null,
	"Status": null
}]
⚠️ **GitHub.com Fallback** ⚠️