I think a body entered signal should be on the bullet, it is an area and the target is a body , a body is entering the bullet and area is entering the enemy. when I have a problem like that I will put a print statement with the body entered function that receives the signal to check if a signal is being received, for me I usually have layers wrong.
this is how it looks in my project.
func _on_Bullet_body_entered(body):
explode()
if body.has_method("_take_damage"):
body._take_damage(damage)
the bullet checks the body that entered its collider for a function 'take damage' and delivers the amount of damage for that bullet. it comes from KidsCanCode Top Down Tank tutorial