Vetmira operations

Set up your second factor

This console can read and suspend every practice on this deployment. A password on its own is not enough to hold that, so enrolling is not optional.

Add this key to your authenticator app, then enter the code it shows.

Recovery codes, shown once. Keep them somewhere that is not this laptop. Each works a single time.


      

Vetmira operations

Your recovery codes came from an older generator and are weaker than they should be. Replacing them takes a minute, and the ones you hold now keep working until you confirm the new set.

Needs attention

    Clinics

    PracticeStatus NextActions

    Add a clinic

    Creates the database, migrates it, registers the hostname, and makes the first administrator. Takes up to a minute.

    Import their old records

    The one-time conversion from whatever the practice used before. It ran from inside the clinic's own admin app until it was moved here: it happens once, while we are setting them up, and it writes patient records in bulk from a file nobody at the practice has seen parsed. That is our job, not theirs.

    Owners first, then animals, then the link between them. An animal whose owner has not been imported yet is reported as a fixable error, not a crash. Every row needs the old system's own key in an external_id column, which is what makes a second run update the same records instead of duplicating them.

    Up to 10 MB and 5,000 rows per file, the same row limit the API enforces: split a bigger export and run it in parts. Checking a file changes no live client or patient record, but it does store the rows in that clinic's database as a private review batch, which is what the write step then applies. A batch nobody comes back to is deleted after seven days; Discard removes it now.

    RowProblem

    Deployment checks

    Two questions about third parties, asked on demand. Neither runs on load: an unreachable provider should not be able to make this page look broken.

    Sending isolation

    Whether every practice is registered with Amazon SES. A clinic that is not, or whose registration is incomplete, fails every message it sends once isolation is switched on.

    Prices

    Whether the prices in Stripe still match the ones on the pricing page. A price edited in the Stripe dashboard breaks nothing and passes every test, and the first evidence is a customer reading an invoice.

    Recovery codes

    The way back in when the authenticator is on a phone that is lost, wiped or dead. Each code works once.

    
            

    Recent activity

    Every operator action, append-only. The database refuses to let this be edited.

    WhenWhoDid whatToOutcomeDetail