Laboratorio de Patología
Construir con Agente de IA
Backend de Laboratorio de Patología

Plantilla de Backend de Aplicación de Laboratorio de Patología
Rastrear muestras desde la recolección hasta la admisión, análisis, revisión y liberación segura del informe

Un backend de Laboratorio de Patología listo para producción en Back4app para el seguimiento de muestras desde la recolección hasta el análisis con entrega segura de resultados. Úselo para acelerar portales de patología, sistemas de operaciones de laboratorio y aplicaciones de recolección en la web y móviles.

Aspectos clave

Esta plantilla te ofrece un backend listo para laboratorio para flujos de trabajo de patología: muestras rastreables, transiciones de estado claras, registros de análisis y acceso protegido a resultados para que los equipos puedan centrarse en el tiempo de respuesta y la fiabilidad.

  1. Ciclo de vida de la muestra de principio a finRastrea cada muestra desde el sitio de recolección y la aceptación hasta el procesamiento, análisis, verificación y liberación del informe final.
  2. Visibilidad de la cadena de custodiaRegistra entregas, marcas de tiempo, manipuladores y cambios de estado para que cada movimiento de muestra sea rastreable.
  3. Flujo de trabajo de prueba estructuradoModela pruebas ordenadas, etapas de laboratorio y estados de resultados para soportar operaciones de patología sin diseño de backend personalizado.
  4. Distribución segura de resultadosRestringir el acceso a los resultados por rol y propiedad para que solo clínicos, pacientes o personal de laboratorio autorizados puedan ver los informes liberados.
  5. Soporte de API multiplataformaUtiliza el mismo backend con REST, GraphQL y Live Queries opcional para paneles operativos y aplicaciones de recolección.

¿Qué es la plantilla de backend de la aplicación de laboratorio de patología?

Back4app es un backend administrado para la entrega rápida de productos. La plantilla de backend de la aplicación de laboratorio de patología modela órdenes de patología, movimiento de muestras, etapas de análisis y entrega de resultados para que los equipos puedan implementar software de laboratorio sin reconstruir la infraestructura central del backend.

Mejor para:

Software de laboratorio de patologíaSistemas de seguimiento de muestrasPortales de resultados diagnósticosAplicaciones de recolección y accesoTableros de operaciones clínicasMVPs de flujo de trabajo en salud

Resumen

Los laboratorios de patología dependen de un seguimiento preciso. Una muestra debe ser recolectada correctamente, etiquetada, trasladada a través de etapas de procesamiento, analizada, revisada y finalmente entregada al destinatario correcto con fuertes controles de acceso.

Esta plantilla define Muestra, OrdenDelLaboratorio, EventoDeRecolección, RegistroDeAnálisis y EntregaDeResultados con reglas de permisos y Live Queries opcional para que los equipos puedan implementar flujos de trabajo de patología de manera rápida y segura.

Características principales del laboratorio de patología

Cada tarjeta de tecnología en este centro utiliza el mismo esquema de Laboratorio de Patología con Especimen, Orden de Laboratorio, Evento de Colección, Registro de Análisis y Entrega de Resultados.

Registro y seguimiento de especímenes

Rastrear identificadores de especímenes, códigos de barras, tipo de espécimen, fuente, prioridad y estado actual del flujo de trabajo.

Gestión de órdenes de laboratorio

Los objetos LabOrder capturan detalles de solicitudes, pedido de Provider, vinculación de pacientes, paneles de pruebas y notas clínicas.

Eventos de recolección y cadena de custodia

CollectionEvent registra quién recolectó la muestra, dónde se recolectó, cuándo se entregó y los metadatos de condición.

Registros del flujo de trabajo de análisis

AnalysisRecord almacena la etapa de procesamiento, patólogo o técnico asignado, observaciones, adjuntos y estado de finalización.

Entrega segura de resultados

ResultDelivery rastrea cuándo se genera, libera, visualiza un informe y quién lo hace bajo permisos controlados.

