Facturación electrónica del sector salud
Integra el ERP con la plataforma del Ministerio de Salud para radicar facturas con su soporte clínico y recuperar el código que las valida.
16
operaciones de la plataforma estatal
3
contextos de datos
gzip
paquetes de gran tamaño
Una institución de salud no cobra con la factura sola: debe radicarla acompañada del detalle de cada servicio prestado a cada usuario. El paquete resultante pesa varios megas, llega comprimido, y cualquier inconsistencia se traduce en una glosa que retrasa el pago semanas. Además la plataforma estatal expone más de una decena de operaciones distintas según se trate de una factura, una nota de ajuste, un acuerdo de voluntades o una capitación.
Una API en .NET 8 con arquitectura por capas concéntricas que recibe el paquete comprimido, lo valida antes de enviar nada, lo radica ante la plataforma estatal, recupera el código único que acredita la validación y administra las observaciones y rechazos que devuelve. Una función complementaria arma el correo con los soportes y lo envía.
Validar en casa antes de enviar. La plataforma estatal es lenta y sus mensajes de error son crípticos, así que cada regla que se pueda comprobar localmente se comprueba con validación declarativa antes de gastar un viaje de red: el usuario recibe un error entendible en segundos en lugar de un rechazo incomprensible minutos después. El tipo de usuario del paquete tampoco se resuelve con condicionales anidados sino con una estrategia por tipo, porque la norma cambia y cambia seguido. Y ninguna cadena de conexión vive en el repositorio: todos los secretos se resuelven contra el almacén de claves en el arranque.
Radicación automatizada del ciclo completo, con los rechazos detectados antes del envío y el código de validación recuperado y almacenado sin intervención manual.
Cómo se ve por dentro
Ejemplos ilustrativos de los patrones aplicados, con la razón de cada decisión.
Los secretos se resuelven en el arranque, no se versionan
builder.Configuration.AddAzureKeyVault(
new Uri(builder.Configuration["KeyVault:Uri"]
?? throw new InvalidOperationException("KeyVault:Uri sin configurar")),
new DefaultAzureCredential());
builder.Services
.AddOptions<OpcionesPlataformaSalud>()
.BindConfiguration("PlataformaSalud")
.ValidateDataAnnotations()
.ValidateOnStart(); // si falta algo, no arranca: mejor que fallar en la primera radicaciónLa configuración se completa desde el almacén de claves antes de construir la aplicación. El repositorio no contiene ninguna cadena de conexión, y rotar una credencial no exige recompilar ni desplegar.
Ejemplo ilustrativo del patrón aplicado; no es código de ningún producto.Stack del proyecto
¿Necesitas algo parecido?
Cuéntame tu caso y te digo con franqueza si es viable y cuánto toma.
Hablemos