That sounds like a pretty sensible way to do things. There are three functions you can use to get an integer from a floating point value(don't worry, it's not as complicated as it sounds!)
rint(a) returns the nearest integer to a, so rounds up if the decimal is .5 or more, and rounds down otherwise:
rint(3.276) = 3
rint(4.576) = 5
floor(a) returns the greatest integer less than a, so basically just chops off all the decimal places from the number:
floor(22.15983) = 22
ceil(a) returns the smallest integer greater than a, which is like doing floor and then adding 1.
ceil(22.15983) = 23
rint is probably the best one to use. Also make sure that you have a check to see when the damage the entity is doing is rounded to 0, and remove the entity at that point. Otherwise you'll have all these entities doing nothing, and eventually the engine may run out of entities.
To make the entity take damage off each frame, set the owner field of the poisoning entity to the self.owner you sent to Poison_it, and the enemy field to the other you sent. Then in the think function you create, have a line
T_Damage (self.enemy, self, self.owner, a);
where a is the amount of damage you have computed. This line tells quake to damage self.enemy (the player), that the damage is inflicted by self(the poison), that the damage was originally caused by self.owner(a scrag), and that the amount of damage to do is a.
Hope that helps somewhat, let us know if you have any more problems.