¿Por qué construir el backend de su laboratorio de patología con Back4app?

Back4app le proporciona un contrato de backend seguro para operaciones de patología, gestionando la autenticación, la gestión de esquemas y las API para que su equipo pueda centrarse en los flujos de trabajo del laboratorio, el tiempo de respuesta y la experiencia del usuario.

  • Flujos de trabajo de laboratorio premodelados: Comience con entidades principales para muestras, pedidos, eventos de recolección, análisis y entrega de resultados en lugar de diseñar la capa de datos desde cero.
  • Trazabilidad por diseño: Capture hitos de recolección y procesamiento con marcas de tiempo y usuarios responsables para apoyar los controles de calidad internos y las auditorías.
  • Acceso a API flexible: Exponga flujos de trabajo de patología a portales web, herramientas de recolección móviles y sistemas externos a través de REST, GraphQL, y actualizaciones en tiempo real opcionales.

Estandarice las operaciones de patología en la recolección, el procesamiento de laboratorio y la entrega de informes con un contrato de backend y reduzca el tiempo de lanzamiento al mercado.

Beneficios Clave

Un backend de patología que te ayuda a lanzar más rápido mientras preserva la trazabilidad, control y extensibilidad.

Entrega de productos más rápida

Comienza con un modelo de especimen y resultados diseñado específicamente para que tu equipo pueda concentrarse en flujos de usuario en lugar de la configuración del backend.

Trazabilidad clara del especimen

Rastrea eventos de colección, transporte, recepción, procesamiento y liberación en un modelo de datos consistente.

Acceso seguro a informes

Usa controles de rol y propiedad para que los resultados de patología sensibles solo sean visibles para usuarios aprobados.

Mejor visibilidad del laboratorio

Monitorea el estado de las muestras y el progreso del análisis para reducir cuellos de botella y mejorar el tiempo de respuesta.

APIs listas para integración

Conecta herramientas de recolección, portales de clínicos, notificaciones o sistemas hospitalarios utilizando REST o GraphQL.

Andamiaje asistido por IA

Usa el aviso del Agente de IA para generar el backend, sembrar datos realistas y prototipar flujos de trabajo más rápido.

¿Listo para optimizar los flujos de trabajo de patología?

Deja que el Agente de IA de Back4app construya el backend del laboratorio de patología y siembre muestras de especímenes, órdenes, datos de análisis y registros de entrega de resultados a partir de un aviso.

Gratis para empezar — 50 solicitudes de Agente AI/mes, no se requiere tarjeta de crédito

Pila técnica

Todo incluido en esta plantilla de backend de laboratorio de patología.

Frontend
13+ tecnologías
Backend
Back4app
Base de datos
MongoDB
Autenticación
Autenticación integrada + roles
API
REST y GraphQL
Tiempo real
Live Queries

Diagrama ER

Modelo de relación de entidad para el esquema del laboratorio de patología.

