# Fuente: album/book/ops-templates/veterinarian/03-realizar-visita.md
# Drive: 08. IT y Producto/Funcionalidades Plataforma Veterinario
# Tests Backend: pytest tests/contracts/mascotas/test_vet_visits.py
# Tests Frontend: npx playwright test vet-visit.spec.ts

Feature: Realizar visita y crear informe medico

  Como veterinario
  Quiero registrar la atencion medica de mis visitas
  Para mantener el historial clinico del paciente

  Background:
    Given que estoy logueado como veterinario
    And tengo una visita programada para hoy con mascota "Luna"
    And la visita esta en estado "Pagado"

  # ============================================
  # INICIAR VISITA
  # ============================================

  Scenario: Ver informacion antes de la visita
    When accedo al detalle de la visita
    Then deberia ver la direccion para llegar
    And deberia ver el telefono del dueno para confirmar
    And deberia ver los servicios a realizar
    And deberia ver el historial previo de Luna

  Scenario: Iniciar visita al llegar
    Given que llegue al domicilio
    When hago click en "Iniciar visita"
    Then el estado deberia cambiar a "En progreso"
    And deberia registrarse la hora de inicio
    And deberia habilitarse el boton "Crear informe"

  # ============================================
  # CREAR INFORME MEDICO
  # ============================================

  Scenario: Completar informe con examen fisico
    Given que la visita esta en progreso
    When voy a "Crear informe"
    And completo el examen fisico:
      | campo                 | valor       |
      | Peso                  | 4.5 kg      |
      | Temperatura           | 38.5 °C     |
      | Frecuencia cardiaca   | 120 lpm     |
      | Frecuencia resp       | 25 rpm      |
      | Mucosas               | Rosadas     |
      | Hidratacion           | Normal      |
    And guardo el informe
    Then el examen fisico deberia guardarse

  Scenario: Agregar diagnostico y tratamiento
    Given que complete el examen fisico
    When agrego el diagnostico:
      """
      Otitis externa bilateral leve.
      Paciente presenta prurito y secrecion ceruminosa.
      Sin signos de infeccion secundaria.
      """
    And agrego el tratamiento:
      """
      Limpieza de oidos con solucion fisiologica.
      Aplicacion de gotas oticas antibioticas.
      Control en 7 dias.
      """
    And guardo el informe
    Then el diagnostico y tratamiento deberian guardarse

  Scenario: Recetar medicamentos
    Given que estoy creando el informe
    When agrego medicamentos:
      | nombre           | dosis   | frecuencia     | duracion  |
      | Otomax gotas     | 5 gotas | cada 12 horas  | 7 dias    |
      | Meloxicam 1.5mg  | 1 comp  | cada 24 horas  | 3 dias    |
    And guardo el informe
    Then los medicamentos deberian aparecer en el informe
    And el dueno podra verlos desde su cuenta

  # ============================================
  # COMPLETAR VISITA
  # ============================================

  Scenario: Completar visita con informe
    Given que el informe esta completo
    When hago click en "Completar visita"
    And confirmo la finalizacion
    Then la visita deberia pasar a estado "Completado"
    And deberia generarse factura electronica (AFIP)
    And el dueno deberia recibir notificacion
    And el informe deberia ser visible para el dueno

  Scenario: No puedo completar sin informe
    Given que la visita esta en progreso
    But no cree ningun informe
    When intento completar la visita
    Then deberia ver error "Debes crear el informe antes de completar"

  # ============================================
  # GUARDADO AUTOMATICO
  # ============================================

  Rule: El informe se guarda automaticamente

    Scenario: Guardado automatico cada 30 segundos
      Given que estoy escribiendo el informe
      When pasan 30 segundos
      Then deberia ver indicador "Guardado automaticamente"

    Scenario: Recuperar informe despues de desconexion
      Given que estaba escribiendo el informe
      And perdi conexion a internet
      When recupero la conexion
      Then deberia recuperar mi progreso
      And no deberia perder lo que escribi

  # ============================================
  # CASOS ESPECIALES
  # ============================================

  Scenario: Cancelar visita in situ
    Given que llegue al domicilio
    But el dueno no esta
    When marco la visita como "Cancelada in situ"
    And selecciono motivo "Dueno ausente"
    Then la visita deberia marcarse como cancelada
    And deberia generarse cargo por visita fallida
