First of all there no problems with the company_phone_number_normalization_rules.txt GAL normalization is happening.
This is the situation:
Alice has the number 0000 defined on telephoneNumber AD attribute
Bob has Alice on his contact List
If Alice defines Bob as "External Contact", Bob will not see the Work Phone of Alice.
This might be a normal behaviour but here it says clearly that this kind of information is always visible, regardless of privacy relationship:
Presence information items with an asterisk (*) beside them indicates that if these attributes are defined in the company’s directory service, they are visible to all contacts in your organization, regardless of privacy relationship. They are also visible to external contacts outside your organization (if configured and recognized by your organization’s network).
So, why is not showing when a user is defined as External?
Also, I want to prevent users from giving this user category, is there a way to do it?
For the privacy relationship External Contacts, the presence information Work Phone & Mobile Phone is shared when running under the enhanced privacy mode.
If you wanna hide the Relationships option, please set the parameter ShowManagePrivacyRelationships to False by the cmdlet Set-CsClientPolicy.