Ver fuente del diagrama
Mermaid
erDiagram
    Laboratory ||--o{ Specimen : "processes"
    User ||--o{ Specimen : "collects"
    Specimen ||--o{ TestOrder : "has"
    User ||--o{ TestOrder : "orders"
    TestOrder ||--o{ AnalysisRun : "processed_in"
    User ||--o{ AnalysisRun : "performs"
    TestOrder ||--o| ResultReport : "produces"
    AnalysisRun ||--o| ResultReport : "generates"
    User ||--o{ ResultReport : "reviews"
    User ||--o{ AuditLog : "actor_of"

    Laboratory {
        String objectId PK
        String name
        String code
        String location
        String contactEmail
        Date createdAt
        Date updatedAt
    }

    Specimen {
        String objectId PK
        String barcode
        String patientId
        String specimenType
        String status
        Date collectedAt
        Date receivedAt
        Pointer laboratory FK
        Pointer collector FK
        String chainOfCustodyNotes
        String priority
        Date createdAt
        Date updatedAt
    }

    TestOrder {
        String objectId PK
        Pointer specimen FK
        Pointer orderedBy FK
        String testCode
        String testName
        String clinicalNotes
        String status
        Date requestedAt
        Date dueAt
        Date createdAt
        Date updatedAt
    }

    AnalysisRun {
        String objectId PK
        Pointer testOrder FK
        Pointer technician FK
        String instrumentId
        Date startedAt
        Date completedAt
        String runStatus
        String qcStatus
        String observations
        Date createdAt
        Date updatedAt
    }

    ResultReport {
        String objectId PK
        Pointer testOrder FK
        Pointer analysisRun FK
        Pointer reviewedBy FK
        String summary
        String resultStatus
        Boolean criticalFlag
        Date deliveredAt
        String deliveryChannel
        String attachmentUrl
        Date createdAt
        Date updatedAt
    }

    AuditLog {
        String objectId PK
        Pointer actor FK
        String action
        String targetClass
        String targetId
        String details
        Date timestamp
    }

Flujo de integración

Flujo de Auth-a-CRUD para inicio de sesión en patología, seguimiento de especímenes, registro de análisis y entrega segura de informes.

Ver fuente del diagrama
Mermaid
sequenceDiagram
  participant User
  participant App as Pathology Lab App
  participant Back4app as Back4app Cloud

  User->>App: Sign in as technician or pathologist
  App->>Back4app: POST /login (username, password)
  Back4app-->>App: Session token + user role

  User->>App: Scan barcode and open today's intake queue
  App->>Back4app: GET /classes/Specimen?where=status in [collected,in_transit,received]
  Back4app-->>App: Matching specimen records

  User->>App: Register a new test order for a received specimen
  App->>Back4app: POST /classes/TestOrder (specimen, orderedBy, testCode, priority)
  Back4app-->>App: TestOrder created

  User->>App: Start analysis and record QC progress
  App->>Back4app: POST /classes/AnalysisRun (testOrder, technician, instrumentId, runStatus)
  Back4app-->>App: AnalysisRun created
  App->>Back4app: PUT /classes/Specimen/{id} (status: processing)
  Back4app-->>App: Specimen updated

  User->>App: Approve and securely deliver result report
  App->>Back4app: POST /classes/ResultReport (testOrder, analysisRun, reviewedBy, resultStatus: approved)
  Back4app-->>App: ResultReport saved
  App->>Back4app: PUT /classes/ResultReport/{id} (resultStatus: delivered, deliveredAt, deliveryChannel)
  Back4app-->>App: Delivery confirmed

  Back4app-->>App: Live Query events (specimen status changes, QC flags, delivered reports)
  App-->>User: Real-time lab workflow updates

Diccionario de Datos

Referencia completa a nivel de campo para cada clase en el esquema del Laboratorio de Patología.

CampoTipoDescripciónRequerido
objectIdStringAuto-generated unique identifierAutomático
usernameStringLogin username for lab staff, clinicians, or administrators
emailStringUser email address
passwordStringHashed password (write-only)
roleStringRole (admin, pathologist, technician, collector, clinician, courier)
displayNameStringFull name for display in reports and audit trails
createdAtDateAuto-generated creation timestampAutomático
updatedAtDateAuto-generated last-update timestampAutomático

8 campos en User

Seguridad y Permisos

Cómo la ACL, roles y estrategia CLP garantizan la seguridad de muestras, registros de análisis y resultados de patología liberados.

Acceso basado en roles

Utilice roles como recolector, técnico, patólogo, clínico y administrador para controlar quién puede crear, actualizar, revisar y liberar registros.

Propiedad de muestras y resultados

Restringir las actualizaciones de muestras al personal de laboratorio responsable y limitar la visibilidad de los resultados liberados a los receptores autorizados o equipos de atención vinculados.

Historia de entrega protegida

Los eventos de entrega de resultados y acceso deben ser controlados estrictamente para que las marcas de tiempo de liberación, los visualizadores y el estado de entrega no puedan ser alterados casualmente por los clientes.

Esquema (JSON)

Definición de esquema JSON en formato bruto lista para copiar en Back4app o utilizar como referencia de implementación.

JSON
{
  "classes": [
    {
      "className": "User",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "username": {
          "type": "String",
          "required": true
        },
        "email": {
          "type": "String",
          "required": true
        },
        "password": {
          "type": "String",
          "required": true
        },
        "role": {
          "type": "String",
          "required": true
        },
        "displayName": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Laboratory",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "name": {
          "type": "String",
          "required": true
        },
        "code": {
          "type": "String",
          "required": true
        },
        "location": {
          "type": "String",
          "required": false
        },
        "contactEmail": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "Specimen",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "barcode": {
          "type": "String",
          "required": true
        },
        "patientId": {
          "type": "String",
          "required": true
        },
        "specimenType": {
          "type": "String",
          "required": true
        },
        "status": {
          "type": "String",
          "required": true
        },
        "collectedAt": {
          "type": "Date",
          "required": true
        },
        "receivedAt": {
          "type": "Date",
          "required": false
        },
        "laboratory": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Laboratory"
        },
        "collector": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "chainOfCustodyNotes": {
          "type": "String",
          "required": false
        },
        "priority": {
          "type": "String",
          "required": true
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "TestOrder",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "specimen": {
          "type": "Pointer",
          "required": true,
          "targetClass": "Specimen"
        },
        "orderedBy": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "testCode": {
          "type": "String",
          "required": true
        },
        "testName": {
          "type": "String",
          "required": true
        },
        "clinicalNotes": {
          "type": "String",
          "required": false
        },
        "status": {
          "type": "String",
          "required": true
        },
        "requestedAt": {
          "type": "Date",
          "required": true
        },
        "dueAt": {
          "type": "Date",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "AnalysisRun",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "testOrder": {
          "type": "Pointer",
          "required": true,
          "targetClass": "TestOrder"
        },
        "technician": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "instrumentId": {
          "type": "String",
          "required": false
        },
        "startedAt": {
          "type": "Date",
          "required": true
        },
        "completedAt": {
          "type": "Date",
          "required": false
        },
        "runStatus": {
          "type": "String",
          "required": true
        },
        "qcStatus": {
          "type": "String",
          "required": true
        },
        "observations": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "ResultReport",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "testOrder": {
          "type": "Pointer",
          "required": true,
          "targetClass": "TestOrder"
        },
        "analysisRun": {
          "type": "Pointer",
          "required": true,
          "targetClass": "AnalysisRun"
        },
        "reviewedBy": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "summary": {
          "type": "String",
          "required": true
        },
        "resultStatus": {
          "type": "String",
          "required": true
        },
        "criticalFlag": {
          "type": "Boolean",
          "required": false
        },
        "deliveredAt": {
          "type": "Date",
          "required": false
        },
        "deliveryChannel": {
          "type": "String",
          "required": true
        },
        "attachmentUrl": {
          "type": "String",
          "required": false
        },
        "createdAt": {
          "type": "Date",
          "required": false
        },
        "updatedAt": {
          "type": "Date",
          "required": false
        }
      }
    },
    {
      "className": "AuditLog",
      "fields": {
        "objectId": {
          "type": "String",
          "required": false
        },
        "actor": {
          "type": "Pointer",
          "required": true,
          "targetClass": "User"
        },
        "action": {
          "type": "String",
          "required": true
        },
        "targetClass": {
          "type": "String",
          "required": true
        },
        "targetId": {
          "type": "String",
          "required": true
        },
        "details": {
          "type": "String",
          "required": false
        },
        "timestamp": {
          "type": "Date",
          "required": true
        }
      }
    }
  ]
}

Construir con AI Agent

Utiliza el agente de IA Back4app para generar una aplicación completa de laboratorio de patología a partir de esta plantilla, incluyendo frontend, backend, autenticación, flujos de trabajo de especímenes y entrega segura de resultados.

Agente de IA Back4app
Listo para construir
Crea un backend de laboratorio de patología en Back4app con este esquema y comportamiento exactos.

Esquema:
1. LabOrder: orderNumber (Cadena, requerido), patientName (Cadena, requerido), patientIdExternal (Cadena), orderingProvider (Cadena), requestedTests (Array, requerido), priority (Cadena: rutina, urgente, inmediata), clinicalNotes (Cadena), status (Cadena: ordenado, recolectado, en_procesamiento, completado, liberado), objectId, createdAt, updatedAt.
2. Specimen: accessionNumber (Cadena, requerido), barcode (Cadena, requerido), labOrder (Puntero a LabOrder, requerido), specimenType (Cadena, requerido), sourceSite (Cadena), collectedAt (Fecha), receivedAt (Fecha), currentStatus (Cadena: pendiente_recolección, recolectado, en_tránsito, recibido, en_procesamiento, analizado, verificado, liberado), conditionNotes (Cadena), objectId, createdAt, updatedAt.
3. CollectionEvent: specimen (Puntero a Specimen, requerido), collectedBy (Puntero a Usuario), location (Cadena), eventType (Cadena: recolección, entrega, transporte, recibo), eventAt (Fecha, requerido), notes (Cadena), objectId, createdAt, updatedAt.
4. AnalysisRecord: specimen (Puntero a Specimen, requerido), assignedTo (Puntero a Usuario), stage (Cadena: acceso, examen_grosor, procesamiento, revisión_microscópica, interpretación, verificación), findings (Cadena), attachments (Array), status (Cadena: en_colas, en_progreso, completado, aprobado), completedAt (Fecha), objectId, createdAt, updatedAt.
5. ResultDelivery: specimen (Puntero a Specimen, requerido), analysisRecord (Puntero a AnalysisRecord), reportUrl (Cadena), releasedBy (Puntero a Usuario), releasedAt (Fecha), deliveryChannel (Cadena: portal, clínico, api), deliveryStatus (Cadena: borrador, liberado, visto), viewedAt (Fecha), objectId, createdAt, updatedAt.

Seguridad:
- CLP y ACL basados en roles: los recolectores pueden crear registros de CollectionEvent, los técnicos pueden actualizar etapas de procesamiento, los patólogos pueden aprobar análisis, y solo los clínicos/admins autorizados pueden acceder a los informes liberados.

Autenticación:
- Registro e inicio de sesión del personal a través de Usuario integrado; roles asignados por el administrador.

Comportamiento:
- Autenticar usuario, listar órdenes de laboratorio o especímenes asignados, registrar actualizaciones de estado de colección o espécimen, guardar un registro de análisis y liberar un resultado de forma segura.

Entregar:
- Aplicación Back4app con esquema, ACLs, CLPs, validaciones de código en la nube, datos de muestra inicializados y un andamiaje de frontend por tecnología elegida.

Presiona el botón de abajo para abrir el agente con este aviso de plantilla prellenado.

Este aviso base describe el esquema y los comportamientos del flujo de trabajo de patología; puedes seleccionar sufijos específicos de tecnología después.

Desplegar en minutos50 avisos gratuitos / mesNo se requiere tarjeta de crédito

API Playground

Prueba los endpoints REST y GraphQL contra el esquema del Laboratorio de Patología. Las respuestas utilizan datos de prueba y no requieren una cuenta de Back4app.

Cargando entorno de pruebas…

Utiliza el mismo esquema que esta plantilla.

Elige Tu Tecnología

Expanda cada tarjeta para ver los pasos de integración, patrones de estado, ejemplos del modelo de datos y notas fuera de línea.

Backend de Laboratorio de Patología Flutter

Backend de Laboratorio de Patología React

Backend de Laboratorio de Patología React Nativo

Backend de Laboratorio de Patología Next.js

Backend de Laboratorio de Patología JavaScript

Backend de Laboratorio de Patología Android

Backend de Laboratorio de Patología iOS

Backend de Laboratorio de Patología Vue

Backend de Laboratorio de Patología Angular

Backend de Laboratorio de Patología GraphQL

Backend de Laboratorio de Patología REST API

Backend de Laboratorio de Patología PHP

Backend de Laboratorio de Patología .NET

Qué Obtienes con Cada Tecnología

Cada pila utiliza el mismo esquema de backend del Laboratorio de Patología y contratos de API.

Gestión de datos unificada de laboratorio de patología

Estructura de datos centralizada para gestionar órdenes, muestras y resultados.

Compartición segura para laboratorio de patología

Compartición confidencial de resultados de pacientes y datos del laboratorio con usuarios autorizados.

Seguimiento de muestras en tiempo real

Supervisa el movimiento de las muestras a través de todas las etapas del análisis sin interrupciones.

REST/GraphQL APIs para laboratorio de patología

APIs flexibles para integrarse con aplicaciones y servicios del front-end.

Control de acceso para laboratorio de patología

Gestiona roles y permisos de usuarios para asegurar la seguridad de los datos.

Flujos de trabajo de análisis automatizados

Optimiza los procesos del laboratorio con etapas automatizadas desde la orden hasta la entrega de resultados.

Comparación del Marco del Laboratorio de Patología

Compara la velocidad de configuración, el estilo del SDK y el soporte de IA a través de todas las tecnologías soportadas.

FrameworkTiempo de ConfiguraciónBeneficio del Laboratorio de PatologíaTipo de SDKSoporte de IA
~5 minCódigo único para el laboratorio de patología en móvil y web.Typed SDKCompleto
Aproximadamente 5 minTablero web rápido para el laboratorio de patología.Typed SDKCompleto
Menos de 5 minutosAplicación móvil multiplataforma para el laboratorio de patología.Typed SDKCompleto
~3–7 minAplicación web renderizada en servidor para el laboratorio de patología.Typed SDKCompleto
Menos de 5 minIntegración web ligera para el laboratorio de patología.Typed SDKCompleto
~5 minAplicación nativa de Android para el laboratorio de patología.Typed SDKCompleto
Aproximadamente 5 minAplicación nativa de iOS para el laboratorio de patología.Typed SDKCompleto
Menos de 5 minutosInterfaz web de React para el laboratorio de patología.Typed SDKCompleto
~3–7 minAplicación web empresarial para el laboratorio de patología.Typed SDKCompleto
~2 minAPI flexible de GraphQL para el laboratorio de patología.GraphQL APICompleto
Menos de 2 minIntegración de REST API para el laboratorio de patología.REST APICompleto
~3–5 minBackend PHP del lado del servidor para el laboratorio de patología.REST APICompleto
Menos de 5 minutosBackend .NET para el laboratorio de patología.Typed SDKCompleto

El tiempo de configuración refleja la duración esperada desde el arranque del proyecto hasta la primera vista de muestra u orden de laboratorio poblada con datos reales.

Preguntas Frecuentes

Preguntas comunes sobre la creación de un backend de laboratorio de patología con esta plantilla.

¿Qué es un backend de Laboratorio de Patología?
¿Qué incluye esta plantilla de Laboratorio de Patología?
¿Cómo ayuda Live Queries a los tableros de patología?
¿Cómo puedo evitar que un espécimen omita etapas de flujo de trabajo requeridas?
¿Qué campos debo capturar para la trazabilidad del espécimen?
¿Puedo soportar múltiples pruebas en un solo espécimen?
¿Cómo ayuda el Agente de IA en la siembra de datos de patología?
¿Qué opciones de respaldo están disponibles para informes de patología y registros de entrega?
¿Cómo apoyo muestras urgentes o estadísticas?

Confiado por equipos que construyen flujos de trabajo de atención médica

Únete a equipos que utilizan plantillas de Back4app para lanzar aplicaciones diagnósticas trazables, seguras y escalables.

G2 Users Love Us Badge

¿Listo para construir tu aplicación de laboratorio de patología?

Comienza tu proyecto de patología en minutos. No se requiere tarjeta de crédito.

Elegir tecnología