To solve this optimization problem, we first need to identify the decision variables, constraints, and the objective function. The decision variables are the number of sapphire rings (let's denote this as \(S\)) and the number of ruby rings (denoted as \(R\)) that the company should make.

The constraints given in the problem are:
1. The team making sapphire rings can produce at most 10 rings per day: \(S \leq 10\).
2. The team making ruby rings can produce at most 15 rings per day: \(R \leq 15\).
3. The master jeweler can check at most 15 rings of either type per day, which means the total number of rings (sapphire and ruby) should not exceed 15: \(S + R \leq 15\).

The objective function is to maximize profit. Given that the profit per sapphire ring is $500 and the profit per ruby ring is $400, the total profit (\(P\)) can be calculated as:
\[P = 500S + 400R\]

To solve this problem using Gurobi in Python, we will formulate it as a linear programming model.

```python
from gurobipy import *

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

# Define the decision variables
S = m.addVar(vtype=GRB.CONTINUOUS, name="sapphire_rings", lb=0)
R = m.addVar(vtype=GRB.CONTINUOUS, name="ruby_rings", lb=0)

# Define the constraints
m.addConstr(S <= 10, "max_sapphire")
m.addConstr(R <= 15, "max_ruby")
m.addConstr(S + R <= 15, "master_jeweler")

# Define the objective function
m.setObjective(500*S + 400*R, GRB.MAXIMIZE)

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Sapphire rings: {S.x}")
    print(f"Ruby rings: {R.x}")
    print(f"Total profit: ${500*S.x + 400*R.x:.2f}")
else:
    print("No optimal solution found")
```