## Step 1: Define the symbolic variables
Let's define the symbolic variables for the problem:
- $x_1$ represents the number of sofas bought and sold.
- $x_2$ represents the number of beds bought and sold.

## Step 2: Formulate the objective function
The profit per sofa sold is $100, and the profit per bed sold is $200. The objective is to maximize profit, so the objective function is:
\[ \text{Maximize:} \quad 100x_1 + 200x_2 \]

## 3: Define the constraints
1. **Space constraint:** Each sofa takes 8 sq ft of space, and each bed takes 12 sq ft of space. The outlet has 500 sq ft of space available.
\[ 8x_1 + 12x_2 \leq 500 \]

2. **Budget constraint:** Buying a sofa costs $200, and buying a bed costs $300. The outlet has a budget of $12,500.
\[ 200x_1 + 300x_2 \leq 12500 \]

3. **Sofa percentage constraint:** At least 30% of items in stock have to be sofas.
\[ x_1 \geq 0.3(x_1 + x_2) \]
\[ 0.7x_1 \geq 0.3x_2 \]
\[ 0.7x_1 - 0.3x_2 \geq 0 \]

4. **Non-negativity constraint:** The number of sofas and beds cannot be negative.
\[ x_1 \geq 0, x_2 \geq 0 \]

## 4: Symbolic representation of the problem
```json
{
    'sym_variables': [('x1', 'sofas'), ('x2', 'beds')],
    'objective_function': '100*x1 + 200*x2',
    'constraints': [
        '8*x1 + 12*x2 <= 500',
        '200*x1 + 300*x2 <= 12500',
        '0.7*x1 - 0.3*x2 >= 0',
        'x1 >= 0',
        'x2 >= 0'
    ]
}
```

## 5: Gurobi code
```python
import gurobipy as gp

# Create a new model
m = gp.Model("Sofa_Bed_Optimization")

# Define the variables
x1 = m.addVar(name="sofas", vtype=gp.GRB.INTEGER, lb=0)
x2 = m.addVar(name="beds", vtype=gp.GRB.INTEGER, lb=0)

# Objective function: Maximize profit
m.setObjective(100*x1 + 200*x2, gp.GRB.MAXIMIZE)

# Add constraints
m.addConstr(8*x1 + 12*x2 <= 500, name="space_constraint")
m.addConstr(200*x1 + 300*x2 <= 12500, name="budget_constraint")
m.addConstr(0.7*x1 - 0.3*x2 >= 0, name="sofa_percentage_constraint")

# Solve the model
m.optimize()

# Print the results
if m.status == gp.GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Number of sofas: {x1.varValue}")
    print(f"Number of beds: {x2.varValue}")
    print(f"Max profit: {m.objVal}")
else:
    print("No optimal solution found.")
```