To solve this problem, we first need to translate the given natural language description into a symbolic representation. This involves defining variables, an objective function, and constraints using mathematical notation.

Let's denote:
- $x_1$ as 'hours worked by Bobby'
- $x_2$ as 'hours worked by Hank'

The objective function to minimize is:
\[7.22x_1^2 + 4.56x_1x_2 + 9.3x_1 + 7.44x_2\]

Given constraints:
1. Bobby's productivity rating is 5: $5x_1$
2. Hank's productivity rating is 14: $14x_2$
3. The total combined productivity rating from hours worked by Bobby and Hank has to be 21 or more: $5x_1 + 14x_2 \geq 21$
4. The total combined paperwork competence rating from hours worked by Bobby and Hank should be 20 or more: $3x_1 + 4x_2 \geq 20$
5. Six times the number of hours worked by Bobby, plus -6 times the number of hours worked by Hank has to be no less than zero: $6x_1 - 6x_2 \geq 0$
6. The total combined productivity rating from hours worked by Bobby squared plus hours worked by Hank squared has to be 114 at maximum: $(5x_1)^2 + (14x_2)^2 \leq 114$
7. The total combined paperwork competence rating from hours worked by Bobby plus hours worked by Hank should be less than or equal to 49: $3x_1 + 4x_2 \leq 49$

Now, let's represent this problem symbolically and then provide the Gurobi code for it.

```json
{
    'sym_variables': [('x1', 'hours worked by Bobby'), ('x2', 'hours worked by Hank')],
    'objective_function': '7.22*x1**2 + 4.56*x1*x2 + 9.3*x1 + 7.44*x2',
    'constraints': [
        '5*x1 + 14*x2 >= 21',
        '3*x1 + 4*x2 >= 20',
        '6*x1 - 6*x2 >= 0',
        '(5*x1)**2 + (14*x2)**2 <= 114',
        '3*x1 + 4*x2 <= 49'
    ]
}
```

Here is the Gurobi code to solve this optimization problem:

```python
from gurobipy import *

# Create a new model
m = Model("Optimization_Problem")

# Define variables
x1 = m.addVar(vtype=GRB.CONTINUOUS, name="hours_worked_by_Bobby")
x2 = m.addVar(vtype=GRB.INTEGER, name="hours_worked_by_Hank")

# Set the objective function
m.setObjective(7.22*x1**2 + 4.56*x1*x2 + 9.3*x1 + 7.44*x2, GRB.MINIMIZE)

# Add constraints
m.addConstr(5*x1 + 14*x2 >= 21, name="productivity_rating")
m.addConstr(3*x1 + 4*x2 >= 20, name="paperwork_competence_rating_lower")
m.addConstr(6*x1 - 6*x2 >= 0, name="hours_worked_difference")
m.addConstr((5*x1)**2 + (14*x2)**2 <= 114, name="productivity_squared")
m.addConstr(3*x1 + 4*x2 <= 49, name="paperwork_competence_rating_upper")

# Optimize the model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found.")
    print("Hours worked by Bobby:", x1.x)
    print("Hours worked by Hank:", x2.x)
else:
    print("No optimal solution found.")

```