Here's how we can model this problem and translate it into Gurobi code:

**Decision Variables:**

* `s`: Number of sapphire rings made per day
* `r`: Number of ruby rings made per day

**Objective Function:**

Maximize profit: `500s + 400r`

**Constraints:**

* Sapphire production limit: `s <= 10`
* Ruby production limit: `r <= 15`
* Master jeweler capacity: `s + r <= 15`
* Non-negativity: `s >= 0`, `r >= 0`


```python
import gurobipy as gp

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

# Create decision variables
s = model.addVar(lb=0, ub=gp.GRB.INFINITY, name="sapphire_rings")
r = model.addVar(lb=0, ub=gp.GRB.INFINITY, name="ruby_rings")

# Set objective function
model.setObjective(500*s + 400*r, gp.GRB.MAXIMIZE)

# Add constraints
model.addConstr(s <= 10, "sapphire_limit")
model.addConstr(r <= 15, "ruby_limit")
model.addConstr(s + r <= 15, "jeweler_limit")


# Optimize model
model.optimize()

# Print results
if model.status == gp.GRB.OPTIMAL:
    print(f"Optimal Solution Found:")
    print(f"Number of sapphire rings: {s.x}")
    print(f"Number of ruby rings: {r.x}")
    print(f"Optimal Profit: ${model.objVal}")
elif model.status == gp.GRB.INFEASIBLE:
    print("Model is infeasible.")
else:
    print(f"Optimization ended with status: {model.status}")

```
