How to identify outliers in a ratio X/Y where Y is a frequency, and thus implies a confidence? Suppose every day you test a group of people for some disease. You measure the percent of people who tested positive for the disease, call this PositiveRate.
Now suppose on the recent day, the PositiveRate was noticeably high or low, but you've only tested a small number of people. What strategy(s) might you use to classify this high or low PositiveRate as an outlier?
Example
To make this more concrete, here's some data
daily <- data.frame(
  PeopleTested = c(100, 80, 130, 55, 127, 91),
  HasDisease = c(   10,  7,  10,  3,  15,  7)
)
daily$PositiveRate <- daily$HasDisease / daily$PeopleTested

daily
  PeopleTested HasDisease PositiveRate
1          100         10   0.10000000
2           80          7   0.08750000
3          130         10   0.07692308
4           55          3   0.05454545
5          127         15   0.11811024
6           91          7   0.07692308

Now suppose the next day you test 25 people for the disease and 4 of them test positive ==> $PositiveRate = 0.16$. Is this an outlier?
Inefficient Solution
An inefficient solution I can think of would be to do a simulation, whereby I randomly sample 25 people from my dataset, measure the PositiveRate, and then repeat this process hundreds of times until I have a distribution from which I can estimate $P(X > 0.16 | k = 25)$. Unfortunately this is slow, and it requires you have the individual case data, which I do not.
 A: Perhaps this could be addressed using a beta-binomial model? You could have a predictor that code for possible changes in the underlying (unknown) fraction of people with the disease in the population on the next day. This would give you a p-value, essentially telling you the probability of observing that data (on the next day) under the null hypothesis that the fraction of people with disease in the population has not changed.
Using your example data:
daily <- data.frame(
  PeopleTested = c(100, 80, 130, 55, 127, 91, 25),
  HasDisease = c(   10,  7,  10,  3,  15,  7 , 4),
  nextDay =    c(    0,  0,   0,  0,   0,  0 , 1)
)

library(aod)
m1 <- betabin(cbind(HasDisease, PeopleTested - HasDisease) ~ nextDay, ~ 1, 
               data = daily, phi.ini=1e-8)

Based on this model it seems that the 'next day' should not be considered different from the previous six days ($p\approx 0.23$)
> summary(m1)@Coef
             Estimate Std. Error   z value Pr(> |z|)
(Intercept) -2.323521  0.1447944 -16.04703  0.000000
nextDay      0.665071  0.5585877   1.19063  0.233799

