Which electrical outlets can I use? In North America, most electrical outlets/receptacles follow standards set by NEMA. For this challenge, you'll be given a few properties of a device you need to plug in, and your program (or function) should return all of the outlets that would be compatible.
For this challenge, an outlet has three properties: voltage, current rating, and grounding.
I/O:
Input will consist of a voltage, current usage, and grounding requirements for some device. The first two are positive integers, and the third can be represented by a boolean (though you are allowed to represent it in any reasonable way).
The output should be a list of outlets which are compatible, following the rules below. Each outlet's name is formatted as NN-nn, with NN and nn being numbers. All outlets should either be returned as strings with this formatting, or arrays of [NN, nn]. You can return the compatible outlets in an array, or separated with spaces/newlines/commas, or via any other reasonable method.
Requirements:
In order for an outlet to be compatible with the inputted device, it must meet three requirements:

The voltage should be within ±10% of the device's voltage
The current rating should be at least as high as the device's current usage
If the device requires a grounded outlet, the outlet must be grounded (otherwise it may or may not be)

Outlets:
These are the outlets your program must be able to handle:
1-15     120    15     
2-15     240    15     
2-20     240    20     
2-30     240    30     
5-15     120    15    G
5-20     120    20    G
5-30     120    30    G
6-15     240    15    G
6-20     240    20    G
6-30     240    30    G
6-50     240    50    G
7-15     277    15    G
7-20     277    20    G
7-30     277    30    G
7-50     277    50    G
10-30    240    30     
10-50    240    50     
11-20    240    20     
11-30    240    30     
11-50    240    50     
12-20    480    20     
14-15    240    15    G
14-30    240    30    G
14-50    240    50    G
14-60    240    60    G

The first column is the name of the outlet, followed by the voltage, then the current rating, then a G if it's grounded. Some of these may be slightly inaccurate.
Test Cases:
Formatted with a voltage, then current usage, then a G for grounded or an x for ungrounded. Some do not have any compatible outlets.
120    16    G    5-20, 5-30
260    5     x    2-15, 2-20, 2-30, 6-15, 6-20, 6-30, 6-50, 7-15, 7-20, 7-30, 7-50, 10-30, 10-50, 11-20, 11-30, 11-50, 14-15, 14-30, 14-50, 14-60
260    5     G    6-15, 6-20, 6-30, 6-50, 7-15, 7-20, 7-30, 7-50, 14-15, 14-30, 14-50, 14-60
260    35    x    6-50, 7-50, 10-50, 11-50, 14-50, 14-60
480    10    x    12-20
108    10    x    1-15, 5-15, 5-20, 5-30
528    20    x    12-20
249    50    G    6-50, 14-50, 14-60
250    50    G    6-50, 7-50, 14-50, 14-60
304    10    x    7-15, 7-20, 7-30, 7-50
480    10    G    
480    25    x
400    10    x
600    10    x
180    10    x
80     10    x    

Other:
This is code-golf, so shortest answer in bytes per language wins!
JavaScript (ES10), 159 bytes
Same logic as my original answer, but with the data stored as a string with several unprintable characters.

(v,r,g)=&gt;[..."&#15;_&#19;&#21;Î&#2;&#4;^&#18;&#20;&#24;~248Õ&#25;S&#21;&#25;c&#158;&#20;&#24;&#26;"].flatMap(x=&gt;(x=x.charCodeAt(),n+=x&gt;&gt;6,V=(120&lt;&lt;x/16%4)%683,R=~(x/2&amp;7)*10%65,-R&lt;r|x&amp;g|(V-v)**2&gt;V*V/100?[]:n+[R]),n=1)

Try it online!

JavaScript (ES10),  200 190 186  181 bytes
Expects (voltage, current, ground), where ground is a Boolean value. Returns an array of strings in NN-nn format.
(v,r,g)=&gt;&quot;0F5F1315CE02045E1214187E323438D519531519639E14181A&quot;.match(/../g).flatMap(x=&gt;(x='0x'+x,n+=x&gt;&gt;6,V=(120&lt;&lt;x/16%4)%683,R=~(x/2&amp;7)*10%65,-R&lt;r|x&amp;g|(V-v)**2&gt;V*V/100?[]:n+[R]),n=1)

Try it online!
How?
Encoding format
Each outlet is encoded as a byte x whose bit-mask is DDVVRRRG with:

DD = difference between the leading outlet ID and the previous leading outlet ID
VV = voltage: [120,240,480,277] mapped to [0,1,2,3]
RRR = current rating: [20,30,50,60,15] mapped to [1,2,4,5,7]
G = flag set if there's no ground

For instance, the outlet 10-30 is encoded as 0xD5 = 0b11010101:
11 01 010 1
 |  |   | |
 |  |   | +--&gt; no ground
 |  |   +----&gt; rating 2 (30A)
 |  +--------&gt; voltage 1 (240V)
 +-----------&gt; previous ID + 3 (7 + 3 = 10)

The whole data is stored as a single string of two-nibble hexadecimal values, which are split with a match().
Decoding
The leading ID is updated with:
n += x &gt;&gt; 6

Because \$277\$ is \$960\bmod683\$, the voltage is decoded with:
V = (120 &lt;&lt; x / 16 % 4) % 683

Because \$15\$ is \$80\bmod65\$, the current rating is decoded with:
R = -~(x / 2 &amp; 7) * 10 % 65