{
  "generatedAt": "2026-07-27T21:04:03.907Z",
  "repo": "platform-v3",
  "branch": "07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html",
  "commit": "1d9fb9659a",
  "ghBase": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html",
  "links": {
    "domainModel": "../domain-model/",
    "inngest": "../inngest/"
  },
  "totals": {
    "procedures": 1427,
    "endpoints": 40,
    "byOrigin": {
      "assignment-service": 16,
      "auth-service": 4,
      "content-service": 63,
      "email-service": 48,
      "identity-service": 133,
      "ledger-service": 11,
      "matter-service": 251,
      "messaging-service": 15,
      "payment-service": 11,
      "product-service": 5,
      "search-service": 2,
      "telephony-service": 36,
      "transaction-service": 46,
      "work-service": 48,
      "lawrence-api": 72,
      "lead-api": 74,
      "platform-api": 592
    },
    "bySurfaceKind": {
      "internal": 689,
      "external": 738
    },
    "byProtocol": {
      "trpc": 1408,
      "orpc": 19
    },
    "byScope": {
      "internal": 585,
      "client": 46,
      "lawyer": 511,
      "admin": 244,
      "public": 35,
      "unknown": 1,
      "outlook": 5
    },
    "byKind": {
      "mutation": 771,
      "query": 637,
      "handler": 19
    },
    "byDomain": {
      "deal": 113,
      "people": 265,
      "content": 87,
      "email": 96,
      "money": 114,
      "matters": 485,
      "chat": 30,
      "—": 34,
      "voice": 57,
      "ai": 72,
      "sales": 74
    },
    "reads": 752,
    "writes": 675,
    "discrepancies": 60,
    "writesDirect": 282,
    "publishesFramework": 31,
    "triggersInngest": 144,
    "dead": 139,
    "frontendOnly": 400,
    "internalOnly": 471,
    "usageUnknown": 0,
    "multiHop": 189,
    "maxHopDepth": 3,
    "interpreted": 1427
  },
  "drift": {
    "proceduresCommit": "1d9fb9659a",
    "domainModelCommit": "fe921d074c9548407bb400cc403231919041a277",
    "inngestGeneratedAt": "2026-07-27T08:52:11.647Z",
    "interpretationVersion": 1,
    "interpretationBasedOnCommit": "1d9fb9659a",
    "needsInterpretation": {
      "procedures": [],
      "endpoints": []
    },
    "uninterpretedCount": 0,
    "domainModelMissing": false,
    "inngestMissing": false,
    "canJudgeUsage": true
  },
  "surfaces": [
    {
      "api": "assignment-service",
      "surface": "assignmentRouter",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "routerFile": "services/assignment-service/src/router.ts"
    },
    {
      "api": "auth-service",
      "surface": "createAuthRouter(unconfiguredIdentityDirectory)",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "routerFile": "services/auth-service/server.ts"
    },
    {
      "api": "content-service",
      "surface": "contentRouter",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "routerFile": "services/content-service/src/router.ts"
    },
    {
      "api": "email-service",
      "surface": "emailRouter",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "routerFile": "services/email-service/src/router.ts"
    },
    {
      "api": "identity-service",
      "surface": "identityRouter",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "routerFile": "services/identity-service/src/router.ts"
    },
    {
      "api": "identity-service",
      "surface": "createAuthRouter(identityServiceDirectory)",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "mounts": [
        "/auth/"
      ],
      "callers": [
        "service-to-service"
      ],
      "routerFile": "services/identity-service/server.ts"
    },
    {
      "api": "incentive-service",
      "surface": "incentiveTRPCRouter",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "routerFile": "services/incentive-service/src/router.ts"
    },
    {
      "api": "ledger-service",
      "surface": "ledgerRouter",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "routerFile": "services/ledger-service/src/router.ts"
    },
    {
      "api": "matter-service",
      "surface": "matterRouter",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "routerFile": "services/matter-service/src/router.ts"
    },
    {
      "api": "messaging-service",
      "surface": "messagingRouter",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "routerFile": "services/messaging-service/src/router.ts"
    },
    {
      "api": "payment-service",
      "surface": "paymentRouter",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "routerFile": "services/payment-service/src/router.ts"
    },
    {
      "api": "product-service",
      "surface": "productRouter",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "routerFile": "services/product-service/src/router.ts"
    },
    {
      "api": "search-service",
      "surface": "searchRouter",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "routerFile": "services/search-service/src/router.ts"
    },
    {
      "api": "telephony-service",
      "surface": "telephonyRouter",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "routerFile": "services/telephony-service/src/router.ts"
    },
    {
      "api": "transaction-service",
      "surface": "transactionRouter",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "routerFile": "services/transaction-service/src/router.ts"
    },
    {
      "api": "work-service",
      "surface": "workRouter",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "routerFile": "services/work-service/src/router.ts"
    },
    {
      "api": "lawrence-api",
      "surface": "lawrenceApiTRPCRouter",
      "surfaceKind": "external",
      "protocol": "trpc",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "routerFile": "apis/lawrence-api/src/router.ts"
    },
    {
      "api": "lead-api",
      "surface": "leadApiRouter",
      "surfaceKind": "external",
      "protocol": "trpc",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "routerFile": "apis/lead-api/src/router.ts"
    },
    {
      "api": "lead-api",
      "surface": "leadApiOrcpRouter",
      "surfaceKind": "external",
      "protocol": "orpc",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "routerFile": "apis/lead-api/src/router.ts"
    },
    {
      "api": "platform-api",
      "surface": "platformApiRouter",
      "surfaceKind": "external",
      "protocol": "trpc",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "routerFile": "apis/platform-api/router.ts"
    },
    {
      "api": "platform-api",
      "surface": "platformApiAdminRouter",
      "surfaceKind": "external",
      "protocol": "trpc",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "routerFile": "apis/platform-api/router.ts"
    },
    {
      "api": "platform-api",
      "surface": "platformApiClientRouter",
      "surfaceKind": "external",
      "protocol": "trpc",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "routerFile": "apis/platform-api/router.ts"
    }
  ],
  "domains": [
    {
      "id": "people",
      "name": "People & firms"
    },
    {
      "id": "matters",
      "name": "Matters: the legal case"
    },
    {
      "id": "content",
      "name": "Documents & content"
    },
    {
      "id": "email",
      "name": "Email"
    },
    {
      "id": "chat",
      "name": "Chat"
    },
    {
      "id": "voice",
      "name": "Voice"
    },
    {
      "id": "post",
      "name": "Physical post"
    },
    {
      "id": "sales",
      "name": "Sales funnel"
    },
    {
      "id": "deal",
      "name": "The deal: quotes, fee agreements, assignment"
    },
    {
      "id": "money",
      "name": "Money: payments, reconciliation, ledger"
    },
    {
      "id": "ai",
      "name": "AI: Lawrence and agents"
    },
    {
      "id": "loyalty",
      "name": "Loyalty points (legacy)"
    }
  ],
  "serviceDomains": {
    "identity-service": "people",
    "messaging-service": "chat",
    "content-service": "content",
    "work-service": "deal",
    "transaction-service": "money",
    "assignment-service": "deal",
    "matter-service": "matters",
    "email-service": "email",
    "ledger-service": "money",
    "auth-service": "people",
    "payment-service": "money",
    "telephony-service": "voice"
  },
  "procedures": [
    {
      "id": "assignment-service:createAssignments",
      "api": "assignment-service",
      "origin": "assignment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "assignmentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "createAssignments",
      "module": "createAssignments",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "createAssignmentsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/assignment-service/src/assignment/procedures/createAssignments.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/createAssignments.mutation.ts#L8"
      },
      "router": {
        "file": "services/assignment-service/src/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/router.ts#L18"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "15c6b9",
      "interpretation": {
        "sig": "15c6b9",
        "summary": "Assigns a lawyer to one or more fee agreements: for each fee agreement, reuses an existing `ACCEPTED` assignment for that lawyer/firm if one exists, otherwise marks any other `ACCEPTED` assignments on it `REASSIGNED` and creates a new assignment with status `ACCEPTED`.",
        "models": [
          {
            "model": "Assignment",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "assignment-service:getAssignment",
      "api": "assignment-service",
      "origin": "assignment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "assignmentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "getAssignment",
      "module": "getAssignment",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "getAssignmentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/assignment-service/src/assignment/procedures/getAssignment.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/getAssignment.query.ts#L5"
      },
      "router": {
        "file": "services/assignment-service/src/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/router.ts#L19"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9ad0b1af",
      "interpretation": {
        "sig": "9ad0b1af",
        "summary": "Looks up the most recent `Assignment` for a given `feeAgreementId` or `matterId`, throwing `NOT_FOUND` if none exists. Read-only lookup used by other services, no write.",
        "models": [
          {
            "model": "Assignment",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "assignment-service:listAssignableLawyers",
      "api": "assignment-service",
      "origin": "assignment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "assignmentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "listAssignableLawyers",
      "module": "listAssignableLawyers",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "listAssignableLawyersInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/assignment-service/src/firmEmployeeToProduct/procedures/listAssignableLawyers.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/firmEmployeeToProduct/procedures/listAssignableLawyers.query.ts#L6"
      },
      "router": {
        "file": "services/assignment-service/src/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/router.ts#L20"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e8059248",
      "interpretation": {
        "sig": "e8059248",
        "summary": "Looks up firm employees eligible for a jurisdiction (and optional firm and legal product list), keeping only lawyers already linked to every requested legal product, and returns them in random order so no one lawyer is always picked first. Read-only: it queries `firmEmployeeToProduct` where `eligiblityStatus` is `AVAILABLE` and shapes the results, it does not assign anyone.",
        "models": [
          {
            "model": "firmEmployeeToProduct",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "assignment-service:isLawyerAssignable",
      "api": "assignment-service",
      "origin": "assignment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "assignmentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "isLawyerAssignable",
      "module": "isLawyerAssignable",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "isLawyerAssignableInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/assignment-service/src/firmEmployeeToProduct/procedures/isLawyerAssignable.query.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/firmEmployeeToProduct/procedures/isLawyerAssignable.query.ts#L12"
      },
      "router": {
        "file": "services/assignment-service/src/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/router.ts#L21"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e1ff1bf2",
      "interpretation": {
        "sig": "e1ff1bf2",
        "summary": "Checks whether a given lawyer (`identityId`) is currently assignable to a set of legal products in a jurisdiction (optionally scoped to a firm), by pulling the pool of `AVAILABLE` firm employees who cover all the requested products and testing membership. Read-only: no data changes, just a yes/no answer used by other services before making an assignment.",
        "models": [
          {
            "model": "FirmEmployeeToProduct",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "assignment-service:createReassignment",
      "api": "assignment-service",
      "origin": "assignment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "assignmentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "createReassignment",
      "module": "createReassignment",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "createReassignmentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/assignment-service/src/assignment/procedures/createReassignment.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/createReassignment.mutation.ts#L5"
      },
      "router": {
        "file": "services/assignment-service/src/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/router.ts#L22"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b11690e7",
      "interpretation": {
        "sig": "b11690e7",
        "summary": "Reassigns a matter's incomplete fee agreements from one lawyer to another: marks the existing `ACCEPTED` assignments `REASSIGNED` and creates new `ACCEPTED` assignments for the new lawyer (person and firm) on those fee agreements.",
        "models": [
          {
            "model": "Assignment",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "assignment-service:listAssignments",
      "api": "assignment-service",
      "origin": "assignment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "assignmentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "listAssignments",
      "module": "listAssignments",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "listAssignmentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/assignment-service/src/assignment/procedures/listAssignments.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/listAssignments.query.ts#L5"
      },
      "router": {
        "file": "services/assignment-service/src/router.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/router.ts#L23"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "28bc58f5",
      "interpretation": {
        "sig": "28bc58f5",
        "summary": "Looks up `Assignment` records, optionally filtered by matter, a list of fee agreement IDs, or assignment status, newest first. Read-only: nothing is created or changed.",
        "models": [
          {
            "model": "Assignment",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "assignment-service:feePlan.upsert",
      "api": "assignment-service",
      "origin": "assignment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "assignmentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "feePlan.upsert",
      "module": "feePlan",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "upsertFeePlanInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/assignment-service/src/feePlan/procedures/upsertFeePlan.mutation.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/feePlan/procedures/upsertFeePlan.mutation.ts#L13"
      },
      "router": {
        "file": "services/assignment-service/src/feePlan/router.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/feePlan/router.ts#L6"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e2187d89",
      "interpretation": {
        "sig": "e2187d89",
        "summary": "Creates a new fee plan for a firm and marks it `ACTIVE`, first setting any currently `ACTIVE` fee plan for that firm to `INACTIVE` with an `endedAt` timestamp. Both steps run in one Prisma transaction so a firm never has more than one active fee plan.",
        "models": [
          {
            "model": "FeePlan",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "assignment-service:feePlan.list",
      "api": "assignment-service",
      "origin": "assignment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "assignmentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "feePlan.list",
      "module": "feePlan",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "listFeePlansInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/assignment-service/src/feePlan/procedures/listFeePlans.query.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/feePlan/procedures/listFeePlans.query.ts#L14"
      },
      "router": {
        "file": "services/assignment-service/src/feePlan/router.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/feePlan/router.ts#L7"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "40e4cb6",
      "interpretation": {
        "sig": "40e4cb6",
        "summary": "Lists fee plans, optionally filtered by `firmId`, a set of `firmIds`, or status, ordered newest first. Read-only.",
        "models": [
          {
            "model": "FeePlan",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "assignment-service:feePlan.getCurrent",
      "api": "assignment-service",
      "origin": "assignment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "assignmentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "feePlan.getCurrent",
      "module": "feePlan",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetCurrentFeePlanQueryInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/assignment-service/src/feePlan/procedures/getCurrentFeePlan.query.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/feePlan/procedures/getCurrentFeePlan.query.ts#L13"
      },
      "router": {
        "file": "services/assignment-service/src/feePlan/router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/feePlan/router.ts#L8"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b87dc179",
      "interpretation": {
        "sig": "b87dc179",
        "summary": "Looks up the single `ACTIVE` fee plan for a given firm (most recently created if somehow more than one), returning null and logging a warning if none exists.",
        "models": [
          {
            "model": "FeePlan",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "assignment-service:updateAssignments",
      "api": "assignment-service",
      "origin": "assignment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "assignmentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "updateAssignments",
      "module": "updateAssignments",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateAssignmentsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/assignment-service/src/assignment/procedures/updateAssignments.mutation.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/updateAssignments.mutation.ts#L21"
      },
      "router": {
        "file": "services/assignment-service/src/router.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/router.ts#L25"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b06feb",
      "interpretation": {
        "sig": "b06feb",
        "summary": "Bulk-updates `Assignment` rows matched by fee agreement IDs (optionally also person and `acceptedAt`), setting `matterId`, `acceptedAt`, and `assignmentStatus` directly in the database.",
        "models": [
          {
            "model": "Assignment",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "assignment-service:cancelAssignments",
      "api": "assignment-service",
      "origin": "assignment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "assignmentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "cancelAssignments",
      "module": "cancelAssignments",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/assignment-service/src/assignment/procedures/cancelAssignments.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/cancelAssignments.mutation.ts#L5"
      },
      "router": {
        "file": "services/assignment-service/src/router.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/router.ts#L26"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "8746c745",
      "interpretation": {
        "sig": "8746c745",
        "summary": "Takes a list of assignment IDs or fee agreement IDs and bulk-updates matching `Assignment` rows (skipping any already `CANCELLED`, `REJECTED`, or `REASSIGNED`) to `assignmentStatus` `CANCELLED`. Requires at least one ID list; nothing in the codebase currently calls it, so it looks unused.",
        "models": [
          {
            "model": "Assignment",
            "service": "assignment-service"
          }
        ],
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "assignment-service:listFirmMemberProducts",
      "api": "assignment-service",
      "origin": "assignment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "assignmentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "listFirmMemberProducts",
      "module": "listFirmMemberProducts",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "listFirmMemberProductsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/assignment-service/src/firmEmployeeToProduct/procedures/listFirmMemberProducts.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/firmEmployeeToProduct/procedures/listFirmMemberProducts.query.ts#L5"
      },
      "router": {
        "file": "services/assignment-service/src/router.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/router.ts#L27"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "68c07598",
      "interpretation": {
        "sig": "68c07598",
        "summary": "Looks up which products a firm member (one or several identity IDs, scoped to a firm) is eligible for, returning `FirmEmployeeToProduct` rows with eligibility status `AVAILABLE`. Read-only, used to check assignment eligibility rather than to change anything.",
        "models": [
          {
            "model": "FirmEmployeeToProduct",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "assignment-service:updateFirmMemberProducts",
      "api": "assignment-service",
      "origin": "assignment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "assignmentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "updateFirmMemberProducts",
      "module": "updateFirmMemberProducts",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "updateFirmMemberProductsSchema",
      "hasOutput": false,
      "location": {
        "file": "services/assignment-service/src/firmEmployeeToProduct/procedures/updateFirmMemberProducts.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/firmEmployeeToProduct/procedures/updateFirmMemberProducts.mutation.ts#L5"
      },
      "router": {
        "file": "services/assignment-service/src/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/router.ts#L28"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6fbba014",
      "interpretation": {
        "sig": "6fbba014",
        "summary": "Reconciles which legal products and jurisdictions a firm member is eligible to work on: takes the target list, revokes any currently `AVAILABLE` `FirmEmployeeToProduct` rows not in it, and creates new `AVAILABLE` rows for any missing ones, inside one transaction guarded by a Postgres advisory lock per identity/firm pair.",
        "models": [
          {
            "model": "FirmEmployeeToProduct",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "assignment-service:deleteFirmEmployeeToProducts",
      "api": "assignment-service",
      "origin": "assignment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "assignmentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "deleteFirmEmployeeToProducts",
      "module": "deleteFirmEmployeeToProducts",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/assignment-service/src/firmEmployeeToProduct/procedures/deleteFirmEmployeeToProducts.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/firmEmployeeToProduct/procedures/deleteFirmEmployeeToProducts.mutation.ts#L5"
      },
      "router": {
        "file": "services/assignment-service/src/router.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/router.ts#L29"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b1aa12ce",
      "interpretation": {
        "sig": "b1aa12ce",
        "summary": "Removes a firm employee's product assignment records by deleting `FirmEmployeeToProduct` rows for the given `identityId` (optionally scoped to a `firmId`). Used to unassign a person from the products/deals they were handling for a firm.",
        "models": [
          {
            "model": "FirmEmployeeToProduct",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "assignment-service:revokeEmployeeProductsByJurisdiction",
      "api": "assignment-service",
      "origin": "assignment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "assignmentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "revokeEmployeeProductsByJurisdiction",
      "module": "revokeEmployeeProductsByJurisdiction",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/assignment-service/src/firmEmployeeToProduct/procedures/revokeEmployeeProductsByJurisdiction.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/firmEmployeeToProduct/procedures/revokeEmployeeProductsByJurisdiction.mutation.ts#L5"
      },
      "router": {
        "file": "services/assignment-service/src/router.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/router.ts#L30"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "fd3b39d6",
      "interpretation": {
        "sig": "fd3b39d6",
        "summary": "Revokes a firm employee's product assignments across a given set of jurisdictions, setting `FirmEmployeeToProduct.eligiblityStatus` to `REVOKED` for every matching record. Called internally by other services (no app calls it directly).",
        "models": [
          {
            "model": "FirmEmployeeToProduct",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "assignment-service:deleteAssignments",
      "api": "assignment-service",
      "origin": "assignment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "assignmentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "deleteAssignments",
      "module": "deleteAssignments",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "DeleteAssignmentsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/assignment-service/src/assignment/procedures/deleteAssignments.mutation.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/deleteAssignments.mutation.ts#L24"
      },
      "router": {
        "file": "services/assignment-service/src/router.ts",
        "line": 32,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/router.ts#L32"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e4ece4c3",
      "interpretation": {
        "sig": "e4ece4c3",
        "summary": "Deletes `Assignment` rows by `assignmentIds` or `feeAgreementIds` (at least one required), used by other internal services to bulk-remove assignments tied to a fee agreement or a specific ID list.",
        "models": [
          {
            "model": "Assignment",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "auth-service:apiKeys.create",
      "api": "auth-service",
      "origin": "auth-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "createAuthRouter(unconfiguredIdentityDirectory)",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "apiKeys.create",
      "module": "apiKeys",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "protectedPersonProcedure",
        "base": "protectedPersonProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateApiKeyInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/auth-service/src/api-keys/api-keys.router.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/auth-service/src/api-keys/api-keys.router.ts#L37"
      },
      "router": {
        "file": "services/auth-service/src/api-keys/api-keys.router.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/auth-service/src/api-keys/api-keys.router.ts#L37"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "993b4920",
      "interpretation": {
        "sig": "993b4920",
        "summary": "Lets a logged-in person mint a new API key for their firm through BetterAuth, after checking they belong to that firm and creating the underlying BetterAuth user/organization rows if needed. It's labeled a mutation and does create the key via BetterAuth's own API, but the extractor's read-only classification reflects that this router has no direct Prisma write of its own.",
        "flags": [
          "mechanism-is-via-betterauth-not-direct-prisma"
        ],
        "models": [
          {
            "model": "BetterAuth ApiKey",
            "service": "auth-service"
          }
        ]
      }
    },
    {
      "id": "auth-service:apiKeys.list",
      "api": "auth-service",
      "origin": "auth-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "createAuthRouter(unconfiguredIdentityDirectory)",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "apiKeys.list",
      "module": "apiKeys",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "protectedPersonProcedure",
        "base": "protectedPersonProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListApiKeysInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/auth-service/src/api-keys/api-keys.router.ts",
        "line": 51,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/auth-service/src/api-keys/api-keys.router.ts#L51"
      },
      "router": {
        "file": "services/auth-service/src/api-keys/api-keys.router.ts",
        "line": 51,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/auth-service/src/api-keys/api-keys.router.ts#L51"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2cc2fd7d",
      "interpretation": {
        "sig": "2cc2fd7d",
        "summary": "Returns the API keys belonging to the caller's firm (name, prefix, expiry, permission) after confirming firm membership, reading straight from BetterAuth's key table. A true read: no state changes.",
        "models": [
          {
            "model": "BetterAuth ApiKey",
            "service": "auth-service"
          }
        ]
      }
    },
    {
      "id": "auth-service:apiKeys.revoke",
      "api": "auth-service",
      "origin": "auth-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "createAuthRouter(unconfiguredIdentityDirectory)",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "apiKeys.revoke",
      "module": "apiKeys",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "protectedPersonProcedure",
        "base": "protectedPersonProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RevokeApiKeyInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/auth-service/src/api-keys/api-keys.router.ts",
        "line": 65,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/auth-service/src/api-keys/api-keys.router.ts#L65"
      },
      "router": {
        "file": "services/auth-service/src/api-keys/api-keys.router.ts",
        "line": 65,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/auth-service/src/api-keys/api-keys.router.ts#L65"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4557772e",
      "interpretation": {
        "sig": "4557772e",
        "summary": "Disables one of the firm's API keys after verifying the caller belongs to that firm and the key actually belongs to it (a cross-firm probe gets the same `NOT_FOUND` as a missing key). Disabling happens through BetterAuth's `updateApiKey` call rather than a direct database write.",
        "flags": [
          "mechanism-is-via-betterauth-not-direct-prisma"
        ],
        "models": [
          {
            "model": "BetterAuth ApiKey",
            "service": "auth-service"
          }
        ]
      }
    },
    {
      "id": "auth-service:apiKeys.verify",
      "api": "auth-service",
      "origin": "auth-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "createAuthRouter(unconfiguredIdentityDirectory)",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "apiKeys.verify",
      "module": "apiKeys",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "services/auth-service/src/api-keys/api-keys.router.ts",
        "line": 79,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/auth-service/src/api-keys/api-keys.router.ts#L79"
      },
      "router": {
        "file": "services/auth-service/src/api-keys/api-keys.router.ts",
        "line": 79,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/auth-service/src/api-keys/api-keys.router.ts#L79"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "baf26c5b",
      "interpretation": {
        "sig": "baf26c5b",
        "summary": "Checks whether a raw API key string is valid and, if so, returns its firm ID and permission level; used for service-to-service auth on a pre-auth token, not by end users. Nothing in `auth-service` or the client apps currently calls it, so it looks unused despite being wired up.",
        "flags": [
          "looks-unused"
        ],
        "models": [
          {
            "model": "BetterAuth ApiKey",
            "service": "auth-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.createContentEmpty",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.createContentEmpty",
      "module": "content",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedScopeProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateContentEmptyInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/createContentEmpty.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentEmpty.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L35"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "8d5f5d5c",
      "interpretation": {
        "sig": "8d5f5d5c",
        "summary": "Creates a new blank `Content` record (empty Yjs document) and its initial snapshot in one transaction, scoped to the caller's entity.",
        "models": [
          {
            "model": "Content",
            "service": "content-service"
          },
          {
            "model": "ContentSnapshot",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.createContentFromPlainText",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.createContentFromPlainText",
      "module": "content",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedScopeProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateContentFromPlainTextInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/createContentFromPlainText.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentFromPlainText.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 36,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L36"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e8b7ac6a",
      "interpretation": {
        "sig": "e8b7ac6a",
        "summary": "Converts plain text into ProseMirror JSON and delegates to `createContentFromProsemirrorJson`, which does the actual `Content` and snapshot write. This procedure itself only converts the text; it does not touch the database directly.",
        "flags": [
          "read-that-writes-via-delegate"
        ]
      }
    },
    {
      "id": "content-service:content.createContentFromMarkdown",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.createContentFromMarkdown",
      "module": "content",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedScopeProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateContentFromMarkdownInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/createContentFromMarkdown.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentFromMarkdown.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L37"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "33afe970",
      "interpretation": {
        "sig": "33afe970",
        "summary": "Converts markdown into ProseMirror JSON (including list numbering) and delegates to `createContentFromProsemirrorJson` to create the `Content` record and snapshot. The conversion step here does no direct database write.",
        "flags": [
          "read-that-writes-via-delegate"
        ]
      }
    },
    {
      "id": "content-service:content.createContentFromHtml",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.createContentFromHtml",
      "module": "content",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedScopeProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateContentFromHtmlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/createContentFromHtml.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentFromHtml.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 38,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L38"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "c6de9f44",
      "interpretation": {
        "sig": "c6de9f44",
        "summary": "Converts HTML (including list numbering and table formatting) into ProseMirror JSON and delegates to `createContentFromProsemirrorJson` to create the `Content` record and snapshot. This step itself performs no direct write.",
        "flags": [
          "read-that-writes-via-delegate"
        ]
      }
    },
    {
      "id": "content-service:content.createContentFromProsemirrorJson",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.createContentFromProsemirrorJson",
      "module": "content",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedScopeProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateContentFromProsemirrorJsonInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/createContentFromProsemirrorJson.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentFromProsemirrorJson.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 39,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L39"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f9ba809c",
      "interpretation": {
        "sig": "f9ba809c",
        "summary": "Validates and stamps caller-supplied ProseMirror JSON, converts it to a Yjs snapshot, then creates a new `Content` record with its `ContentSnapshot` and (if requested) an initial `ContentVersion`, all in one Prisma transaction.",
        "models": [
          {
            "model": "Content",
            "service": "content-service"
          },
          {
            "model": "ContentSnapshot",
            "service": "content-service"
          },
          {
            "model": "ContentVersion",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.createContentFromTemplate",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.createContentFromTemplate",
      "module": "content",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedScopeProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateContentFromTemplateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/createContentFromTemplate.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentFromTemplate.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 40,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L40"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e21eae0",
      "interpretation": {
        "sig": "e21eae0",
        "summary": "Loads a published `Template`'s snapshot, checks the caller has scope access to it, sanitizes it as a precedent, and creates a new `Content` record plus snapshot and version from that data.",
        "models": [
          {
            "model": "Content",
            "service": "content-service"
          },
          {
            "model": "ContentSnapshot",
            "service": "content-service"
          },
          {
            "model": "ContentVersion",
            "service": "content-service"
          },
          {
            "model": "Template",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.createContentFromExistingContent",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.createContentFromExistingContent",
      "module": "content",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedScopeProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateContentFromExistingContentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/createContentFromExistingContent.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentFromExistingContent.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 41,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L41"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "91ceca34",
      "interpretation": {
        "sig": "91ceca34",
        "summary": "Copies another piece of `Content` (a specific version's snapshot, or its current state if no version is given) into a brand-new `Content` record with its own snapshot and version, after checking the caller has scope access to the source.",
        "models": [
          {
            "model": "Content",
            "service": "content-service"
          },
          {
            "model": "ContentSnapshot",
            "service": "content-service"
          },
          {
            "model": "ContentVersion",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.createContentFromYjsSnapshot",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.createContentFromYjsSnapshot",
      "module": "content",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedScopeProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateContentFromYjsSnapshotInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/createContentFromYjsSnapshot.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentFromYjsSnapshot.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 42,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L42"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "4608ff84",
      "interpretation": {
        "sig": "4608ff84",
        "summary": "Decodes a base64 Yjs snapshot supplied by the caller and creates a new `Content` record, `ContentSnapshot`, and initial `ContentVersion` from it directly. Nothing in the codebase currently calls this procedure.",
        "models": [
          {
            "model": "Content",
            "service": "content-service"
          },
          {
            "model": "ContentSnapshot",
            "service": "content-service"
          },
          {
            "model": "ContentVersion",
            "service": "content-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "content-service:content.applyContentYjsUpdate",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.applyContentYjsUpdate",
      "module": "content",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedContentProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ApplyContentYjsUpdateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/applyContentYjsUpdate.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/applyContentYjsUpdate.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 43,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L43"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [
        "content-service/content.updatePersisted"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6382677b",
      "interpretation": {
        "sig": "6382677b",
        "summary": "Appends a Yjs update to a `Content` document as a new `ContentUpdate` row, but only if the caller's `expectedEpoch` still matches the content's current epoch (otherwise it returns a stale status without writing). On success it fires the `content-service/content.updatePersisted` Inngest event in the background.",
        "models": [
          {
            "model": "Content",
            "service": "content-service"
          },
          {
            "model": "ContentUpdate",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.deleteContent",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.deleteContent",
      "module": "content",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedContentProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/deleteContent.mutation.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/deleteContent.mutation.ts#L4"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 44,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L44"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ecffc492",
      "interpretation": {
        "sig": "ecffc492",
        "summary": "Permanently deletes a `Content` record by id from the database.",
        "models": [
          {
            "model": "Content",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.getContent",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.getContent",
      "module": "content",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedContentProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetContentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/getContent.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContent.query.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 45,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L45"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "d3845696",
      "interpretation": {
        "sig": "d3845696",
        "summary": "Reads back a `Content` record's basic fields by id. Nothing in the codebase currently calls this query.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "content-service:content.getContentYjs",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.getContentYjs",
      "module": "content",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedContentProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetContentYjsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/getContentYjs.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentYjs.query.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 46,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L46"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2faef66a",
      "interpretation": {
        "sig": "2faef66a",
        "summary": "Reads a `Content` record's current state and returns its document as a Yjs-encoded snapshot, falling back to a default empty content shell if none exists.",
        "models": [
          {
            "model": "Content",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.getContentProsemirrorJson",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.getContentProsemirrorJson",
      "module": "content",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedContentProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetContentProsemirrorJsonInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/getContentProsemirrorJson.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentProsemirrorJson.query.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 47,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L47"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ccc9851e",
      "interpretation": {
        "sig": "ccc9851e",
        "summary": "Reads a `Content` record's current state and returns its document converted to ProseMirror JSON, falling back to a default empty shell if none exists.",
        "models": [
          {
            "model": "Content",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.getContentProsemirrorJsonSection",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.getContentProsemirrorJsonSection",
      "module": "content",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedContentProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetContentProsemirrorJsonSectionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/getContentProsemirrorJsonSection.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentProsemirrorJsonSection.query.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 48,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L48"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "fb1ac5ae",
      "interpretation": {
        "sig": "fb1ac5ae",
        "summary": "Reads a `Content` record's current state and returns just one requested section of it as ProseMirror JSON, falling back to a default empty shell if none exists.",
        "models": [
          {
            "model": "Content",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.getContentPlainText",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.getContentPlainText",
      "module": "content",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedContentProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetContentPlainTextInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/getContentPlainText.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentPlainText.query.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 49,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L49"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "272d42a4",
      "interpretation": {
        "sig": "272d42a4",
        "summary": "Reads a `Content` record's current state and returns it converted to plain text, falling back to a default empty shell if none exists.",
        "models": [
          {
            "model": "Content",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.getContentMarkdown",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.getContentMarkdown",
      "module": "content",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedContentProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetContentMarkdownInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/getContentMarkdown.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentMarkdown.query.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 50,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L50"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9c05e17e",
      "interpretation": {
        "sig": "9c05e17e",
        "summary": "Reads a `Content` record's current state and returns it converted to markdown, falling back to a default empty shell if none exists.",
        "models": [
          {
            "model": "Content",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.getContentMarkdownInternal",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.getContentMarkdownInternal",
      "module": "content",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetContentMarkdownInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/getContentMarkdownInternal.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentMarkdownInternal.query.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 51,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L51"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5b4b1c6",
      "interpretation": {
        "sig": "5b4b1c6",
        "summary": "Returns the current content as markdown, decoded from the stored Yjs snapshot. Pre-auth service-to-service call with no content-membership check, used internally rather than by end users.",
        "models": [
          {
            "model": "ContentSnapshot",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.assessMarkdownFidelity",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.assessMarkdownFidelity",
      "module": "content",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "AssessMarkdownFidelityInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/assessMarkdownFidelity.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/assessMarkdownFidelity.query.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 52,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L52"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6034e996",
      "interpretation": {
        "sig": "6034e996",
        "summary": "Round-trips a given markdown string through the ProseMirror/Yjs pipeline and reports whether the text survives storage (`storageFaithful`) and re-export (`projectionFaithful`) intact. A diagnostic check, not a content read or write."
      }
    },
    {
      "id": "content-service:content.getContentMap",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.getContentMap",
      "module": "content",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedContentProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetContentMapInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/getContentMap.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentMap.query.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 53,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L53"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "58d93376",
      "interpretation": {
        "sig": "58d93376",
        "summary": "Returns a paginated outline of a content document's blocks (with numbering and preview text) built from the current snapshot, for callers that need structure and cursors rather than full content.",
        "models": [
          {
            "model": "ContentSnapshot",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.getContentDocx",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.getContentDocx",
      "module": "content",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedContentProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetContentDocxInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/getContentDocx.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentDocx.query.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 54,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L54"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "227984d6",
      "interpretation": {
        "sig": "227984d6",
        "summary": "Builds the content's current state into a DOCX file and returns it base64-encoded.",
        "models": [
          {
            "model": "ContentSnapshot",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.getContentPdf",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.getContentPdf",
      "module": "content",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedContentProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetContentPdfInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/getContentPdf.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentPdf.query.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 55,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L55"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d4bb012e",
      "interpretation": {
        "sig": "d4bb012e",
        "summary": "Builds the content's current state into a DOCX, then converts that to PDF via the preview converter and returns the PDF base64-encoded.",
        "models": [
          {
            "model": "ContentSnapshot",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.createContentVersionFromCurrentState",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.createContentVersionFromCurrentState",
      "module": "content",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedContentProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateContentVersionFromCurrentStateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/createContentVersionFromCurrentState.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentVersionFromCurrentState.mutation.ts#L6"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 56,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L56"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "89b4eab4",
      "interpretation": {
        "sig": "89b4eab4",
        "summary": "Checkpoints the content's live editing state into a new named `ContentVersion` row and bumps the content's epoch. If there is no actual change since the last checkpoint it reuses the existing version instead of creating a duplicate, and silently drops the placeholder version left by content creation when nothing was ever written.",
        "models": [
          {
            "model": "ContentVersion",
            "service": "content-service"
          },
          {
            "model": "ContentSnapshot",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.createContentVersionFromPlainText",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.createContentVersionFromPlainText",
      "module": "content",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedContentProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateContentVersionFromPlainTextInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/createContentVersionFromPlainText.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentVersionFromPlainText.mutation.ts#L6"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 58,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L58"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3cdb154a",
      "interpretation": {
        "sig": "3cdb154a",
        "summary": "Checkpoints the current state, then overwrites the content with a new version built from a plain-text string and marks it the latest snapshot.",
        "models": [
          {
            "model": "ContentVersion",
            "service": "content-service"
          },
          {
            "model": "ContentSnapshot",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.createContentVersionFromMarkdown",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.createContentVersionFromMarkdown",
      "module": "content",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedContentProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateContentVersionFromMarkdownInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/createContentVersionFromMarkdown.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentVersionFromMarkdown.mutation.ts#L6"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 59,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L59"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "11a3c0",
      "interpretation": {
        "sig": "11a3c0",
        "summary": "Checkpoints the current state, then overwrites the content with a new version parsed from a markdown string and marks it the latest snapshot.",
        "models": [
          {
            "model": "ContentVersion",
            "service": "content-service"
          },
          {
            "model": "ContentSnapshot",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.createContentVersionFromHtml",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.createContentVersionFromHtml",
      "module": "content",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedContentProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateContentVersionFromHtmlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/createContentVersionFromHtml.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentVersionFromHtml.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 60,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L60"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6883d3c4",
      "interpretation": {
        "sig": "6883d3c4",
        "summary": "Checkpoints the current state, then overwrites the content with a new version parsed from an HTML string and marks it the latest snapshot.",
        "models": [
          {
            "model": "ContentVersion",
            "service": "content-service"
          },
          {
            "model": "ContentSnapshot",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.createContentVersionFromProsemirrorJson",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.createContentVersionFromProsemirrorJson",
      "module": "content",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedContentProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateContentVersionFromProsemirrorJsonInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/createContentVersionFromProsemirrorJson.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentVersionFromProsemirrorJson.mutation.ts#L6"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 61,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L61"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d5dfaba0",
      "interpretation": {
        "sig": "d5dfaba0",
        "summary": "Checkpoints the current state, then overwrites the content with a new version built from a validated ProseMirror JSON document and marks it the latest snapshot.",
        "models": [
          {
            "model": "ContentVersion",
            "service": "content-service"
          },
          {
            "model": "ContentSnapshot",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.createContentVersionFromYjsSnapshot",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.createContentVersionFromYjsSnapshot",
      "module": "content",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedContentProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateContentVersionFromYjsSnapshotInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/createContentVersionFromYjsSnapshot.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentVersionFromYjsSnapshot.mutation.ts#L6"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 63,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L63"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "140d916c",
      "interpretation": {
        "sig": "140d916c",
        "summary": "Checkpoints the current state, then overwrites the content with a new version restored directly from a raw base64-encoded Yjs snapshot and marks it the latest snapshot.",
        "models": [
          {
            "model": "ContentVersion",
            "service": "content-service"
          },
          {
            "model": "ContentSnapshot",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.createContentVersionFromExistingVersion",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.createContentVersionFromExistingVersion",
      "module": "content",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedContentProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateContentVersionFromExistingVersionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/createContentVersionFromExistingVersion.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentVersionFromExistingVersion.mutation.ts#L6"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 65,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L65"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f74c4172",
      "interpretation": {
        "sig": "f74c4172",
        "summary": "Checkpoints the current state, then overwrites the content with a copy of another existing `ContentVersion`'s snapshot (used to restore an older version), inheriting its content shell unless one is explicitly given.",
        "models": [
          {
            "model": "ContentVersion",
            "service": "content-service"
          },
          {
            "model": "ContentSnapshot",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.createContentVersionFromFile",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.createContentVersionFromFile",
      "module": "content",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedContentProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateContentVersionFromFileInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/createContentVersionFromFile.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentVersionFromFile.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 67,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L67"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "61aa1984",
      "interpretation": {
        "sig": "61aa1984",
        "summary": "Downloads an uploaded DOCX `File`, parses it into ProseMirror JSON, creates a `ContentShell` for it, and writes the parsed document as a new `ContentVersion` on the file's target content. Skips the work and returns null if a shell for that file already exists, so the file-processing lifecycle doesn't build the content twice.",
        "models": [
          {
            "model": "ContentVersion",
            "service": "content-service"
          },
          {
            "model": "ContentShell",
            "service": "content-service"
          },
          {
            "model": "File",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.updateContentVersionInfo",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.updateContentVersionInfo",
      "module": "content",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedContentProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateContentVersionInfoInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/updateContentVersionInfo.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/updateContentVersionInfo.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 68,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L68"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "c883ba24",
      "interpretation": {
        "sig": "c883ba24",
        "summary": "Updates a `ContentVersion`'s label and/or description in place, leaving existing values untouched for any field left unset.",
        "models": [
          {
            "model": "ContentVersion",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.deleteContentVersion",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.deleteContentVersion",
      "module": "content",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedContentProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "DeleteContentVersionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/deleteContentVersion.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/deleteContentVersion.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 69,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L69"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a1205e40",
      "interpretation": {
        "sig": "a1205e40",
        "summary": "Hard-deletes a `ContentVersion` row for the given content.",
        "models": [
          {
            "model": "ContentVersion",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:content.listContentVersions",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "content.listContentVersions",
      "module": "content",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedContentProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListContentVersionsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/content/procedures/listContentVersions.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/listContentVersions.query.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/content/router.ts",
        "line": 70,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/router.ts#L70"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "277743cc",
      "interpretation": {
        "sig": "277743cc",
        "summary": "Lists a content's versions newest-first, each with the identity IDs of contributors to its snapshot. Excludes soft-deleted versions unless `includeDeleted` is set.",
        "models": [
          {
            "model": "ContentVersion",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:template.createTemplate",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "template.createTemplate",
      "module": "template",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedScopeProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateTemplateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/template/procedures/createTemplate.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/createTemplate.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/template/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/router.ts#L24"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "82d24d22",
      "interpretation": {
        "sig": "82d24d22",
        "summary": "Creates a new `Template`: makes an empty `Content` document, an initial `ContentVersion`, and an uploadable file slot for its source, then writes the `Template` row pointing at that content. If the template's scope includes a firm, the creating identity is added as a `PERSON` `TemplateEditor`.",
        "models": [
          {
            "model": "Template",
            "service": "content-service"
          },
          {
            "model": "TemplateEditor",
            "service": "content-service"
          },
          {
            "model": "Content",
            "service": "content-service"
          },
          {
            "model": "ContentVersion",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:template.applyTemplateYjsUpdate",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "template.applyTemplateYjsUpdate",
      "module": "template",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedTemplateProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ApplyTemplateYjsUpdateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/template/procedures/applyTemplateYjsUpdate.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/applyTemplateYjsUpdate.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/template/router.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/router.ts#L25"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [
        "content-service/content.updatePersisted"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "396cf745",
      "interpretation": {
        "sig": "396cf745",
        "summary": "Applies a Yjs CRDT update to a template's underlying content document, merging live editor changes into the `Content` state. Publishes the `content-service/content.updatePersisted` Inngest event once the update lands.",
        "models": [
          {
            "model": "Content",
            "service": "content-service"
          }
        ],
        "flags": [
          "triggers Inngest event on write"
        ]
      }
    },
    {
      "id": "content-service:template.createTemplateVersionFromCurrentState",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "template.createTemplateVersionFromCurrentState",
      "module": "template",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedTemplateProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateTemplateVersionFromCurrentStateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/template/procedures/createTemplateVersionFromCurrentState.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/createTemplateVersionFromCurrentState.mutation.ts#L6"
      },
      "router": {
        "file": "services/content-service/src/domains/template/router.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/router.ts#L26"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b7b4360a",
      "interpretation": {
        "sig": "b7b4360a",
        "summary": "Snapshots a template's current live content into a new named `ContentVersion`, giving editors a checkpoint they can label and return to later.",
        "models": [
          {
            "model": "ContentVersion",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:template.listTemplates",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "template.listTemplates",
      "module": "template",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedScopeProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListTemplatesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/template/procedures/listTemplates.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/listTemplates.query.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/template/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/router.ts#L28"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "618d77c4",
      "interpretation": {
        "sig": "618d77c4",
        "summary": "Lists templates under a given scope prefix (firm or identity), including each template's editors, categories, and how many live documents were created from it.",
        "models": [
          {
            "model": "Template",
            "service": "content-service"
          },
          {
            "model": "TemplateEditor",
            "service": "content-service"
          },
          {
            "model": "TemplateCategory",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:template.getTemplate",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "template.getTemplate",
      "module": "template",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedTemplateProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/template/procedures/getTemplate.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/getTemplate.query.ts#L4"
      },
      "router": {
        "file": "services/content-service/src/domains/template/router.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/router.ts#L29"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "251e2bfc",
      "interpretation": {
        "sig": "251e2bfc",
        "summary": "Fetches a single `Template` by id along with its usage count (how many documents were derived from it). Throws `NOT_FOUND` if the template doesn't exist.",
        "models": [
          {
            "model": "Template",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:template.getTemplateContentYjs",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "template.getTemplateContentYjs",
      "module": "template",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedTemplateProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetTemplateContentYjsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/template/procedures/getTemplateContentYjs.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/getTemplateContentYjs.query.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/template/router.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/router.ts#L30"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ab12595c",
      "interpretation": {
        "sig": "ab12595c",
        "summary": "Returns a template's document as Yjs binary state (optionally diffed against a client's state vector or pinned to a specific content version), for loading the editor or syncing a client.",
        "models": [
          {
            "model": "Content",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:template.listTemplateEditors",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "template.listTemplateEditors",
      "module": "template",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedTemplateProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/template/procedures/listTemplateEditors.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/listTemplateEditors.query.ts#L4"
      },
      "router": {
        "file": "services/content-service/src/domains/template/router.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/router.ts#L31"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4902e208",
      "interpretation": {
        "sig": "4902e208",
        "summary": "Lists the people and teams currently granted editor access on a template.",
        "models": [
          {
            "model": "TemplateEditor",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:template.listTemplateVersions",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "template.listTemplateVersions",
      "module": "template",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedTemplateProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListTemplateVersionsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/template/procedures/listTemplateVersions.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/listTemplateVersions.query.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/template/router.ts",
        "line": 32,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/router.ts#L32"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "c361df8a",
      "interpretation": {
        "sig": "c361df8a",
        "summary": "Lists the saved `ContentVersion` history for a template's document, optionally including soft-deleted versions.",
        "models": [
          {
            "model": "ContentVersion",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:template.permissions",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "template.permissions",
      "module": "template",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetTemplatePermissionsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/template/procedures/getTemplatePermissions.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/getTemplatePermissions.query.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/template/router.ts",
        "line": 33,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/router.ts#L33"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firm.listFirmMemberships",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.listFirmMemberships",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4f593e64",
      "interpretation": {
        "sig": "4f593e64",
        "summary": "Works out what the calling identity can do with a template: firm admins get admin, `PERSON` or `TEAM` editors get editor, everyone else gets viewer. Calls `identity-service` to check firm membership and team lists when the template belongs to a firm.",
        "models": [
          {
            "model": "Template",
            "service": "content-service"
          },
          {
            "model": "TemplateEditor",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:template.publishTemplate",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "template.publishTemplate",
      "module": "template",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedTemplateProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "PublishTemplateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/template/procedures/publishTemplate.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/publishTemplate.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/template/router.ts",
        "line": 34,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/router.ts#L34"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b7bedece",
      "interpretation": {
        "sig": "b7bedece",
        "summary": "Publishes a template: either promotes an existing content version to be the published (and current) one, or snapshots the current live state into a fresh version and publishes that. Updates the `Template`'s `publishedVersionId` (and `currentVersionId`, when publishing the live state).",
        "models": [
          {
            "model": "Template",
            "service": "content-service"
          },
          {
            "model": "ContentVersion",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:template.restoreTemplateVersion",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "template.restoreTemplateVersion",
      "module": "template",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedTemplateProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RestoreTemplateVersionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/template/procedures/restoreTemplateVersion.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/restoreTemplateVersion.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/template/router.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/router.ts#L35"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7de90252",
      "interpretation": {
        "sig": "7de90252",
        "summary": "Rolls a template's live content back to an earlier saved version, creating a fresh `ContentVersion` copied from that history entry and making it the template's current version. Rejects with `CONFLICT` if the template moved on since the caller last viewed its history (optimistic-concurrency check on `currentVersionId`).",
        "models": [
          {
            "model": "Template",
            "service": "content-service"
          },
          {
            "model": "ContentVersion",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:template.setTemplateActiveVersion",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "template.setTemplateActiveVersion",
      "module": "template",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedTemplateProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "SetTemplateActiveVersionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/template/procedures/setTemplateActiveVersion.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/setTemplateActiveVersion.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/template/router.ts",
        "line": 36,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/router.ts#L36"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "99e7a292",
      "interpretation": {
        "sig": "99e7a292",
        "summary": "Points a template's published version at a specific existing `ContentVersion`, without touching the current (draft) version. Throws `NOT_FOUND` if that version doesn't belong to the template's content.",
        "models": [
          {
            "model": "Template",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:template.setTemplateEditors",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "template.setTemplateEditors",
      "module": "template",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedTemplateProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "SetTemplateEditorsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/template/procedures/setTemplateEditors.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/setTemplateEditors.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/template/router.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/router.ts#L37"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3fa02512",
      "interpretation": {
        "sig": "3fa02512",
        "summary": "Replaces the full set of `PERSON`/`TEAM` editors on a template: diffs the desired list against the current `TemplateEditor` rows and adds or removes only what changed, then returns the resulting editor list.",
        "models": [
          {
            "model": "TemplateEditor",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:template.updateTemplateInfo",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "template.updateTemplateInfo",
      "module": "template",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedTemplateProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateTemplateInfoInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/template/procedures/updateTemplateInfo.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/updateTemplateInfo.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/template/router.ts",
        "line": 38,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/router.ts#L38"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e17d4114",
      "interpretation": {
        "sig": "e17d4114",
        "summary": "Renames a template and/or edits its description.",
        "models": [
          {
            "model": "Template",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:template.updateTemplateStatus",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "template.updateTemplateStatus",
      "module": "template",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedTemplateProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateTemplateStatusInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/template/procedures/updateTemplateStatus.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/updateTemplateStatus.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/template/router.ts",
        "line": 39,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/router.ts#L39"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "995b2008",
      "interpretation": {
        "sig": "995b2008",
        "summary": "Changes a template's status field (e.g. moving it between draft/active states used by the template library UI).",
        "models": [
          {
            "model": "Template",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:template.addTemplateCategory",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "template.addTemplateCategory",
      "module": "template",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedTemplateProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "AddTemplateCategoryInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/template/procedures/addTemplateCategory.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/addTemplateCategory.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/template/router.ts",
        "line": 40,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/router.ts#L40"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e17e2be",
      "interpretation": {
        "sig": "e17e2be",
        "summary": "Attaches an existing `TemplateCategory` to a template, after checking the category actually lives in a scope the caller has access to (blocks pinning another firm's category by guessing its id) and enforcing the per-template category cap. No-ops if already attached.",
        "models": [
          {
            "model": "Template",
            "service": "content-service"
          },
          {
            "model": "TemplateCategoryAssignment",
            "service": "content-service"
          },
          {
            "model": "TemplateCategory",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:template.removeTemplateCategory",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "template.removeTemplateCategory",
      "module": "template",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedTemplateProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RemoveTemplateCategoryInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/template/procedures/removeTemplateCategory.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/removeTemplateCategory.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/template/router.ts",
        "line": 41,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/router.ts#L41"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "bbcd842e",
      "interpretation": {
        "sig": "bbcd842e",
        "summary": "Detaches one category from one template by deleting the `TemplateCategoryAssignment` row, then returns the template's remaining categories. The category itself is untouched.",
        "models": [
          {
            "model": "TemplateCategoryAssignment",
            "service": "content-service"
          },
          {
            "model": "Template",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:template.categories.list",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "template.categories.list",
      "module": "template",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedScopeProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListTemplateCategoriesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/template/procedures/listTemplateCategories.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/listTemplateCategories.query.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/template/router.ts",
        "line": 43,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/router.ts#L43"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "293f9f4a",
      "interpretation": {
        "sig": "293f9f4a",
        "summary": "Lists all `TemplateCategory` rows for a scope (firm or global), name ascending, for populating a category picker.",
        "models": [
          {
            "model": "TemplateCategory",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:template.categories.create",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "template.categories.create",
      "module": "template",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedScopeProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateTemplateCategoryInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/template/procedures/createTemplateCategory.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/createTemplateCategory.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/template/router.ts",
        "line": 44,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/router.ts#L44"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "c8b36074",
      "interpretation": {
        "sig": "c8b36074",
        "summary": "Creates a new `TemplateCategory` in a scope after a case-insensitive name check, backed by a partial unique index on (scope, lower(name)) for the race case. Returns `CONFLICT` if the name is already taken.",
        "models": [
          {
            "model": "TemplateCategory",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:template.categories.rename",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "template.categories.rename",
      "module": "template",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedScopeProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RenameTemplateCategoryInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/template/procedures/renameTemplateCategory.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/renameTemplateCategory.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/template/router.ts",
        "line": 45,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/router.ts#L45"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "c3c14fac",
      "interpretation": {
        "sig": "c3c14fac",
        "summary": "Renames an existing `TemplateCategory` within its scope, rejecting the change with `CONFLICT` if another category in the scope already has that name (case-insensitive) or `NOT_FOUND` if the category doesn't exist there.",
        "models": [
          {
            "model": "TemplateCategory",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:template.categories.softDelete",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "template.categories.softDelete",
      "module": "template",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedScopeProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "SoftDeleteTemplateCategoryInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/template/procedures/softDeleteTemplateCategory.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/softDeleteTemplateCategory.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/template/router.ts",
        "line": 46,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/router.ts#L46"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "99ca5f0a",
      "interpretation": {
        "sig": "99ca5f0a",
        "summary": "Soft-deletes a `TemplateCategory` (sets `deletedAt` via the framework's soft-delete client) and hard-deletes all its `TemplateCategoryAssignment` rows in one transaction, so the category disappears from every template that used it.",
        "models": [
          {
            "model": "TemplateCategory",
            "service": "content-service"
          },
          {
            "model": "TemplateCategoryAssignment",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:form.listFirmForms",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "form.listFirmForms",
      "module": "form",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedScopeProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListFirmFormsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/form/procedures/listFirmForms.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/form/procedures/listFirmForms.query.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/form/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/form/router.ts#L10"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "453fb044",
      "interpretation": {
        "sig": "453fb044",
        "summary": "Lists a firm's forms (`FirmTemplate` rows) with their jurisdictions and categories, joined against the artifact-generation catalogue for display name, code and issuer, flagging any form no longer present in that catalogue.",
        "models": [
          {
            "model": "FirmTemplate",
            "service": "content-service"
          },
          {
            "model": "TemplateCategory",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:form.updateFirmFormJurisdictions",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "form.updateFirmFormJurisdictions",
      "module": "form",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "protectedFirmTemplateProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateFirmFormJurisdictionsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/form/procedures/updateFirmFormJurisdictions.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/form/procedures/updateFirmFormJurisdictions.mutation.ts#L6"
      },
      "router": {
        "file": "services/content-service/src/domains/form/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/form/router.ts#L11"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "aae96a2",
      "interpretation": {
        "sig": "aae96a2",
        "summary": "Overwrites the jurisdictions list on a firm's form (`FirmTemplate`) with the given value.",
        "models": [
          {
            "model": "FirmTemplate",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:form.addFirmFormCategory",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "form.addFirmFormCategory",
      "module": "form",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "protectedFirmTemplateProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "AddFirmFormCategoryInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/form/procedures/addFirmFormCategory.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/form/procedures/addFirmFormCategory.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/form/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/form/router.ts#L12"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "11884632",
      "interpretation": {
        "sig": "11884632",
        "summary": "Attaches a category to a firm's form, checking the category belongs to the same scope and rejecting once the form already has the max allowed categories. Runs in a transaction that locks the `FirmTemplate` row first so concurrent adds can't both slip past the category-count check.",
        "models": [
          {
            "model": "FirmTemplate",
            "service": "content-service"
          },
          {
            "model": "FormCategoryAssignment",
            "service": "content-service"
          },
          {
            "model": "TemplateCategory",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:form.removeFirmFormCategory",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "form.removeFirmFormCategory",
      "module": "form",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "protectedFirmTemplateProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RemoveFirmFormCategoryInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/form/procedures/removeFirmFormCategory.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/form/procedures/removeFirmFormCategory.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/form/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/form/router.ts#L13"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d4293536",
      "interpretation": {
        "sig": "d4293536",
        "summary": "Detaches a category from a firm's form by deleting its `FormCategoryAssignment` row, then returns the form's remaining categories.",
        "models": [
          {
            "model": "FirmTemplate",
            "service": "content-service"
          },
          {
            "model": "FormCategoryAssignment",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:form.internal.assignFormToFirm",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "form.internal.assignFormToFirm",
      "module": "form",
      "roleFolder": "internal",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "AssignFormToFirmInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/form/procedures/internal/assignFormToFirm.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/form/procedures/internal/assignFormToFirm.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/form/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/form/router.ts#L15"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "b5ee747f",
      "interpretation": {
        "sig": "b5ee747f",
        "summary": "Internal, pre-auth endpoint that assigns a catalogue form to a firm: looks the form up in the artifact-generation catalogue, then upserts a `FirmTemplate` for that firm (reviving a soft-deleted one if it exists, so existing firm edits survive re-assignment) with jurisdictions mapped from the catalogue entry. No caller currently reaches it.",
        "models": [
          {
            "model": "FirmTemplate",
            "service": "content-service"
          }
        ],
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "content-service:form.internal.unassignFormFromFirm",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "form.internal.unassignFormFromFirm",
      "module": "form",
      "roleFolder": "internal",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UnassignFormFromFirmInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/form/procedures/internal/unassignFormFromFirm.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/form/procedures/internal/unassignFormFromFirm.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/form/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/form/router.ts#L16"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "a624a107",
      "interpretation": {
        "sig": "a624a107",
        "summary": "Internal, pre-auth endpoint that soft-deletes a firm's `FirmTemplate` for a given form slug (no-op if none exists). No caller currently reaches it.",
        "models": [
          {
            "model": "FirmTemplate",
            "service": "content-service"
          }
        ],
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "content-service:form.internal.listFirmFormSlugs",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "form.internal.listFirmFormSlugs",
      "module": "form",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListFirmFormSlugsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/form/procedures/internal/listFirmFormSlugs.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/form/procedures/internal/listFirmFormSlugs.query.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/form/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/form/router.ts#L17"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d4b5d80b",
      "interpretation": {
        "sig": "d4b5d80b",
        "summary": "Internal, pre-auth query that returns the list of form slugs currently assigned to a firm.",
        "models": [
          {
            "model": "FirmTemplate",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:file.createUploadableFile",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "file.createUploadableFile",
      "module": "file",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedScopeProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateUploadableFileInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/file/procedures/createUploadableFile.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/file/procedures/createUploadableFile.mutation.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/file/router.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/file/router.ts#L6"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "dec3240c",
      "interpretation": {
        "sig": "dec3240c",
        "summary": "Creates a `File` record with status `PENDING` and returns a presigned S3 POST for the caller to upload the actual bytes to. Nothing is stored in S3 until the caller uses the returned upload fields.",
        "models": [
          {
            "model": "File",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "content-service:file.getFile",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "file.getFile",
      "module": "file",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedFileProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetFileInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/file/procedures/getFile.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/file/procedures/getFile.query.ts#L5"
      },
      "router": {
        "file": "services/content-service/src/domains/file/router.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/file/router.ts#L7"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "5a056eb4",
      "interpretation": {
        "sig": "5a056eb4",
        "summary": "Looks up a file by id and, if its status is `READY`, adds a 10-minute presigned S3 download URL; otherwise `downloadUrl` is null. Nothing calls this procedure today, so it looks unused.",
        "models": [
          {
            "model": "File",
            "service": "content-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "content-service:file.deleteFile",
      "api": "content-service",
      "origin": "content-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "contentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "file.deleteFile",
      "module": "file",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedFileProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/content-service/src/domains/file/procedures/deleteFile.mutation.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/file/procedures/deleteFile.mutation.ts#L4"
      },
      "router": {
        "file": "services/content-service/src/domains/file/router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/file/router.ts#L8"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "38ccc8ac",
      "interpretation": {
        "sig": "38ccc8ac",
        "summary": "Hard-deletes a `File` row from the database by id (no S3 cleanup here). No caller currently reaches this procedure, so it looks unused.",
        "models": [
          {
            "model": "File",
            "service": "content-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "email-service:drafts.create",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "drafts.create",
      "module": "drafts",
      "roleFolder": "drafts",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMessageDraftInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/drafts/createMessageDraft.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/drafts/createMessageDraft.mutation.ts#L5"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 53,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L53"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "da75b7bb",
      "interpretation": {
        "sig": "da75b7bb",
        "summary": "Creates a new `MessageDraft` row in status `DRAFTING` for the caller's active email grant, optionally seeded with attachment metadata (used when forwarding). Fails with `UNAUTHORIZED` if the identity has no active grant.",
        "models": [
          {
            "model": "MessageDraft",
            "service": "email-service"
          },
          {
            "model": "MessageDraftAttachment",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:drafts.createAttachment",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "drafts.createAttachment",
      "module": "drafts",
      "roleFolder": "drafts",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMessageDraftAttachmentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/drafts/createMessageDraftAttachment.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/drafts/createMessageDraftAttachment.mutation.ts#L5"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 54,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L54"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4f03a0d9",
      "interpretation": {
        "sig": "4f03a0d9",
        "summary": "Uploads a base64 file to S3 and attaches it to an existing draft as a `MessageDraftAttachment` row. Blocked if the draft is already in status `SENDING` or belongs to a different person's grant.",
        "models": [
          {
            "model": "MessageDraft",
            "service": "email-service"
          },
          {
            "model": "MessageDraftAttachment",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:drafts.createFromMessage",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "drafts.createFromMessage",
      "module": "drafts",
      "roleFolder": "drafts",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMessageDraftFromMessageInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/drafts/createMessageDraftFromMessage.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/drafts/createMessageDraftFromMessage.mutation.ts#L10"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 55,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L55"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a20fb745",
      "interpretation": {
        "sig": "a20fb745",
        "summary": "Builds a forward draft from an existing `Message`: prefixes the subject with 'Fwd:', quotes the original body with sender/date/recipients, and copies over any attachments that have an S3 key, then creates the draft via `drafts.create`.",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          },
          {
            "model": "MessageDraft",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:drafts.delete",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "drafts.delete",
      "module": "drafts",
      "roleFolder": "drafts",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "DeleteMessageDraftInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/drafts/deleteMessageDraft.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/drafts/deleteMessageDraft.mutation.ts#L5"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 56,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L56"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "78788ba5",
      "interpretation": {
        "sig": "78788ba5",
        "summary": "Deletes a draft: if it's still `DRAFTING` or `FAILED`, soft-deletes by flipping status to `DELETED`; otherwise hard-deletes the draft row and its S3 attachment files. Rejects if the caller isn't the grant owner.",
        "models": [
          {
            "model": "MessageDraft",
            "service": "email-service"
          },
          {
            "model": "MessageDraftAttachment",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:drafts.deleteAttachment",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "drafts.deleteAttachment",
      "module": "drafts",
      "roleFolder": "drafts",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "DeleteMessageDraftAttachmentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/drafts/deleteMessageDraftAttachment.mutation.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/drafts/deleteMessageDraftAttachment.mutation.ts#L9"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 57,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L57"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f5a3ff7",
      "interpretation": {
        "sig": "f5a3ff7",
        "summary": "Removes a single attachment from a draft: deletes its file from S3 first, then removes the `MessageDraftAttachment` row. Blocked while the parent draft is in status `SENDING`.",
        "models": [
          {
            "model": "MessageDraftAttachment",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:drafts.get",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "drafts.get",
      "module": "drafts",
      "roleFolder": "drafts",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetMessageDraftInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/drafts/getMessageDraft.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/drafts/getMessageDraft.query.ts#L9"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 58,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L58"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "192fb87d",
      "interpretation": {
        "sig": "192fb87d",
        "summary": "Reads a single draft plus its attachments, generating a signed S3 download URL for each attachment, and includes the linked sent `Message` (body, from, `mailboxCreatedAt`) once the draft has been sent.",
        "models": [
          {
            "model": "MessageDraft",
            "service": "email-service"
          },
          {
            "model": "MessageDraftAttachment",
            "service": "email-service"
          },
          {
            "model": "Message",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:drafts.list",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "drafts.list",
      "module": "drafts",
      "roleFolder": "drafts",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListMessageDraftsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/drafts/listMessageDrafts.query.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/drafts/listMessageDrafts.query.ts#L10"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 59,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L59"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "8a2a383a",
      "interpretation": {
        "sig": "8a2a383a",
        "summary": "Lists the caller's drafts still in status `DRAFTING` for their active email grant, optionally scoped to a matter, ordered by `updatedAt`.",
        "models": [
          {
            "model": "MessageDraft",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:drafts.send",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "drafts.send",
      "module": "drafts",
      "roleFolder": "drafts",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "SendMessageDraftInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/drafts/sendMessageDraft.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/drafts/sendMessageDraft.mutation.ts#L12"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 60,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L60"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [
        "email-service/sent-message.settle-body"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "af3364c4",
      "interpretation": {
        "sig": "af3364c4",
        "summary": "Sends a draft: marks it `SENDING`, dispatches it through Nylas with its attachments downloaded from S3, records the resulting Nylas message id, then creates a `SENT` Message record. On success it publishes `email-service/sent-message.settle-body` to schedule body settling; on any failure it marks the draft `FAILED`.",
        "models": [
          {
            "model": "MessageDraft",
            "service": "email-service"
          },
          {
            "model": "Message",
            "service": "email-service"
          }
        ],
        "flags": [
          "publishes-inngest-event"
        ]
      }
    },
    {
      "id": "email-service:drafts.update",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "drafts.update",
      "module": "drafts",
      "roleFolder": "drafts",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateMessageDraftInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/drafts/updateMessageDraft.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/drafts/updateMessageDraft.mutation.ts#L5"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 61,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L61"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2463f8a9",
      "interpretation": {
        "sig": "2463f8a9",
        "summary": "Edits an existing draft's fields (subject, body, recipients, etc.) in place. Rejects if the draft belongs to another person's grant or is currently `SENDING`.",
        "models": [
          {
            "model": "MessageDraft",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:matter.getMessage",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matter.getMessage",
      "module": "matter",
      "roleFolder": "matter",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetMatterMessageInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/matter/getMessage.query.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/getMessage.query.ts#L10"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 64,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L64"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "13c80621",
      "interpretation": {
        "sig": "13c80621",
        "summary": "Fetches one `ACTIVE` message that belongs to the given matter, including its attachments. Throws `NOT_FOUND` if no matching message exists.",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:matter.getThreads",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matter.getThreads",
      "module": "matter",
      "roleFolder": "matter",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetMatterThreadsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/matter/getThreads.query.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/getThreads.query.ts#L13"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 65,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L65"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7ecf0441",
      "interpretation": {
        "sig": "7ecf0441",
        "summary": "Lists email threads for a matter (or optionally scoped to a person's active grant), grouping and deduplicating messages into thread summaries with any in-progress drafts attached, and applies filters like unread, has-attachments, or unfiled.",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          },
          {
            "model": "MessageDraft",
            "service": "email-service"
          },
          {
            "model": "Grant",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:matter.getThreadMessages",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matter.getThreadMessages",
      "module": "matter",
      "roleFolder": "matter",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetMatterThreadMessagesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/matter/getThreadMessages.query.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/getThreadMessages.query.ts#L16"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 66,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L66"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "61711493",
      "interpretation": {
        "sig": "61711493",
        "summary": "Fetches the paginated message list for one or more threads on a matter, deduplicated and sorted, along with the id of the latest in-progress reply draft if one exists. Throws `NOT_FOUND` if the thread has no messages.",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          },
          {
            "model": "MessageDraft",
            "service": "email-service"
          },
          {
            "model": "Grant",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:matter.listRecentEmails",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matter.listRecentEmails",
      "module": "matter",
      "roleFolder": "matter",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "InputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/email-service/src/procedures/matter/list-recent-emails.query.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/list-recent-emails.query.ts#L12"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 67,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L67"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f1c3fc4b",
      "interpretation": {
        "sig": "f1c3fc4b",
        "summary": "Returns the most recent emails on a matter, optionally filtered to only `SENT` or only `RECEIVED`, up to a count of 100.",
        "flags": [
          "not used by apps"
        ]
      }
    },
    {
      "id": "email-service:matter.createAttachmentUrl",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matter.createAttachmentUrl",
      "module": "matter",
      "roleFolder": "matter",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateMatterAttachmentUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/matter/createAttachmentUrl.mutation.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/createAttachmentUrl.mutation.ts#L11"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 68,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L68"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "de281e1f",
      "interpretation": {
        "sig": "de281e1f",
        "summary": "Generates a signed S3 URL for one attachment on a matter's message. If the attachment hasn't been uploaded to S3 yet, uploads it from Nylas first and records the resulting `s3Key` and file size on the `MessageAttachment`.",
        "models": [
          {
            "model": "MessageAttachment",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:matter.getAttachmentUrls",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matter.getAttachmentUrls",
      "module": "matter",
      "roleFolder": "matter",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "write",
        "discrepancy": true
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateMatterAttachmentUrlsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/matter/getAttachmentUrls.query.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/getAttachmentUrls.query.ts#L11"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 69,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L69"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [
        "email-service/attachment.uploadRequested"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "588155c0",
      "interpretation": {
        "sig": "588155c0",
        "summary": "Returns signed S3 URLs for a message's inline (or non-inline) attachments that already have an S3 copy. For attachments still missing from S3, it queues an upload by publishing `attachment.uploadRequested` events and stamps `uploadRequestedAt` on those attachments, so despite being named and typed as a query it writes.",
        "models": [
          {
            "model": "MessageAttachment",
            "service": "email-service"
          }
        ],
        "flags": [
          "read-that-writes"
        ]
      }
    },
    {
      "id": "email-service:matter.updateMessagesMatter",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matter.updateMessagesMatter",
      "module": "matter",
      "roleFolder": "matter",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateMessagesMatterMutationInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/matter/updateMessagesMatter.mutation.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/updateMessagesMatter.mutation.ts#L13"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 70,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L70"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [
        "email-service/attachment.refiled",
        "email-service/attachment.removed",
        "email-service/message.filed",
        "email-service/message.refiled",
        "email-service/message.removed"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3d78375",
      "interpretation": {
        "sig": "3d78375",
        "summary": "Re-files a set of messages (by id or by thread) onto a new matter, or removes them from their matter entirely when `newMatterId` is null, updating each `Message`'s `matterId` and status directly. Depending on whether this is the messages' first filing, a refile, or a removal, it fires the matching initial-filing, refile, or removed Inngest events and updates the mailbox label on the underlying provider (e.g. Outlook) for each affected message.",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:matter.updateThreadMatter",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matter.updateThreadMatter",
      "module": "matter",
      "roleFolder": "matter",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateThreadMatterMutationInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/matter/updateThreadMatter.mutation.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/updateThreadMatter.mutation.ts#L13"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 71,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L71"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [
        "email-service/attachment.refiled",
        "email-service/attachment.removed",
        "email-service/message.filed",
        "email-service/message.refiled",
        "email-service/message.removed"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b5ff4319",
      "interpretation": {
        "sig": "b5ff4319",
        "summary": "Re-files or unfiles every message in one email thread by delegating straight to `updateMessagesMatter`, so it has the identical write and event behavior: it moves the thread's messages to a new matter (or clears `matterId`), fires the corresponding filing/refile/removed events, and updates the provider mailbox label.",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:messages.createAttachmentUrl",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "messages.createAttachmentUrl",
      "module": "messages",
      "roleFolder": "messages",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedGrantProcedure",
        "base": "protectedProcedure",
        "middlewares": [
          "grantMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "CreateGrantAttachmentUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/messages/createAttachmentUrl.mutation.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/createAttachmentUrl.mutation.ts#L11"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 74,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L74"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6cd5c377",
      "interpretation": {
        "sig": "6cd5c377",
        "summary": "Returns a signed S3 URL for viewing or downloading an email attachment. If the attachment hasn't been pulled from Nylas yet, it downloads the file from the provider, uploads it to S3, and updates the `MessageAttachment` row with the `s3Key` and `fileSize` before signing the URL.",
        "models": [
          {
            "model": "MessageAttachment",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:messages.getAttachmentUrls",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "messages.getAttachmentUrls",
      "module": "messages",
      "roleFolder": "messages",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "write",
        "discrepancy": true
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedGrantProcedure",
        "base": "protectedProcedure",
        "middlewares": [
          "grantMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "CreateGrantAttachmentUrlsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/messages/getAttachmentUrls.query.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/getAttachmentUrls.query.ts#L11"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 75,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L75"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [
        "email-service/attachment.uploadRequested"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2df1d434",
      "interpretation": {
        "sig": "2df1d434",
        "summary": "Returns signed S3 URLs for all attachments on a message. For any attachment still missing an S3 file, it publishes an `email-service/attachment.uploadRequested` event to trigger the background upload and stamps `uploadRequestedAt` on the `MessageAttachment` row so it isn't re-queued within 15 minutes.",
        "models": [
          {
            "model": "MessageAttachment",
            "service": "email-service"
          }
        ],
        "flags": [
          "read-that-writes"
        ]
      }
    },
    {
      "id": "email-service:messages.getMessage",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "messages.getMessage",
      "module": "messages",
      "roleFolder": "messages",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedGrantProcedure",
        "base": "protectedProcedure",
        "middlewares": [
          "grantMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "GetGrantMessageInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/messages/getMessage.query.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/getMessage.query.ts#L10"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 76,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L76"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1891a777",
      "interpretation": {
        "sig": "1891a777",
        "summary": "Fetches one `ACTIVE` email message (with its attachments) that belongs to the caller's grant or matter, for display.",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:messages.getThreadMessages",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "messages.getThreadMessages",
      "module": "messages",
      "roleFolder": "messages",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedGrantProcedure",
        "base": "protectedProcedure",
        "middlewares": [
          "grantMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "GetGrantThreadMessagesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/messages/getThreadMessages.query.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/getThreadMessages.query.ts#L13"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 77,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L77"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4faf97fb",
      "interpretation": {
        "sig": "4faf97fb",
        "summary": "Fetches a page of `ACTIVE` messages across one or more Nylas threads, deduplicated and sorted, plus the id of any in-progress reply draft for that thread.",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          },
          {
            "model": "MessageDraft",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:messages.getThreads",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "messages.getThreads",
      "module": "messages",
      "roleFolder": "messages",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedGrantProcedure",
        "base": "protectedProcedure",
        "middlewares": [
          "grantMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "GetGrantThreadsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/messages/getThreads.query.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/getThreads.query.ts#L10"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 78,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L78"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "72d307",
      "interpretation": {
        "sig": "72d307",
        "summary": "Lists email threads for a mailbox grant, paginated, grouping messages into threads and attaching any in-progress reply drafts. For a grant it always paginates through `listGrantThreadsPaginated`; for a matter it loads and dedupes matching messages in memory and applies read/unread, attachment and filing filters before sorting.",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          },
          {
            "model": "MessageDraft",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:messages.ignoreThreadForFiling",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "messages.ignoreThreadForFiling",
      "module": "messages",
      "roleFolder": "messages",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedGrantProcedure",
        "base": "protectedProcedure",
        "middlewares": [
          "grantMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "IgnoreThreadForFilingInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/messages/ignoreThreadForFiling.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/ignoreThreadForFiling.mutation.ts#L10"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 79,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L79"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f944f3cf",
      "interpretation": {
        "sig": "f944f3cf",
        "summary": "Marks every unfiled `ACTIVE` message in a thread as `filingIgnored`, so the thread stops showing up as needing to be filed to a matter.",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:messages.searchThreads",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "messages.searchThreads",
      "module": "messages",
      "roleFolder": "messages",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedGrantProcedure",
        "base": "protectedProcedure",
        "middlewares": [
          "grantMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "SearchThreadsRequiredIdentityIdSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/messages/searchThreads.query.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/searchThreads.query.ts#L10"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 80,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L80"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "31d857cf",
      "interpretation": {
        "sig": "31d857cf",
        "summary": "Searches a mailbox for threads matching a text query by calling Nylas's thread search, then loads the matching messages from the database, builds thread summaries, and generates a contextual snippet showing where the search term appears. Returns an empty result for queries under 2 characters or if Nylas search fails.",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          },
          {
            "model": "MessageDraft",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:messages.deleteMessage",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "messages.deleteMessage",
      "module": "messages",
      "roleFolder": "messages",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedGrantProcedure",
        "base": "protectedProcedure",
        "middlewares": [
          "grantMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "DeleteMessageInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/messages/deleteMessage.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/deleteMessage.mutation.ts#L10"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 81,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L81"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "98e8c0b7",
      "interpretation": {
        "sig": "98e8c0b7",
        "summary": "Deletes a message from Nylas, then marks the local `Message` row `INACTIVE` and moves it into the mailbox's Trash folder immediately, ahead of the Nylas webhook confirming the deletion.",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:messages.deleteThread",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "messages.deleteThread",
      "module": "messages",
      "roleFolder": "messages",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedGrantProcedure",
        "base": "protectedProcedure",
        "middlewares": [
          "grantMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "DeleteThreadInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/messages/deleteThread.mutation.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/deleteThread.mutation.ts#L11"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 82,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L82"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a3f8be57",
      "interpretation": {
        "sig": "a3f8be57",
        "summary": "Deletes a thread from Nylas (tolerating a 404 if the provider already lost it), then updates every message in that thread: moves them to Trash, and marks them `INACTIVE` unless `softDelete` was requested, in which case they stay `ACTIVE` but move to Trash.",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:messages.restoreThread",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "messages.restoreThread",
      "module": "messages",
      "roleFolder": "messages",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedGrantProcedure",
        "base": "protectedProcedure",
        "middlewares": [
          "grantMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "RestoreThreadInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/messages/restoreThread.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/restoreThread.mutation.ts#L10"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 83,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L83"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e70e1c07",
      "interpretation": {
        "sig": "e70e1c07",
        "summary": "Moves a thread out of Trash back to Inbox or Sent (picking whichever matches the thread's direction), updating the folder on both Nylas and the local `Message` rows. Fails if the thread isn't currently in Trash or if the destination folder can't be found.",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:messages.updateMessageUnreadStatus",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "messages.updateMessageUnreadStatus",
      "module": "messages",
      "roleFolder": "messages",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedGrantProcedure",
        "base": "protectedProcedure",
        "middlewares": [
          "grantMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "UpdateMessageUnreadStatusInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/messages/updateMessageUnreadStatus.mutation.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/updateMessageUnreadStatus.mutation.ts#L11"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 84,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L84"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6c55d803",
      "interpretation": {
        "sig": "6c55d803",
        "summary": "Sets the read/unread flag on a single message, updating it in Nylas first and then writing the same value to the local `Message` row.",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:messages.updateThreadReadStatus",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "messages.updateThreadReadStatus",
      "module": "messages",
      "roleFolder": "messages",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedGrantProcedure",
        "base": "protectedProcedure",
        "middlewares": [
          "grantMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "UpdateThreadReadStatusInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/messages/updateThreadReadStatus.mutation.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/updateThreadReadStatus.mutation.ts#L11"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 85,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L85"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a883a93",
      "interpretation": {
        "sig": "a883a93",
        "summary": "Sets the read/unread flag across every message in one or more threads that isn't already in the target state. Updates each message in Nylas (continuing past individual failures) and then bulk-writes the new unread value to the local `Message` rows.",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:folders.getMessageFolders",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "folders.getMessageFolders",
      "module": "folders",
      "roleFolder": "folders",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/folders/getMessageFolders.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/folders/getMessageFolders.query.ts#L6"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 88,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L88"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7900afd5",
      "interpretation": {
        "sig": "7900afd5",
        "summary": "Returns the caller's mail folder tree (`MessageFolder` rows) with unread counts per folder, plus a virtual unfiled-inbox summary (thread count, unique senders, oldest/newest dates) and the `DRAFTING` draft count. No data changes: it looks up the caller's grant, then reads and aggregates.",
        "models": [
          {
            "model": "MessageFolder",
            "service": "email-service"
          },
          {
            "model": "Message",
            "service": "email-service"
          },
          {
            "model": "MessageDraft",
            "service": "email-service"
          },
          {
            "model": "Grant",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:outlook.fileMessages",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "outlook.fileMessages",
      "module": "outlook",
      "roleFolder": "outlook",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "FileMessagesMutationInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/outlook/fileMessages.mutation.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/outlook/fileMessages.mutation.ts#L26"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 91,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L91"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [
        "email-service/attachment.refiled",
        "email-service/attachment.removed",
        "email-service/message.filed",
        "email-service/message.refiled",
        "email-service/message.removed",
        "matter-service/email.matched"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "35044b43",
      "interpretation": {
        "sig": "35044b43",
        "summary": "Files one or more Outlook thread messages (from the Outlook add-in) to a matter: for a message never seen before it publishes `matter-service/email.matched` to let the matching flow ingest it, for a message already filed elsewhere it moves the `Message` row to the new `matterId`, marks it `ACTIVE`, and fans out `message.filed`/`refiled`/`removed` and `attachment.refiled`/`removed` events, then patches the Microsoft mailbox item's category to the matter's human-readable number.",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          },
          {
            "model": "MessageAttachment",
            "service": "email-service"
          },
          {
            "model": "Grant",
            "service": "email-service"
          },
          {
            "model": "ProviderTenant",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:outlook.getEmailAddressesInvlovedInThread",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "outlook.getEmailAddressesInvlovedInThread",
      "module": "outlook",
      "roleFolder": "outlook",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetOutlookEmailAddressesInvlovedInThreadInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/outlook/getOutlookEmailAddressesInvlovedInThread.query.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/outlook/getOutlookEmailAddressesInvlovedInThread.query.ts#L13"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 92,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L92"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ca3fe08e",
      "interpretation": {
        "sig": "ca3fe08e",
        "summary": "Returns the deduplicated set of from/to/cc/bcc email addresses across a Nylas thread, read live from Nylas (not the local DB), for the given mailbox grant.",
        "flags": [
          "read-only, no persisted state"
        ]
      }
    },
    {
      "id": "email-service:outlook.getPersonId",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "outlook.getPersonId",
      "module": "outlook",
      "roleFolder": "outlook",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetOutlookPersonIdInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/outlook/getOutlookPersonId.query.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/outlook/getOutlookPersonId.query.ts#L12"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 94,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L94"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "782dcffe",
      "interpretation": {
        "sig": "782dcffe",
        "summary": "Looks up the mailbox's `Grant` by email address and tenant and returns its Nylas `personId`.",
        "models": [
          {
            "model": "Grant",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:outlook.getThreadMessagePreviews",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "outlook.getThreadMessagePreviews",
      "module": "outlook",
      "roleFolder": "outlook",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetOutlookThreadMessagePreviewsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/outlook/getOutlookThreadMessagePreviews.query.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/outlook/getOutlookThreadMessagePreviews.query.ts#L14"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 95,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L95"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2dfe1fb8",
      "interpretation": {
        "sig": "2dfe1fb8",
        "summary": "Returns preview data for every message in a Nylas thread, pulling the message content from Nylas and attaching each message's current `matterId` from the local `Message` table where a matching `ACTIVE` record exists.",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:outlook.unfileMessages",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "outlook.unfileMessages",
      "module": "outlook",
      "roleFolder": "outlook",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UnfileMessagesMutationInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/outlook/unfileMessages.mutation.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/outlook/unfileMessages.mutation.ts#L23"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 96,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L96"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [
        "email-service/attachment.refiled",
        "email-service/attachment.removed",
        "email-service/message.filed",
        "email-service/message.refiled",
        "email-service/message.removed"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "c1df291b",
      "interpretation": {
        "sig": "c1df291b",
        "summary": "Removes Outlook thread messages from whatever matter they were filed to: for each message already linked to a matter it clears `matterId` (leaves status `ACTIVE`) and fires `message.removed`/`refiled` and `attachment.removed`/`refiled` events; messages not found locally are skipped with no action.",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          },
          {
            "model": "MessageAttachment",
            "service": "email-service"
          },
          {
            "model": "Grant",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:grants.createForPerson",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "grants.createForPerson",
      "module": "grants",
      "roleFolder": "grants",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateGrantForPersonSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/grants/createGrantForPerson.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/grants/createGrantForPerson.mutation.ts#L5"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 99,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L99"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [
        "email-service/grant.messageBackfill.requested"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ccd3fa3d",
      "interpretation": {
        "sig": "ccd3fa3d",
        "summary": "Connects a person's mailbox for the first time: authenticates the mailbox with Nylas, creates (or reactivates) a `Grant` record as `ACTIVE`, syncs its folders, and fires an Inngest backfill event to pull the last 90 days of messages. Fails with `BAD_REQUEST` if an active grant already exists for that email or person.",
        "models": [
          {
            "model": "Grant",
            "service": "email-service"
          },
          {
            "model": "ProviderTenant",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:grants.getForPerson",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "grants.getForPerson",
      "module": "grants",
      "roleFolder": "grants",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetPersonGrantSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/grants/getPersonGrant.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/grants/getPersonGrant.query.ts#L5"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 100,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L100"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ae6f41dc",
      "interpretation": {
        "sig": "ae6f41dc",
        "summary": "Looks up a person's current `ACTIVE` grant and returns its status plus the status of its most recent message backfill, or `{ hasGrant: false }` if none exists. Pure read.",
        "models": [
          {
            "model": "Grant",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:grants.removeForPerson",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "grants.removeForPerson",
      "module": "grants",
      "roleFolder": "grants",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "RemoveGrantForPersonSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/grants/removeGrantForPerson.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/grants/removeGrantForPerson.mutation.ts#L5"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 101,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L101"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1603b731",
      "interpretation": {
        "sig": "1603b731",
        "summary": "Disconnects a person's mailbox: marks their `ACTIVE` grant `INACTIVE`, and if no other person shares the same underlying Nylas grant, destroys it on Nylas too so the third-party connection is actually revoked.",
        "models": [
          {
            "model": "Grant",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:grants.getContacts",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "grants.getContacts",
      "module": "grants",
      "roleFolder": "grants",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedGrantProcedure",
        "base": "protectedProcedure",
        "middlewares": [
          "grantMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "GetGrantContactsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/grants/getGrantContacts.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/grants/getGrantContacts.query.ts#L9"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 102,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L102"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "c2f77bdf",
      "interpretation": {
        "sig": "c2f77bdf",
        "summary": "Fetches a connected mailbox's address book and inbox contacts from Nylas and returns a deduplicated list of email addresses with full names. Read-only, no DB access, all data comes from the Nylas API.",
        "flags": [
          "reads external API only, no DB"
        ]
      }
    },
    {
      "id": "email-service:grants.requestConnectVerification",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "grants.requestConnectVerification",
      "module": "grants",
      "roleFolder": "grants",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "RequestConnectVerificationSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/grants/requestConnectVerification.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/grants/requestConnectVerification.mutation.ts#L5"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 103,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L103"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6ec4312b",
      "interpretation": {
        "sig": "6ec4312b",
        "summary": "Starts email-connect verification: confirms the email domain belongs to the requesting firm's tenant, blocks if an active grant already exists, then generates a one-time code, stores it hashed on a new `GrantVerification` record (invalidating any prior unconsumed code for that person), and emails the code via Knock. Throws if the notification fails to send.",
        "models": [
          {
            "model": "Grant",
            "service": "email-service"
          },
          {
            "model": "GrantVerification",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:grants.confirmConnectVerification",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "grants.confirmConnectVerification",
      "module": "grants",
      "roleFolder": "grants",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ConfirmConnectVerificationSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/grants/confirmConnectVerification.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/grants/confirmConnectVerification.mutation.ts#L5"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 104,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L104"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [
        "email-service/grant.messageBackfill.requested"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d82d077d",
      "interpretation": {
        "sig": "d82d077d",
        "summary": "Confirms a verification code, then connects the mailbox by delegating to `grants.createForPerson` (same Nylas auth, `Grant` creation, and backfill trigger), and marks the verification consumed only after the connect succeeds. Rejects on expired code, wrong code (incrementing attempt count), or too many attempts.",
        "models": [
          {
            "model": "Grant",
            "service": "email-service"
          },
          {
            "model": "GrantVerification",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:tenants.list",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "tenants.list",
      "module": "tenants",
      "roleFolder": "tenants",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/tenants/listTenants.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/tenants/listTenants.query.ts#L4"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 107,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L107"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5a8bc08",
      "interpretation": {
        "sig": "5a8bc08",
        "summary": "Returns every `ProviderTenant` record in the email service, used to list the configured email tenants.",
        "models": [
          {
            "model": "ProviderTenant",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:internal.getMessageById",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "internal.getMessageById",
      "module": "internal",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/internal/getMessageByIdQuery.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/internal/getMessageByIdQuery.ts#L5"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 110,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L110"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "79e27947",
      "interpretation": {
        "sig": "79e27947",
        "summary": "Looks up a single email `Message` by ID for internal service callers and returns it in public format, but only if its status is `ACTIVE` (soft-deleted or non-active messages come back as `NOT_FOUND`).",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:internal.getMessageDraft",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "internal.getMessageDraft",
      "module": "internal",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetMessageDraftInternalInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/internal/getMessageDraftInternal.query.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/internal/getMessageDraftInternal.query.ts#L10"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 111,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L111"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3119a56",
      "interpretation": {
        "sig": "3119a56",
        "summary": "Fetches one `MessageDraft` by ID for the VFS, scoped to a `matterId`, and 401s if the draft belongs to a different matter.",
        "models": [
          {
            "model": "MessageDraft",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:internal.getThreadMessages",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "internal.getThreadMessages",
      "module": "internal",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetThreadMessagesInternalInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/internal/getThreadMessagesInternal.query.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/internal/getThreadMessagesInternal.query.ts#L14"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 112,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L112"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "95261e36",
      "interpretation": {
        "sig": "95261e36",
        "summary": "Returns paginated `ACTIVE` messages across one or more Nylas thread IDs, sorted and deduped, for internal use (`lawrence-api` pulls this for email context in the agent). Optionally filtered to a `matterId` or a cutoff date.",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:internal.listMessageDrafts",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "internal.listMessageDrafts",
      "module": "internal",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListMessageDraftsInternalInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/internal/listMessageDraftsInternal.query.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/internal/listMessageDraftsInternal.query.ts#L12"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 113,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L113"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7dbbac42",
      "interpretation": {
        "sig": "7dbbac42",
        "summary": "Lists a matter's in-progress (status `DRAFTING`) email drafts for the VFS, paginated by cursor and optionally filtered to drafts created before a given date.",
        "models": [
          {
            "model": "MessageDraft",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:internal.createMessageDraft",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "internal.createMessageDraft",
      "module": "internal",
      "roleFolder": "internal",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateMessageDraftInternalInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/internal/createMessageDraftInternal.mutation.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/internal/createMessageDraftInternal.mutation.ts#L22"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 114,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L114"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7429a37c",
      "interpretation": {
        "sig": "7429a37c",
        "summary": "Creates a new `MessageDraft` (status `DRAFTING`) on a matter using the caller's active email grant; fails with `UNAUTHORIZED` if the given identity has no active grant.",
        "models": [
          {
            "model": "MessageDraft",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "email-service:internal.updateMessageDraft",
      "api": "email-service",
      "origin": "email-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "emailRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "internal.updateMessageDraft",
      "module": "internal",
      "roleFolder": "internal",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateMessageDraftInternalInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/email-service/src/procedures/internal/updateMessageDraftInternal.mutation.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/internal/updateMessageDraftInternal.mutation.ts#L21"
      },
      "router": {
        "file": "services/email-service/src/router.ts",
        "line": 115,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/router.ts#L115"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "58e6a686",
      "interpretation": {
        "sig": "58e6a686",
        "summary": "Updates the fields (subject, body, recipients) of an existing draft, verifying it belongs to the given matter and blocking edits once the draft's status is `SENDING`.",
        "models": [
          {
            "model": "MessageDraft",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:adminProfile.get",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "adminProfile.get",
      "module": "adminProfile",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetAdminProfileInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/adminProfile/admin-profile-controller.ts",
        "line": 63,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/adminProfile/admin-profile-controller.ts#L63"
      },
      "router": {
        "file": "services/identity-service/src/adminProfile/admin-profile-controller.ts",
        "line": 100,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/adminProfile/admin-profile-controller.ts#L100"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b1f5705c",
      "interpretation": {
        "sig": "b1f5705c",
        "summary": "Looks up one `AdminProfile` by `identityId` and returns it with the linked identity's name and email. Returns null if no profile exists for that identity.",
        "models": [
          {
            "model": "AdminProfile",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:adminProfile.list",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "adminProfile.list",
      "module": "adminProfile",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListAdminProfilesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/adminProfile/admin-profile-controller.ts",
        "line": 72,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/adminProfile/admin-profile-controller.ts#L72"
      },
      "router": {
        "file": "services/identity-service/src/adminProfile/admin-profile-controller.ts",
        "line": 101,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/adminProfile/admin-profile-controller.ts#L101"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4e047b16",
      "interpretation": {
        "sig": "4e047b16",
        "summary": "Lists `AdminProfiles`, newest first, each with the linked identity's name and email. Can filter to only active or only inactive profiles.",
        "models": [
          {
            "model": "AdminProfile",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:adminProfile.permissions",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "adminProfile.permissions",
      "module": "adminProfile",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetAdminPermissionsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/adminProfile/admin-profile-controller.ts",
        "line": 83,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/adminProfile/admin-profile-controller.ts#L83"
      },
      "router": {
        "file": "services/identity-service/src/adminProfile/admin-profile-controller.ts",
        "line": 102,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/adminProfile/admin-profile-controller.ts#L102"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "fb0c3ca8",
      "interpretation": {
        "sig": "fb0c3ca8",
        "summary": "Resolves what an identity is allowed to do as an admin: looks up their `AdminProfile`, expands their roles into grants, and returns the markets they can act in (all markets if they hold a super-admin role). Returns no grants if the profile is missing or inactive.",
        "models": [
          {
            "model": "AdminProfile",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:adminProfile.provision",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "adminProfile.provision",
      "module": "adminProfile",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ProvisionAdminProfileInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/adminProfile/admin-profile-controller.ts",
        "line": 87,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/adminProfile/admin-profile-controller.ts#L87"
      },
      "router": {
        "file": "services/identity-service/src/adminProfile/admin-profile-controller.ts",
        "line": 103,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/adminProfile/admin-profile-controller.ts#L103"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "215072ac",
      "interpretation": {
        "sig": "215072ac",
        "summary": "Publishes an `adminProfile.provisioned` event; the actual write happens in a separate event handler, which creates the `AdminProfile` (with default roles/markets depending on whether the identity is new) or leaves an existing one untouched. Nothing currently calls this procedure.",
        "models": [
          {
            "model": "AdminProfile",
            "service": "identity-service"
          }
        ],
        "flags": [
          "mutation only reads",
          "usage.dead"
        ]
      }
    },
    {
      "id": "identity-service:adminProfile.upsert",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "adminProfile.upsert",
      "module": "adminProfile",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpsertAdminProfileInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/adminProfile/admin-profile-controller.ts",
        "line": 91,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/adminProfile/admin-profile-controller.ts#L91"
      },
      "router": {
        "file": "services/identity-service/src/adminProfile/admin-profile-controller.ts",
        "line": 104,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/adminProfile/admin-profile-controller.ts#L104"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "12407fc6",
      "interpretation": {
        "sig": "12407fc6",
        "summary": "Publishes an `adminProfile.upserted` event; the event handler creates or updates the `AdminProfile` with the given roles and markets and marks it active, which is also how a deactivated admin gets reactivated.",
        "models": [
          {
            "model": "AdminProfile",
            "service": "identity-service"
          }
        ],
        "flags": [
          "mutation only reads"
        ]
      }
    },
    {
      "id": "identity-service:adminProfile.deactivate",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "adminProfile.deactivate",
      "module": "adminProfile",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "DeactivateAdminProfileInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/adminProfile/admin-profile-controller.ts",
        "line": 95,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/adminProfile/admin-profile-controller.ts#L95"
      },
      "router": {
        "file": "services/identity-service/src/adminProfile/admin-profile-controller.ts",
        "line": 105,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/adminProfile/admin-profile-controller.ts#L105"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "306f93db",
      "interpretation": {
        "sig": "306f93db",
        "summary": "Publishes an `adminProfile.deactivated` event; the event handler sets the matching `AdminProfile`'s `isActive` to false, revoking their admin access. Throws if no profile exists for that identity.",
        "models": [
          {
            "model": "AdminProfile",
            "service": "identity-service"
          }
        ],
        "flags": [
          "mutation only reads"
        ]
      }
    },
    {
      "id": "identity-service:conflictCheck.create",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "conflictCheck.create",
      "module": "conflictCheck",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateConflictCheckInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/conflict-check/procedures/create.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/procedures/create.mutation.ts#L8"
      },
      "router": {
        "file": "services/identity-service/src/conflict-check/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/router.ts#L12"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "30e21be2",
      "interpretation": {
        "sig": "30e21be2",
        "summary": "Opens a new conflict check record for a firm, tied to the creating user, with no search or attachments yet.",
        "models": [
          {
            "model": "ConflictCheck",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:conflictCheck.update",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "conflictCheck.update",
      "module": "conflictCheck",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateConflictCheckInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/conflict-check/procedures/update.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/procedures/update.mutation.ts#L10"
      },
      "router": {
        "file": "services/identity-service/src/conflict-check/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/router.ts#L13"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "fe21d97e",
      "interpretation": {
        "sig": "fe21d97e",
        "summary": "Edits an in-progress conflict check's fields, blocked once the check is `COMPLETED` (checks it exists and is still active first).",
        "models": [
          {
            "model": "ConflictCheck",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:conflictCheck.complete",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "conflictCheck.complete",
      "module": "conflictCheck",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CompleteConflictCheckInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/conflict-check/procedures/complete.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/procedures/complete.mutation.ts#L10"
      },
      "router": {
        "file": "services/identity-service/src/conflict-check/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/router.ts#L14"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d646ea26",
      "interpretation": {
        "sig": "d646ea26",
        "summary": "Marks an active conflict check `COMPLETED`, recording who completed it and when; fails if it's already completed or missing.",
        "models": [
          {
            "model": "ConflictCheck",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:conflictCheck.delete",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "conflictCheck.delete",
      "module": "conflictCheck",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "DeleteConflictCheckInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/conflict-check/procedures/delete.mutation.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/procedures/delete.mutation.ts#L9"
      },
      "router": {
        "file": "services/identity-service/src/conflict-check/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/router.ts#L15"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "466bb142",
      "interpretation": {
        "sig": "466bb142",
        "summary": "Soft-deletes an active, non-completed conflict check by stamping `deletedAt`/`deletedById`; returns just the id, not used by any app (service-to-service only).",
        "models": [
          {
            "model": "ConflictCheck",
            "service": "identity-service"
          }
        ],
        "flags": [
          "not used by apps"
        ]
      }
    },
    {
      "id": "identity-service:conflictCheck.get",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "conflictCheck.get",
      "module": "conflictCheck",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetConflictCheckInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/conflict-check/procedures/get.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/procedures/get.query.ts#L9"
      },
      "router": {
        "file": "services/identity-service/src/conflict-check/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/router.ts#L16"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "21252114",
      "interpretation": {
        "sig": "21252114",
        "summary": "Fetches one conflict check by id and firm, with its attachments, creator, completer, and search, optionally including soft-deleted ones.",
        "models": [
          {
            "model": "ConflictCheck",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:conflictCheck.list",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "conflictCheck.list",
      "module": "conflictCheck",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListConflictCheckInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/conflict-check/procedures/list.query.ts",
        "line": 43,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/procedures/list.query.ts#L43"
      },
      "router": {
        "file": "services/identity-service/src/conflict-check/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/router.ts#L17"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d38ec720",
      "interpretation": {
        "sig": "d38ec720",
        "summary": "Lists a firm's conflict checks with paging and sort, filterable by status, outcome, deleted state, or whether they have an active matter attachment.",
        "models": [
          {
            "model": "ConflictCheck",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:conflictCheck.saveSearch",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "conflictCheck.saveSearch",
      "module": "conflictCheck",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "SaveSearchInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/conflict-check/procedures/save-search.mutation.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/procedures/save-search.mutation.ts#L9"
      },
      "router": {
        "file": "services/identity-service/src/conflict-check/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/router.ts#L18"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f3e0cfa1",
      "interpretation": {
        "sig": "f3e0cfa1",
        "summary": "Stores (or replaces) the conflict search terms and results run against an active conflict check, recording which contacts matched, then returns the updated check. Not called from any app, only from services.",
        "models": [
          {
            "model": "ConflictCheck",
            "service": "identity-service"
          },
          {
            "model": "ConflictCheckSearch",
            "service": "identity-service"
          }
        ],
        "flags": [
          "not used by apps"
        ]
      }
    },
    {
      "id": "identity-service:conflictCheck.attach",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "conflictCheck.attach",
      "module": "conflictCheck",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "AttachConflictCheckInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/conflict-check/procedures/attach.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/procedures/attach.mutation.ts#L10"
      },
      "router": {
        "file": "services/identity-service/src/conflict-check/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/router.ts#L19"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "aea3d74e",
      "interpretation": {
        "sig": "aea3d74e",
        "summary": "Links a matter to a conflict check, only once that check is `COMPLETED`, and rejects duplicate attachments of the same matter.",
        "models": [
          {
            "model": "ConflictCheck",
            "service": "identity-service"
          },
          {
            "model": "ConflictCheckAttachment",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:conflictCheck.detach",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "conflictCheck.detach",
      "module": "conflictCheck",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "DetachConflictCheckInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/conflict-check/procedures/detach.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/procedures/detach.mutation.ts#L10"
      },
      "router": {
        "file": "services/identity-service/src/conflict-check/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/router.ts#L20"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "96d98d2e",
      "interpretation": {
        "sig": "96d98d2e",
        "summary": "Soft-deletes a matter's attachment from a completed conflict check, throwing if the check isn't completed or the attachment doesn't exist.",
        "models": [
          {
            "model": "ConflictCheck",
            "service": "identity-service"
          },
          {
            "model": "ConflictCheckAttachment",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:contact.create",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "contact.create",
      "module": "contact",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateContactInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/contact/procedures/create.mutation.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/create.mutation.ts#L22"
      },
      "router": {
        "file": "services/identity-service/src/contact/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/router.ts#L18"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "fe6482ed",
      "interpretation": {
        "sig": "fe6482ed",
        "summary": "Creates a new `Contact` (individual or company) in a firm along with its emails, phones, and addresses, in one transaction.",
        "models": [
          {
            "model": "Contact",
            "service": "identity-service"
          },
          {
            "model": "ContactMethod",
            "service": "identity-service"
          },
          {
            "model": "ContactAddress",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:contact.ensureForIdentity",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "contact.ensureForIdentity",
      "module": "contact",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "EnsureContactForIdentityInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/contact/procedures/ensure-for-identity.mutation.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/ensure-for-identity.mutation.ts#L21"
      },
      "router": {
        "file": "services/identity-service/src/contact/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/router.ts#L19"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "56878dd1",
      "interpretation": {
        "sig": "56878dd1",
        "summary": "Finds the `Contact` already linked to an identity+firm pair, or creates one (backfilling name/email/phone from the `Identity` record), so callers get an idempotent contact for that person at that firm.",
        "models": [
          {
            "model": "Contact",
            "service": "identity-service"
          },
          {
            "model": "Identity",
            "service": "identity-service"
          },
          {
            "model": "ContactMethod",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:contact.copyToFirm",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "contact.copyToFirm",
      "module": "contact",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CopyContactToFirmInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/contact/procedures/copy-to-firm.mutation.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/copy-to-firm.mutation.ts#L24"
      },
      "router": {
        "file": "services/identity-service/src/contact/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/router.ts#L20"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ec91fb75",
      "interpretation": {
        "sig": "ec91fb75",
        "summary": "Copies one or more contacts from a source firm into a destination firm, reusing an existing contact if one already matches by `identityId` or primary email, otherwise creating a new `Contact` with its methods and addresses.",
        "models": [
          {
            "model": "Contact",
            "service": "identity-service"
          },
          {
            "model": "ContactMethod",
            "service": "identity-service"
          },
          {
            "model": "ContactAddress",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:contact.update",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "contact.update",
      "module": "contact",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateContactInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/contact/procedures/update.mutation.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/update.mutation.ts#L26"
      },
      "router": {
        "file": "services/identity-service/src/contact/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/router.ts#L21"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9de80a07",
      "interpretation": {
        "sig": "9de80a07",
        "summary": "Updates a contact's individual/company details, notes, emails, phones, and addresses, then fires `ContactEventService` events recording what changed (individual fields, methods, addresses) for the audit history.",
        "models": [
          {
            "model": "Contact",
            "service": "identity-service"
          },
          {
            "model": "ContactMethod",
            "service": "identity-service"
          },
          {
            "model": "ContactAddress",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:contact.list",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "contact.list",
      "module": "contact",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListContactInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/contact/procedures/list.query.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list.query.ts#L31"
      },
      "router": {
        "file": "services/identity-service/src/contact/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/router.ts#L22"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4e2ccf41",
      "interpretation": {
        "sig": "4e2ccf41",
        "summary": "Lists contacts for a firm with filtering (by identity, search term, state, type, parent/child relation) and pagination, returning flattened contact rows and a total count.",
        "models": [
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:contact.listByIds",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "contact.listByIds",
      "module": "contact",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListContactsByIdsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/contact/procedures/list-by-ids.query.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list-by-ids.query.ts#L17"
      },
      "router": {
        "file": "services/identity-service/src/contact/router.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/router.ts#L23"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5523700b",
      "interpretation": {
        "sig": "5523700b",
        "summary": "Fetches a specific set of active contacts by id, scoped to a list of firms.",
        "models": [
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:contact.listForConflictCheck",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "contact.listForConflictCheck",
      "module": "contact",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListContactsForConflictCheckInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/contact/procedures/list-for-conflict-check.query.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list-for-conflict-check.query.ts#L19"
      },
      "router": {
        "file": "services/identity-service/src/contact/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/router.ts#L24"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3c908b94",
      "interpretation": {
        "sig": "3c908b94",
        "summary": "Looks up active contacts across a set of firms that match given search terms, for use in a conflict-of-interest check before taking on a matter.",
        "models": [
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:contact.get",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "contact.get",
      "module": "contact",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetContactInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/contact/procedures/get.query.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/get.query.ts#L20"
      },
      "router": {
        "file": "services/identity-service/src/contact/router.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/router.ts#L25"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "bc1008cb",
      "interpretation": {
        "sig": "bc1008cb",
        "summary": "Fetches a single contact by id with its individual/company details, methods, and addresses, or throws `NOT_FOUND`.",
        "models": [
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:contact.delete",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "contact.delete",
      "module": "contact",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "DeleteInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/contact/procedures/delete.mutation.ts",
        "line": 42,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/delete.mutation.ts#L42"
      },
      "router": {
        "file": "services/identity-service/src/contact/router.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/router.ts#L26"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3ce96e3b",
      "interpretation": {
        "sig": "3ce96e3b",
        "summary": "Soft-deletes a contact by setting its state to `DELETED` and removes any parent/child `ContactRelation` rows involving it.",
        "models": [
          {
            "model": "Contact",
            "service": "identity-service"
          },
          {
            "model": "ContactRelation",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:contact.restore",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "contact.restore",
      "module": "contact",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "RestoreContactInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/contact/procedures/restore.mutation.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/restore.mutation.ts#L9"
      },
      "router": {
        "file": "services/identity-service/src/contact/router.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/router.ts#L27"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "108fcc07",
      "interpretation": {
        "sig": "108fcc07",
        "summary": "Restores a soft-deleted contact by setting its state back to `ACTIVE`; rejects if the contact isn't currently `DELETED`.",
        "models": [
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:contact.searchWithRelations",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "contact.searchWithRelations",
      "module": "contact",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "SearchContactsWithRelationsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/contact/procedures/search-with-relations.query.ts",
        "line": 107,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/search-with-relations.query.ts#L107"
      },
      "router": {
        "file": "services/identity-service/src/contact/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/router.ts#L28"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3def6ac1",
      "interpretation": {
        "sig": "3def6ac1",
        "summary": "Searches active contacts in a firm and expands each into one row per parent-company relation (plus a standalone row), so a picker UI can show a contact alongside each company it's related to, with results de-duplicated by an exclude list.",
        "models": [
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:contact.getHistory",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "contact.getHistory",
      "module": "contact",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/contact/procedures/getContactHistory.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/getContactHistory.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/contact/router.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/router.ts#L29"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "498470bd",
      "interpretation": {
        "sig": "498470bd",
        "summary": "Returns the recorded change history for a contact by delegating to the event client's history lookup; it does not query Prisma directly.",
        "flags": [
          "mechanism-differs-from-storage"
        ]
      }
    },
    {
      "id": "identity-service:contact.relations.create",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "contact.relations.create",
      "module": "contact",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateContactRelationInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/contact/procedures/create-relation.mutation.ts",
        "line": 63,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/create-relation.mutation.ts#L63"
      },
      "router": {
        "file": "services/identity-service/src/contact/router.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/router.ts#L31"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "19fe9eab",
      "interpretation": {
        "sig": "19fe9eab",
        "summary": "Links two contacts as parent (must be a `COMPANY`) and child (must be an `INDIVIDUAL`) in the same firm, creating a `ContactRelation` with a role; rejects self-relations, mismatched types, cross-firm pairs, and duplicate relationships.",
        "models": [
          {
            "model": "ContactRelation",
            "service": "identity-service"
          },
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:contact.relations.delete",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "contact.relations.delete",
      "module": "contact",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "DeleteContactRelationInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/contact/procedures/delete-relation.mutation.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/delete-relation.mutation.ts#L9"
      },
      "router": {
        "file": "services/identity-service/src/contact/router.ts",
        "line": 32,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/router.ts#L32"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b46f7cc5",
      "interpretation": {
        "sig": "b46f7cc5",
        "summary": "Deletes a contact relation (parent/child link) by id, or throws `NOT_FOUND` if it doesn't exist.",
        "models": [
          {
            "model": "ContactRelation",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:contact.relations.list",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "contact.relations.list",
      "module": "contact",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListContactRelationsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/contact/procedures/list-relations.query.ts",
        "line": 43,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list-relations.query.ts#L43"
      },
      "router": {
        "file": "services/identity-service/src/contact/router.ts",
        "line": 33,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/router.ts#L33"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7510224a",
      "interpretation": {
        "sig": "7510224a",
        "summary": "Lists the parent/child relations for a contact, optionally filtered by a search term matching either side's name or the relation's role, with pagination and a total count.",
        "models": [
          {
            "model": "ContactRelation",
            "service": "identity-service"
          },
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:field.definitions.create",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "field.definitions.create",
      "module": "field",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateFieldDefinitionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/field/procedures/create-definition.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/create-definition.mutation.ts#L6"
      },
      "router": {
        "file": "services/identity-service/src/field/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/router.ts#L19"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "82159e3e",
      "interpretation": {
        "sig": "82159e3e",
        "summary": "Creates a custom field definition (label, type, constraints) for a firm, checking first that no existing definition has the same label (case-insensitive). The write happens by publishing `definitionCreated` to the event framework, not a direct insert.",
        "models": [
          {
            "model": "FieldDefinition",
            "service": "identity-service"
          }
        ],
        "flags": [
          "write-mechanism:framework-publish"
        ]
      }
    },
    {
      "id": "identity-service:field.definitions.update",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "field.definitions.update",
      "module": "field",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateFieldDefinitionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/field/procedures/update-definition.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/update-definition.mutation.ts#L6"
      },
      "router": {
        "file": "services/identity-service/src/field/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/router.ts#L20"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9219dd1c",
      "interpretation": {
        "sig": "9219dd1c",
        "summary": "Updates a field definition's label, options, or constraints. Rejects the change if the definition is archived, if options are set on a non-`SELECT` field, or if `constraints.type` does not match the field's type; on a label collision it returns `ok:false` instead of writing. The write goes through `definitionUpdated.publish`.",
        "models": [
          {
            "model": "FieldDefinition",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:field.definitions.archive",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "field.definitions.archive",
      "module": "field",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ArchiveFieldDefinitionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/field/procedures/archive-definition.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/archive-definition.mutation.ts#L6"
      },
      "router": {
        "file": "services/identity-service/src/field/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/router.ts#L21"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2f3c1c18",
      "interpretation": {
        "sig": "2f3c1c18",
        "summary": "Marks a field definition as archived (soft-hide) so it stops being offered for new applications. No-ops and returns the existing row if it's already archived; otherwise publishes `definitionArchived`.",
        "models": [
          {
            "model": "FieldDefinition",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:field.definitions.unarchive",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "field.definitions.unarchive",
      "module": "field",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UnarchiveFieldDefinitionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/field/procedures/unarchive-definition.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/unarchive-definition.mutation.ts#L6"
      },
      "router": {
        "file": "services/identity-service/src/field/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/router.ts#L22"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4bb8f808",
      "interpretation": {
        "sig": "4bb8f808",
        "summary": "Restores a previously archived field definition to active use. Returns the row unchanged if it isn't archived; otherwise publishes `definitionUnarchived` to clear `archivedAt`.",
        "models": [
          {
            "model": "FieldDefinition",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:field.definitions.get",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "field.definitions.get",
      "module": "field",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetFieldDefinitionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/field/procedures/get-definition.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/get-definition.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/field/router.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/router.ts#L23"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3c5a9e11",
      "interpretation": {
        "sig": "3c5a9e11",
        "summary": "Looks up one field definition by id, scoped to the firm. Throws `NOT_FOUND` if it doesn't exist for that firm.",
        "models": [
          {
            "model": "FieldDefinition",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:field.definitions.list",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "field.definitions.list",
      "module": "field",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListFieldDefinitionsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/field/procedures/list-definitions.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/list-definitions.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/field/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/router.ts#L24"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ae7edcfe",
      "interpretation": {
        "sig": "ae7edcfe",
        "summary": "Lists a firm's field definitions, optionally filtered to an entity type or a set of ids, and excluding archived ones unless `includeArchived` is set. Ordered by label then creation date.",
        "models": [
          {
            "model": "FieldDefinition",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:field.options.list",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "field.options.list",
      "module": "field",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListOptionsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/field/procedures/list-options.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/list-options.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/field/router.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/router.ts#L27"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2a01c132",
      "interpretation": {
        "sig": "2a01c132",
        "summary": "Lists the options in a `SELECT` field's option set, ordered by position, excluding archived options unless requested.",
        "models": [
          {
            "model": "FieldOption",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:field.options.listForDefinition",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "field.options.listForDefinition",
      "module": "field",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListOptionsForDefinitionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/field/procedures/list-options-for-definition.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/list-options-for-definition.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/field/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/router.ts#L28"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "42f6b818",
      "interpretation": {
        "sig": "42f6b818",
        "summary": "Looks up the option set attached to a field definition and returns its options in order; returns an empty list if the definition has no option set.",
        "models": [
          {
            "model": "FieldOptionSet",
            "service": "identity-service"
          },
          {
            "model": "FieldOption",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:field.applications.apply",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "field.applications.apply",
      "module": "field",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ApplyFieldInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/field/procedures/apply-field.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/apply-field.mutation.ts#L6"
      },
      "router": {
        "file": "services/identity-service/src/field/router.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/router.ts#L31"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2ab450a4",
      "interpretation": {
        "sig": "2ab450a4",
        "summary": "Attaches a field definition to a matter or contact (entity type is derived from the entity id's prefix, e.g. `mat_` or `ctct_`). Idempotent: if a live application for that (firm, definition, entity) already exists it's returned with `noOp` true and nothing is published; otherwise `applicationCreated` fires the write.",
        "models": [
          {
            "model": "FieldDefinition",
            "service": "identity-service"
          },
          {
            "model": "FieldApplication",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:field.applications.bulkApply",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "field.applications.bulkApply",
      "module": "field",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "BulkApplyFieldsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/field/procedures/bulk-apply.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/bulk-apply.mutation.ts#L6"
      },
      "router": {
        "file": "services/identity-service/src/field/router.ts",
        "line": 32,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/router.ts#L32"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "230e95d7",
      "interpretation": {
        "sig": "230e95d7",
        "summary": "Applies several field values to one matter or contact in a single batch: validates each definition and value (existence, not archived, matches entity type, passes type/constraint parsing) then inserts all `FieldApplication` rows in one `createManyAndReturn` call, a direct-Prisma write unlike the single-field procedures which publish events.",
        "models": [
          {
            "model": "FieldDefinition",
            "service": "identity-service"
          },
          {
            "model": "FieldApplication",
            "service": "identity-service"
          }
        ],
        "flags": [
          "write-mechanism:direct-prisma"
        ]
      }
    },
    {
      "id": "identity-service:field.applications.preValidate",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "field.applications.preValidate",
      "module": "field",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "PreValidateFieldValuesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/field/procedures/pre-validate.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/pre-validate.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/field/router.ts",
        "line": 33,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/router.ts#L33"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4a95271d",
      "interpretation": {
        "sig": "4a95271d",
        "summary": "Despite being a mutation, this only checks whether a set of field values would pass validation (definition exists, not archived, applies to the entity type, value parses against constraints) and throws on the first failure; it writes nothing and returns no data on success.",
        "flags": [
          "read-that-writes",
          "mutation only reads"
        ]
      }
    },
    {
      "id": "identity-service:field.applications.remove",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "field.applications.remove",
      "module": "field",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RemoveFieldApplicationInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/field/procedures/remove-application.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/remove-application.mutation.ts#L6"
      },
      "router": {
        "file": "services/identity-service/src/field/router.ts",
        "line": 34,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/router.ts#L34"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "274eb790",
      "interpretation": {
        "sig": "274eb790",
        "summary": "Soft-deletes a field application from a matter or contact. Returns the existing row with `noOp` true if it was already removed; otherwise publishes `applicationDeleted`.",
        "models": [
          {
            "model": "FieldApplication",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:field.applications.setValue",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "field.applications.setValue",
      "module": "field",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "SetFieldValueInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/field/procedures/set-value.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/set-value.mutation.ts#L6"
      },
      "router": {
        "file": "services/identity-service/src/field/router.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/router.ts#L35"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b3f2e998",
      "interpretation": {
        "sig": "b3f2e998",
        "summary": "Sets the value stored on an existing field application (e.g. filling in a matter's custom `TEXT` or `MONEY` field). Confirms the application is live (not deleted) before publishing `valueSet`.",
        "models": [
          {
            "model": "FieldApplication",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:field.applications.clearValue",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "field.applications.clearValue",
      "module": "field",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ClearFieldValueInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/field/procedures/clear-value.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/clear-value.mutation.ts#L6"
      },
      "router": {
        "file": "services/identity-service/src/field/router.ts",
        "line": 36,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/router.ts#L36"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "89b37846",
      "interpretation": {
        "sig": "89b37846",
        "summary": "Clears the stored value on a field application back to empty, without removing the application itself. Confirms the application is live before publishing `valueCleared`.",
        "models": [
          {
            "model": "FieldApplication",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:field.applications.listForEntity",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "field.applications.listForEntity",
      "module": "field",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListEntityFieldsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/field/procedures/list-entity-fields.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/list-entity-fields.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/field/router.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/router.ts#L37"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b91a17a4",
      "interpretation": {
        "sig": "b91a17a4",
        "summary": "Lists every live custom field applied to a matter or contact, each joined with its definition (label, type, constraints, archived state) and its parsed current value; flags `valueHasError` when a stored value no longer matches the expected schema.",
        "models": [
          {
            "model": "FieldApplication",
            "service": "identity-service"
          },
          {
            "model": "FieldDefinition",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firm.create",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firm.create",
      "module": "firm",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateFirmInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firm/procedures/createFirm.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/createFirm.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/firm/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/router.ts#L16"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1319586f",
      "interpretation": {
        "sig": "1319586f",
        "summary": "Creates a new `Firm` row plus its lead firm contact: creates a Clerk user and Identity for the contact, creates their `FirmMember` record marked as lead, and rolls back the firm if any of that fails.",
        "models": [
          {
            "model": "Firm",
            "service": "identity-service"
          },
          {
            "model": "FirmMember",
            "service": "identity-service"
          },
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firm.createMembership",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firm.createMembership",
      "module": "firm",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateFirmMembershipInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firm/procedures/createFirmMembership.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/createFirmMembership.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/firm/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/router.ts#L17"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "b5246d73",
      "interpretation": {
        "sig": "b5246d73",
        "summary": "Adds an existing Identity to an existing Firm as a `FirmMember` with a given role, after checking the firm and identity exist and no membership already exists.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          },
          {
            "model": "Firm",
            "service": "identity-service"
          },
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "identity-service:firm.get",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firm.get",
      "module": "firm",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firm/procedures/getFirm.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6"
      },
      "router": {
        "file": "services/identity-service/src/firm/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/router.ts#L18"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3ccd1899",
      "interpretation": {
        "sig": "3ccd1899",
        "summary": "Returns a firm with its members and their identities, and picks out the lead firm contact. Throws `NOT_FOUND` if the firm has no lead contact or the lead contact has no email.",
        "models": [
          {
            "model": "Firm",
            "service": "identity-service"
          },
          {
            "model": "FirmMember",
            "service": "identity-service"
          },
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firm.list",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firm.list",
      "module": "firm",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListFirmsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firm/procedures/listFirms.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/listFirms.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/firm/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/router.ts#L19"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "129bb53a",
      "interpretation": {
        "sig": "129bb53a",
        "summary": "Lists firms, optionally filtered by a set of firm IDs or by market, each with its lead firm contact attached.",
        "models": [
          {
            "model": "Firm",
            "service": "identity-service"
          },
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firm.listFirmMemberships",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firm.listFirmMemberships",
      "module": "firm",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firm/procedures/list-firm-memberships.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/firm/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/router.ts#L20"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5d888059",
      "interpretation": {
        "sig": "5d888059",
        "summary": "Lists the firms an identity belongs to (excluding deleted memberships), with the member's role and each firm's member count, market and marketplace enrolment status.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          },
          {
            "model": "Firm",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firm.getMarket",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firm.getMarket",
      "module": "firm",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firm/procedures/getFirmMarket.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmMarket.query.ts#L6"
      },
      "router": {
        "file": "services/identity-service/src/firm/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/router.ts#L21"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "6b9a119d",
      "interpretation": {
        "sig": "6b9a119d",
        "summary": "Returns just a firm's market code (GB, US etc.), a narrow lookup used where a full `firm.get` would fail on firms lacking a lead contact.",
        "models": [
          {
            "model": "Firm",
            "service": "identity-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "identity-service:firm.getName",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firm.getName",
      "module": "firm",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firm/procedures/getFirmName.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmName.query.ts#L6"
      },
      "router": {
        "file": "services/identity-service/src/firm/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/router.ts#L22"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "1e5c1f2f",
      "interpretation": {
        "sig": "1e5c1f2f",
        "summary": "Returns just a firm's name by ID.",
        "models": [
          {
            "model": "Firm",
            "service": "identity-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "identity-service:firm.getEnrolledToMarketplace",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firm.getEnrolledToMarketplace",
      "module": "firm",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firm/procedures/getFirmEnrolledToMarketplace.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmEnrolledToMarketplace.query.ts#L6"
      },
      "router": {
        "file": "services/identity-service/src/firm/router.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/router.ts#L23"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ab550d7",
      "interpretation": {
        "sig": "ab550d7",
        "summary": "Returns whether a firm is enrolled to the marketplace.",
        "models": [
          {
            "model": "Firm",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firm.permissions",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firm.permissions",
      "module": "firm",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firm/procedures/get-firm-permissions.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/get-firm-permissions.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/firm/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/router.ts#L24"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2e8ae527",
      "interpretation": {
        "sig": "2e8ae527",
        "summary": "Resolves a firm member's role (`ADMIN`, `LAWYER`, `SUPPORT`) into the set of permission grants they hold at that firm, used by callers to gate firm-scoped actions.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firm.update",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firm.update",
      "module": "firm",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateFirmInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firm/procedures/updateFirm.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/updateFirm.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/firm/router.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/router.ts#L25"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "8cc72923",
      "interpretation": {
        "sig": "8cc72923",
        "summary": "Updates a firm's editable fields and, if a `firmContactId` is given, reassigns which `FirmMember` is the lead firm contact (unsetting the old one first) inside one transaction.",
        "models": [
          {
            "model": "Firm",
            "service": "identity-service"
          },
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firm.admin.get",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firm.admin.get",
      "module": "firm",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firm/procedures/getFirmForAdmin.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmForAdmin.query.ts#L7"
      },
      "router": {
        "file": "services/identity-service/src/firm/router.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/router.ts#L27"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9aa292cc",
      "interpretation": {
        "sig": "9aa292cc",
        "summary": "Admin lookup of a firm by ID (optionally scoped to a market), returning members and the lead firm contact without the stricter contact-email check that `firm.get` enforces.",
        "models": [
          {
            "model": "Firm",
            "service": "identity-service"
          },
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firm.admin.search",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firm.admin.search",
      "module": "firm",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "SearchFirmInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firm/procedures/searchFirms.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/searchFirms.query.ts#L4"
      },
      "router": {
        "file": "services/identity-service/src/firm/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/router.ts#L28"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "8e940033",
      "interpretation": {
        "sig": "8e940033",
        "summary": "Searches firms for admin tooling by firm ID, lead contact identity fields, employer identification number, or name substring match.",
        "models": [
          {
            "model": "Firm",
            "service": "identity-service"
          },
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firm.admin.updateLeadFirmContact",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firm.admin.updateLeadFirmContact",
      "module": "firm",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firm/procedures/updateLeadFirmContact.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/updateLeadFirmContact.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/firm/router.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/router.ts#L29"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "143debf6",
      "interpretation": {
        "sig": "143debf6",
        "summary": "Reassigns a firm's lead firm contact to a different existing `FirmMember`, unmarking the previous lead contact in the same transaction. No-ops if that member is already the lead.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firmBankAccounts.get",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firmBankAccounts.get",
      "module": "firmBankAccounts",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L31"
      },
      "router": {
        "file": "services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts",
        "line": 143,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L143"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e789f883",
      "interpretation": {
        "sig": "e789f883",
        "summary": "Looks up a single firm bank account (`FirmBankAccount`) by `id`, with its `bankMetadata` JSON parsed into the typed shape. Returns null if the id doesn't exist.",
        "models": [
          {
            "model": "FirmBankAccount",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firmBankAccounts.getDefault",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firmBankAccounts.getDefault",
      "module": "firmBankAccounts",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts",
        "line": 43,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L43"
      },
      "router": {
        "file": "services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts",
        "line": 144,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L144"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "6369c758",
      "interpretation": {
        "sig": "6369c758",
        "summary": "Finds the active default bank account for a firm's (role, currency) combination, or null if that default was archived and never replaced. No app or service currently calls this.",
        "models": [
          {
            "model": "FirmBankAccount",
            "service": "identity-service"
          }
        ],
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "identity-service:firmBankAccounts.listForFirm",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firmBankAccounts.listForFirm",
      "module": "firmBankAccounts",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts",
        "line": 64,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L64"
      },
      "router": {
        "file": "services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts",
        "line": 145,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L145"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "29ae41ac",
      "interpretation": {
        "sig": "29ae41ac",
        "summary": "Lists every bank account belonging to a firm, ordered by role, currency, and creation date, each with `bankMetadata` parsed to the typed shape.",
        "models": [
          {
            "model": "FirmBankAccount",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firmBankAccounts.history",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firmBankAccounts.history",
      "module": "firmBankAccounts",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts",
        "line": 74,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L74"
      },
      "router": {
        "file": "services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts",
        "line": 146,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L146"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "5cc88213",
      "interpretation": {
        "sig": "5cc88213",
        "summary": "Fetches the event history for a firm bank account from the event store rather than the database. Nothing currently calls it.",
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "identity-service:firmBankAccounts.create",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firmBankAccounts.create",
      "module": "firmBankAccounts",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts",
        "line": 83,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L83"
      },
      "router": {
        "file": "services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts",
        "line": 148,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L148"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7eafb760",
      "interpretation": {
        "sig": "7eafb760",
        "summary": "Creates a firm bank account by publishing a `firmBankAccount.created` event; if `isDefault` is set and a matching active default already exists (same `firmId`, `role`, `currency`), it returns that existing row instead of creating a duplicate.",
        "models": [
          {
            "model": "FirmBankAccount",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firmBankAccounts.getOrCreateDefault",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firmBankAccounts.getOrCreateDefault",
      "module": "firmBankAccounts",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts",
        "line": 95,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L95"
      },
      "router": {
        "file": "services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts",
        "line": 149,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L149"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "263f9ba6",
      "interpretation": {
        "sig": "263f9ba6",
        "summary": "Resolves the default bank account for a firm's (role, currency) pair, creating it via the created event (marked `isDefault`) if one doesn't exist yet, with an auto-generated name like \"role currency\" when none is given.",
        "models": [
          {
            "model": "FirmBankAccount",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firmBankAccounts.markDefault",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firmBankAccounts.markDefault",
      "module": "firmBankAccounts",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts",
        "line": 110,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L110"
      },
      "router": {
        "file": "services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts",
        "line": 150,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L150"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "43bfd1b8",
      "interpretation": {
        "sig": "43bfd1b8",
        "summary": "Marks the given firm bank account as the default by publishing a `firmBankAccount.markedDefault` event. A partial unique index enforces one default per (`firmId`, `role`, `currency`), so a concurrent race is caught as a Postgres `P2002` violation and surfaced to the caller as a 409 Conflict.",
        "models": [
          {
            "model": "FirmBankAccount",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firmBankAccounts.updateBankMetadata",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firmBankAccounts.updateBankMetadata",
      "module": "firmBankAccounts",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts",
        "line": 127,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L127"
      },
      "router": {
        "file": "services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts",
        "line": 151,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L151"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7d70a9ca",
      "interpretation": {
        "sig": "7d70a9ca",
        "summary": "Publishes a `firmBankAccount.bankMetadataUpdated` event to patch a firm bank account's `bankMetadata` JSON; only the fields supplied overwrite existing values, the rest are left as-is.",
        "models": [
          {
            "model": "FirmBankAccount",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firmBankAccounts.archive",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firmBankAccounts.archive",
      "module": "firmBankAccounts",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts",
        "line": 136,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L136"
      },
      "router": {
        "file": "services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts",
        "line": 152,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L152"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d0ddc708",
      "interpretation": {
        "sig": "d0ddc708",
        "summary": "Archives a firm bank account by publishing a `firmBankAccount.archived` event, which sets status `ARCHIVED` and `isDefault` false while keeping the row for history.",
        "models": [
          {
            "model": "FirmBankAccount",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:identity.get",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "identity.get",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetIdentityInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/identity/procedures/getIdentity.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/identity/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/router.ts#L15"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "74339a83",
      "interpretation": {
        "sig": "74339a83",
        "summary": "Looks up a single `Identity` by `id` and returns it enriched with reviews, credentials, firm memberships and a computed average rating and full name.",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:identity.internal.get",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "identity.internal.get",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetIdentityInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/identity/procedures/getIdentityInternal.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentityInternal.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/identity/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/router.ts#L17"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "db92eea1",
      "interpretation": {
        "sig": "db92eea1",
        "summary": "Same lookup as `identity.get` (identity plus reviews, credentials, firm memberships, average rating, full name), exposed on the pre-auth internal route for callers without a user JWT.",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:identity.list",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "identity.list",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListIdentitiesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/identity/procedures/listIdentities.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/identity/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/router.ts#L19"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "8afa2d8b",
      "interpretation": {
        "sig": "8afa2d8b",
        "summary": "Returns a paginated, filterable, sortable list of `Identity` records (by id, name/email/phone search, deleted flag, firm and role), each enriched with full name, plus a total count.",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:identity.update",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "identity.update",
      "module": "identity",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateIdentityInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/identity/procedures/updateIdentity.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/updateIdentity.mutation.ts#L6"
      },
      "router": {
        "file": "services/identity-service/src/identity/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/router.ts#L20"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "388b6e19",
      "interpretation": {
        "sig": "388b6e19",
        "summary": "Updates an `Identity`'s editable fields in the database, and when contact email, phone or name actually changed, pushes the same change to the matching Clerk user (new email/phone/name, removing old ones) and records an identity-updated event with the field diffs.",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ],
        "flags": [
          "also writes to Clerk"
        ]
      }
    },
    {
      "id": "identity-service:identity.delete",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "identity.delete",
      "module": "identity",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/identity/procedures/deleteIdentity.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/deleteIdentity.mutation.ts#L6"
      },
      "router": {
        "file": "services/identity-service/src/identity/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/router.ts#L21"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "73fa3a65",
      "interpretation": {
        "sig": "73fa3a65",
        "summary": "Soft-deletes an `Identity` (sets `isDeleted` true) and removes its Clerk credential and user account first; no-ops quietly if the identity is already gone.",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          },
          {
            "model": "Credential",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:identity.ensureIdentitiesSynced",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "identity.ensureIdentitiesSynced",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "write",
        "discrepancy": true
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/identity/procedures/ensureIdentitiesSynced.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/ensureIdentitiesSynced.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/identity/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/router.ts#L22"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "6416784b",
      "interpretation": {
        "sig": "6416784b",
        "summary": "Named and typed as a query but actually writes: for any of the given identities not yet subscribed in Knock, it calls Knock to identify the user and sets `knockSubscribed` true in the database. Nothing currently calls this route (`identity.ensurePeopleSynced` is the live alias).",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ],
        "flags": [
          "read-that-writes",
          "looks unused"
        ]
      }
    },
    {
      "id": "identity-service:identity.admin.search",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "identity.admin.search",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "SearchIdentityInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/identity/procedures/searchIdentities.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/searchIdentities.query.ts#L7"
      },
      "router": {
        "file": "services/identity-service/src/identity/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/router.ts#L24"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "8f0d72a6",
      "interpretation": {
        "sig": "8f0d72a6",
        "summary": "Free-text search across `Identity` records by name, email, phone, person id or Stripe customer id, returning matches enriched with full name.",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:identity.admin.updateAssignmentAvailabilityStatus",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "identity.admin.updateAssignmentAvailabilityStatus",
      "module": "identity",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateAssignmentAvailabilityStatusInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/identity/procedures/updateAssignmentAvailabilityStatus.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/updateAssignmentAvailabilityStatus.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/identity/router.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/router.ts#L25"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [
        "platform-api/entityActivity.registered"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "acd9ac47",
      "interpretation": {
        "sig": "acd9ac47",
        "summary": "Sets an `Identity`'s lawyer assignment availability status and publishes an `entityActivity.registered` event so the status change (with old value struck through) shows up as a note on the identity's activity log.",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:identity.getOrCreateFromEmail",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "identity.getOrCreateFromEmail",
      "module": "identity",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateIdentityInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/identity/procedures/getOrCreateFromEmail.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getOrCreateFromEmail.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/identity/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/router.ts#L28"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "17718193",
      "interpretation": {
        "sig": "17718193",
        "summary": "Returns the existing `Identity` matching the given contact email, or creates a new `USER`-type identity with no login credentials if none exists yet. Used to turn LAS SavvyCal organisers into identities.",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:identity.getIdentities",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "identity.getIdentities",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetIdentitiesInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/identity/procedures/getIdentities.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentities.query.ts#L8"
      },
      "router": {
        "file": "services/identity-service/src/identity/router.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/router.ts#L29"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "82578e15",
      "interpretation": {
        "sig": "82578e15",
        "summary": "Fetches a fixed set of `Identity` records by id (or legacy `personId`) and returns just id, name fields, image and computed full name.",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:identity.listIdentitiesByEmail",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "identity.listIdentitiesByEmail",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/identity/procedures/listIdentitiesByEmail.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentitiesByEmail.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/identity/router.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/router.ts#L30"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "b635f6c7",
      "interpretation": {
        "sig": "b635f6c7",
        "summary": "Looks up `Identity` records matching a list of emails and returns them with full name computed. Marked dead: nothing in apps or services currently calls it (`identity.listPeopleByEmail` is the live path for the same underlying service).",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "identity-service:identity.getHistory",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "identity.getHistory",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/identity/procedures/getIdentityHistory.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentityHistory.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/identity/router.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/router.ts#L31"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d1743301",
      "interpretation": {
        "sig": "d1743301",
        "summary": "Returns the audit/event history for an identity by delegating to the event client's history lookup; no direct database read here.",
        "models": []
      }
    },
    {
      "id": "identity-service:identity.getPeople",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "identity.getPeople",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetIdentitiesInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/identity-service/src/identity/procedures/getIdentities.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentities.query.ts#L8"
      },
      "router": {
        "file": "services/identity-service/src/identity/router.ts",
        "line": 33,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/router.ts#L33"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a36adbf6",
      "interpretation": {
        "sig": "a36adbf6",
        "summary": "Same as `identity.getIdentities`: fetches a fixed set of `Identity` records by id and returns id, name fields, image and full name, under the \"people\" alias.",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:identity.listPeopleByEmail",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "identity.listPeopleByEmail",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/identity/procedures/listIdentitiesByEmail.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentitiesByEmail.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/identity/router.ts",
        "line": 34,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/router.ts#L34"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "237deb72",
      "interpretation": {
        "sig": "237deb72",
        "summary": "Looks up `Identity` records matching a list of emails and returns them enriched with full name, under the \"people\" alias for `listIdentitiesByEmail`.",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:identity.ensurePeopleSynced",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "identity.ensurePeopleSynced",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "write",
        "discrepancy": true
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/identity/procedures/ensureIdentitiesSynced.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/ensureIdentitiesSynced.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/identity/router.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/router.ts#L35"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7855ffe4",
      "interpretation": {
        "sig": "7855ffe4",
        "summary": "Named and typed as a query but actually writes: for the given identities, syncs any not yet subscribed to Knock (calls Knock, then sets `knockSubscribed` true in the database). This is the \"people\" alias that services actually call.",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ],
        "flags": [
          "read-that-writes"
        ]
      }
    },
    {
      "id": "identity-service:review.createReview",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "review.createReview",
      "module": "review",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateReviewSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/review/procedures/createReview.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/review/procedures/createReview.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/review/router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/review/router.ts#L8"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d88f7b73",
      "interpretation": {
        "sig": "d88f7b73",
        "summary": "Creates a `Review` of one identity by another. If the same reviewer left a review for the same source in the last 7 days, marks the earlier ones superseded (excluded from the public rating and hidden) before inserting the new row.",
        "models": [
          {
            "model": "Review",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:review.getReview",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "review.getReview",
      "module": "review",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetReviewSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/review/procedures/getReview.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/review/procedures/getReview.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/review/router.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/review/router.ts#L9"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ee118c61",
      "interpretation": {
        "sig": "ee118c61",
        "summary": "Looks up the most recent `Review` a caller left for a given review source and reviewed identity. Returns null if none exists.",
        "models": [
          {
            "model": "Review",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:review.listIdentityReviews",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "review.listIdentityReviews",
      "module": "review",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListIdentityReviewsSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/review/procedures/listIdentityReviews.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/review/procedures/listIdentityReviews.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/review/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/review/router.ts#L10"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "255f635b",
      "interpretation": {
        "sig": "255f635b",
        "summary": "Paginated list of `Review`s for an identity, filterable by rating range, visibility, and whether they count toward the overall rating. Nothing in the codebase calls it.",
        "models": [
          {
            "model": "Review",
            "service": "identity-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "identity-service:review.updateReview",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "review.updateReview",
      "module": "review",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateReviewSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/review/procedures/updateReview.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/review/procedures/updateReview.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/review/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/review/router.ts#L11"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "334b7ef",
      "interpretation": {
        "sig": "334b7ef",
        "summary": "Updates an existing `Review`'s fields (rating, text, visibility, etc.) by id.",
        "models": [
          {
            "model": "Review",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:review.getRatingAverage",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "review.getRatingAverage",
      "module": "review",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/review/procedures/getRatingAverage.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/review/procedures/getRatingAverage.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/review/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/review/router.ts#L12"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6a3a412f",
      "interpretation": {
        "sig": "6a3a412f",
        "summary": "Returns an identity's average rating (rounded to 2 decimals) and total review count, counting only `Review`s flagged `shouldCountTowardsOverallRating`.",
        "models": [
          {
            "model": "Review",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:review.listPersonReviews",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "review.listPersonReviews",
      "module": "review",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListIdentityReviewsSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/review/procedures/listIdentityReviews.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/review/procedures/listIdentityReviews.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/review/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/review/router.ts#L14"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "351deab8",
      "interpretation": {
        "sig": "351deab8",
        "summary": "Same handler as `listIdentityReviews`: a paginated, filterable list of `Review`s for an identity. Registered under a second procedure name pointing at identical code.",
        "models": [
          {
            "model": "Review",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firmMember.listFirmMembers",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firmMember.listFirmMembers",
      "module": "firmMember",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListFirmMembersInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firmMember/procedures/listFirmMembers.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/listFirmMembers.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/firmMember/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/router.ts#L12"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "720a8273",
      "interpretation": {
        "sig": "720a8273",
        "summary": "Lists firm members with filters (firm, market, role, identity search, deactivated) and pagination, returning identities with their legal registrations. Read-only, called by other services rather than apps directly.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          },
          {
            "model": "Identity",
            "service": "identity-service"
          },
          {
            "model": "Firm",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firmMember.getFirmMember",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firmMember.getFirmMember",
      "module": "firmMember",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firmMember/procedures/getFirmMember.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getFirmMember.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/firmMember/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/router.ts#L13"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "be70001",
      "interpretation": {
        "sig": "be70001",
        "summary": "Fetches a single firm member by id along with their firm and identity, computing an average rating from received reviews. Throws `NOT_FOUND` if deactivated and `includeDeactivated` isn't set.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          },
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firmMember.internal.getByFirmIdentity",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firmMember.internal.getByFirmIdentity",
      "module": "firmMember",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetByFirmIdentityInternalInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firmMember/procedures/getByFirmIdentityInternal.query.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getByFirmIdentityInternal.query.ts#L10"
      },
      "router": {
        "file": "services/identity-service/src/firmMember/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/router.ts#L15"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "c492c8a1",
      "interpretation": {
        "sig": "c492c8a1",
        "summary": "Pre-auth internal lookup of a firm member by firm id and identity id, used for service-to-service calls before a full session exists.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firmMember.updateFirmMember",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firmMember.updateFirmMember",
      "module": "firmMember",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateFirmMemberInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firmMember/procedures/updateFirmMember.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/updateFirmMember.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/firmMember/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/router.ts#L17"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e5634fbb",
      "interpretation": {
        "sig": "e5634fbb",
        "summary": "Updates a firm member's role and job title in Prisma, then updates the linked identity (name/contact fields via Clerk) and, if provided, replaces their legal registrations.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          },
          {
            "model": "Identity",
            "service": "identity-service"
          },
          {
            "model": "LegalRegistration",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firmMember.updateRole",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firmMember.updateRole",
      "module": "firmMember",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateRoleInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firmMember/procedures/updateRole.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/updateRole.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/firmMember/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/router.ts#L18"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "268b720b",
      "interpretation": {
        "sig": "268b720b",
        "summary": "Changes a firm member's role field directly in the database. No side effects beyond the write.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firmMember.createFirmMemberAndIdentity",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firmMember.createFirmMemberAndIdentity",
      "module": "firmMember",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateFirmMemberByEmailInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firmMember/procedures/createFirmMemberAndIdentity.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/createFirmMemberAndIdentity.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/firmMember/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/router.ts#L19"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4e58c10b",
      "interpretation": {
        "sig": "4e58c10b",
        "summary": "Creates a Clerk user for a new identity by email, optionally adds legal registrations, then creates the `FirmMember` row linking that identity to a firm with a role and job title.",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          },
          {
            "model": "FirmMember",
            "service": "identity-service"
          },
          {
            "model": "LegalRegistration",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firmMember.createFirmMemberAndPerson",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firmMember.createFirmMemberAndPerson",
      "module": "firmMember",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateFirmMemberByEmailInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firmMember/procedures/createFirmMemberAndIdentity.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/createFirmMemberAndIdentity.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/firmMember/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/router.ts#L21"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d99a234",
      "interpretation": {
        "sig": "d99a234",
        "summary": "Same backward-compat path as `createFirmMemberAndIdentity`: creates the Clerk identity, optional legal registrations, and the `FirmMember` record for a firm.",
        "flags": [
          "duplicate-of-createFirmMemberAndIdentity"
        ],
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          },
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firmMember.delete",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firmMember.delete",
      "module": "firmMember",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "DeleteFirmMemberInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firmMember/procedures/deleteFirmMember.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/deleteFirmMember.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/firmMember/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/router.ts#L22"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f6fae401",
      "interpretation": {
        "sig": "f6fae401",
        "summary": "Soft-deletes a firm member by setting `isDeleted` true. If it was the identity's last active firm membership, also removes them from Knock and marks the identity as not Knock-subscribed.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          },
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firmMember.reactivate",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firmMember.reactivate",
      "module": "firmMember",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firmMember/procedures/reactivateFirmMember.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/reactivateFirmMember.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/firmMember/router.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/router.ts#L23"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d2177409",
      "interpretation": {
        "sig": "d2177409",
        "summary": "Restores a soft-deleted firm member (`isDeleted` false), then re-syncs the identity to Knock. Errors if the member isn't currently deactivated.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          },
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firmMember.getByFirmIdentity",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firmMember.getByFirmIdentity",
      "module": "firmMember",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetByFirmIdentityInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firmMember/procedures/getByFirmIdentity.query.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getByFirmIdentity.query.ts#L21"
      },
      "router": {
        "file": "services/identity-service/src/firmMember/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/router.ts#L24"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "75c792ef",
      "interpretation": {
        "sig": "75c792ef",
        "summary": "Looks up a firm member by firm id and identity id (accepts legacy `personId` too), returning `NOT_FOUND` if no match.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firmMember.getByFirmPerson",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firmMember.getByFirmPerson",
      "module": "firmMember",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetByFirmIdentityInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firmMember/procedures/getByFirmIdentity.query.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getByFirmIdentity.query.ts#L21"
      },
      "router": {
        "file": "services/identity-service/src/firmMember/router.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/router.ts#L26"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d5589282",
      "interpretation": {
        "sig": "d5589282",
        "summary": "Backward-compat alias of `getByFirmIdentity`: same lookup of a firm member by firm and identity/person id.",
        "flags": [
          "duplicate-of-getByFirmIdentity"
        ],
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:credential.createClerkUser",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "credential.createClerkUser",
      "module": "credential",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateIdentityInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/credential/procedures/createClerkUserMutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/credential/procedures/createClerkUserMutation.ts#L6"
      },
      "router": {
        "file": "services/identity-service/src/credential/router.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/credential/router.ts#L9"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "17f4c8d3",
      "interpretation": {
        "sig": "17f4c8d3",
        "summary": "Creates a Clerk account for a new user (reusing one if the email already has a Clerk user), then creates the matching local `Identity` row and syncs it to Knock. Returns the new `clerkUserId` and `identityId`.",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          },
          {
            "model": "Credential",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:credential.getFirmMemberIdentityByClerkId",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "credential.getFirmMemberIdentityByClerkId",
      "module": "credential",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/credential/procedures/getFirmMemberIdentityByClerkId.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/credential/procedures/getFirmMemberIdentityByClerkId.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/credential/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/credential/router.ts#L10"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "aa2985a5",
      "interpretation": {
        "sig": "aa2985a5",
        "summary": "Looks up the `Identity` behind a given Clerk user id and returns its name, contact details, and firm membership count. Nothing in the codebase calls this procedure.",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          },
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "identity-service:credential.getFirmMemberIdentityByPersonId",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "credential.getFirmMemberIdentityByPersonId",
      "module": "credential",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/credential/procedures/getFirmMemberIdentityByPersonId.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/credential/procedures/getFirmMemberIdentityByPersonId.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/credential/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/credential/router.ts#L11"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ebcc3d4b",
      "interpretation": {
        "sig": "ebcc3d4b",
        "summary": "Looks up an `Identity` by its id and returns its name, contact details, active firm membership count, and linked Clerk user id (404s if there's no Clerk credential on the identity).",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          },
          {
            "model": "Credential",
            "service": "identity-service"
          },
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:credential.getFirmMemberPersonByClerkId",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "credential.getFirmMemberPersonByClerkId",
      "module": "credential",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/credential/procedures/getFirmMemberIdentityByClerkId.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/credential/procedures/getFirmMemberIdentityByClerkId.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/credential/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/credential/router.ts#L13"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4247ee28",
      "interpretation": {
        "sig": "4247ee28",
        "summary": "Same lookup as `credential.getFirmMemberIdentityByClerkId` (it shares the same procedure and service file under a different route name): resolves a Clerk user id to an `Identity` with contact details and firm membership count.",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          },
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:credential.getOrCreateFromClerk",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "credential.getOrCreateFromClerk",
      "module": "credential",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "inputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/credential/procedures/getOrCreateFromClerk.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/credential/procedures/getOrCreateFromClerk.mutation.ts#L10"
      },
      "router": {
        "file": "services/identity-service/src/credential/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/credential/router.ts#L14"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6aad0b81",
      "interpretation": {
        "sig": "6aad0b81",
        "summary": "Resolves a Clerk login to a local `Identity`, creating one on first sight. Matches the credential to this Clerk instance (lazy-filling legacy rows missing an instance id, or rejecting the login as misrouted if it's bound to a different instance), and syncs any newly created identity to Knock.",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          },
          {
            "model": "Credential",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:credential.getOrCreateFromAdminClerk",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "credential.getOrCreateFromAdminClerk",
      "module": "credential",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "inputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/credential/procedures/getOrCreateFromAdminClerk.mutation.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/credential/procedures/getOrCreateFromAdminClerk.mutation.ts#L13"
      },
      "router": {
        "file": "services/identity-service/src/credential/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/credential/router.ts#L15"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d7332c2f",
      "interpretation": {
        "sig": "d7332c2f",
        "summary": "Same Clerk-to-Identity resolution as `getOrCreateFromClerk`, but against the admin Clerk client, and runs on every admin tRPC request. If the identity has no `AdminProfile` yet, it provisions one via `AdminProfileService` (swallowing any provisioning error so auth isn't blocked).",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          },
          {
            "model": "Credential",
            "service": "identity-service"
          },
          {
            "model": "AdminProfile",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:credential.admin.dangerRemoveTestClerkUsers",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "credential.admin.dangerRemoveTestClerkUsers",
      "module": "credential",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/credential/procedures/dangerRemoveClerkTestUsers.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/credential/procedures/dangerRemoveClerkTestUsers.ts#L4"
      },
      "router": {
        "file": "services/identity-service/src/credential/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/credential/router.ts#L17"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "350f617",
      "interpretation": {
        "sig": "350f617",
        "summary": "Bulk-deletes example/test Clerk users (matching by search query and inactivity, sparing anyone with a '+test_clerk' email) down to at most 100 remaining, calling the Clerk API directly to delete users. Only runs when the Clerk secret key is a test key; otherwise throws `UNAUTHORIZED`.",
        "flags": [
          "mutation only reads locally, writes via external Clerk API"
        ]
      }
    },
    {
      "id": "identity-service:legalRegistration.update",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "legalRegistration.update",
      "module": "legalRegistration",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/legalRegistrations/procedures/updateLegalRegistrations.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/legalRegistrations/procedures/updateLegalRegistrations.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/legalRegistrations/router.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/legalRegistrations/router.ts#L5"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e1fb74b5",
      "interpretation": {
        "sig": "e1fb74b5",
        "summary": "Replaces an identity's set of legal registrations with the given list: deletes any `jurisdictionId` not in the input, then upserts `registrationNumber` for each jurisdiction supplied. An empty list wipes all legal registrations for that identity.",
        "models": [
          {
            "model": "LegalRegistration",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:legalRegistration.list",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "legalRegistration.list",
      "module": "legalRegistration",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/legalRegistrations/procedures/listLegalRegistrations.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/legalRegistrations/procedures/listLegalRegistrations.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/legalRegistrations/router.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/legalRegistrations/router.ts#L6"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9c32e529",
      "interpretation": {
        "sig": "9c32e529",
        "summary": "Returns all legal registrations (jurisdiction and registration number) recorded for a given identity.",
        "models": [
          {
            "model": "LegalRegistration",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:outOfOfficeSchedule.upsert",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "outOfOfficeSchedule.upsert",
      "module": "outOfOfficeSchedule",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpsertOutOfOfficeScheduleInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/outOfOfficeSchedule/procedures/upsertOutOfOfficeSchedule.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/outOfOfficeSchedule/procedures/upsertOutOfOfficeSchedule.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/outOfOfficeSchedule/router.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/outOfOfficeSchedule/router.ts#L5"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "36681b53",
      "interpretation": {
        "sig": "36681b53",
        "summary": "Creates or updates a team member's out-of-office schedule (start date, end date, message) directly in the database, keyed by identity. Passing an id updates that record, otherwise a new schedule row is created.",
        "models": [
          {
            "model": "OutOfOfficeSchedule",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:outOfOfficeSchedule.getNext",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "outOfOfficeSchedule.getNext",
      "module": "outOfOfficeSchedule",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/outOfOfficeSchedule/procedures/getNextOutOfOfficeSchedule.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/outOfOfficeSchedule/procedures/getNextOutOfOfficeSchedule.query.ts#L4"
      },
      "router": {
        "file": "services/identity-service/src/outOfOfficeSchedule/router.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/outOfOfficeSchedule/router.ts#L6"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ed64488f",
      "interpretation": {
        "sig": "ed64488f",
        "summary": "Looks up the caller's own next (or current) out-of-office schedule, returning the first record whose end date hasn't passed yet.",
        "models": [
          {
            "model": "OutOfOfficeSchedule",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:savedFilterView.list",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "savedFilterView.list",
      "module": "savedFilterView",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "firmMemberProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/savedFilterView/savedFilterView-controller.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/savedFilterView/savedFilterView-controller.ts#L11"
      },
      "router": {
        "file": "services/identity-service/src/savedFilterView/savedFilterView-controller.ts",
        "line": 61,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/savedFilterView/savedFilterView-controller.ts#L61"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9c9d71a1",
      "interpretation": {
        "sig": "9c9d71a1",
        "summary": "Returns the firm member's saved filter views for a given surface (e.g. a matters or clients list), ordered by creation date. Read-only, no state change.",
        "models": [
          {
            "model": "SavedFilterView",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:savedFilterView.create",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "savedFilterView.create",
      "module": "savedFilterView",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "firmMemberProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/savedFilterView/savedFilterView-controller.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/savedFilterView/savedFilterView-controller.ts#L17"
      },
      "router": {
        "file": "services/identity-service/src/savedFilterView/savedFilterView-controller.ts",
        "line": 62,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/savedFilterView/savedFilterView-controller.ts#L62"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "349f8d5c",
      "interpretation": {
        "sig": "349f8d5c",
        "summary": "Saves a new named filter view (surface, name, snapshot of filter state) for the firm member by publishing a created event; the row lands via the event's effect, not a direct write in the procedure.",
        "models": [
          {
            "model": "SavedFilterView",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:savedFilterView.rename",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "savedFilterView.rename",
      "module": "savedFilterView",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "firmMemberProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/savedFilterView/savedFilterView-controller.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/savedFilterView/savedFilterView-controller.ts#L29"
      },
      "router": {
        "file": "services/identity-service/src/savedFilterView/savedFilterView-controller.ts",
        "line": 63,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/savedFilterView/savedFilterView-controller.ts#L63"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3272f88e",
      "interpretation": {
        "sig": "3272f88e",
        "summary": "Renames a saved filter view the firm member owns. Checks ownership first, then publishes a renamed event whose effect updates the name in the database.",
        "models": [
          {
            "model": "SavedFilterView",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:savedFilterView.updateSnapshot",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "savedFilterView.updateSnapshot",
      "module": "savedFilterView",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "firmMemberProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/savedFilterView/savedFilterView-controller.ts",
        "line": 40,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/savedFilterView/savedFilterView-controller.ts#L40"
      },
      "router": {
        "file": "services/identity-service/src/savedFilterView/savedFilterView-controller.ts",
        "line": 64,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/savedFilterView/savedFilterView-controller.ts#L64"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3734fd07",
      "interpretation": {
        "sig": "3734fd07",
        "summary": "Replaces the stored filter snapshot on a saved filter view the firm member owns, so reopening the saved view reflects the new filter state. Checks ownership, then publishes an event whose effect updates the snapshot.",
        "models": [
          {
            "model": "SavedFilterView",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:savedFilterView.delete",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "savedFilterView.delete",
      "module": "savedFilterView",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "firmMemberProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/savedFilterView/savedFilterView-controller.ts",
        "line": 54,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/savedFilterView/savedFilterView-controller.ts#L54"
      },
      "router": {
        "file": "services/identity-service/src/savedFilterView/savedFilterView-controller.ts",
        "line": 65,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/savedFilterView/savedFilterView-controller.ts#L65"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1b4b4ca5",
      "interpretation": {
        "sig": "1b4b4ca5",
        "summary": "Deletes a saved filter view the firm member owns. Checks ownership, then publishes a deleted event whose effect removes the row.",
        "models": [
          {
            "model": "SavedFilterView",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firmLetterhead.get",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firmLetterhead.get",
      "module": "firmLetterhead",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetFirmLetterheadInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firmLetterhead/procedures/getFirmLetterhead.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmLetterhead/procedures/getFirmLetterhead.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/firmLetterhead/router.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmLetterhead/router.ts#L5"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3d0ef037",
      "interpretation": {
        "sig": "3d0ef037",
        "summary": "Looks up a firm's letterhead record (logo, logo position, footer text, footer help email) by firm ID, returning null if none exists yet.",
        "models": [
          {
            "model": "FirmLetterhead",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:firmLetterhead.upsert",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firmLetterhead.upsert",
      "module": "firmLetterhead",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpsertFirmLetterheadInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/firmLetterhead/procedures/upsertFirmLetterhead.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmLetterhead/procedures/upsertFirmLetterhead.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/firmLetterhead/router.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmLetterhead/router.ts#L6"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2471b8b1",
      "interpretation": {
        "sig": "2471b8b1",
        "summary": "Creates or updates a firm's letterhead settings (logo image, logo position, footer enabled flag, footer text, help email) keyed by firm ID, so documents generated for that firm use the new branding.",
        "models": [
          {
            "model": "FirmLetterhead",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:marketConfig.getFirmOfRecord",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "marketConfig.getFirmOfRecord",
      "module": "marketConfig",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/marketConfig/procedures/getFirmOfRecord.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/marketConfig/procedures/getFirmOfRecord.query.ts#L6"
      },
      "router": {
        "file": "services/identity-service/src/marketConfig/router.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/marketConfig/router.ts#L5"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "68254929",
      "interpretation": {
        "sig": "68254929",
        "summary": "Looks up which firm is designated the firm of record for a given market (e.g. England & Wales) and returns its `firmId`, throwing `NOT_FOUND` if no `MarketFirmOfRecord` config exists for that market.",
        "models": [
          {
            "model": "MarketFirmOfRecord",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:marketConfig.checkIsFirmOfRecord",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "marketConfig.checkIsFirmOfRecord",
      "module": "marketConfig",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/marketConfig/procedures/checkIsFirmOfRecord.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/marketConfig/procedures/checkIsFirmOfRecord.query.ts#L6"
      },
      "router": {
        "file": "services/identity-service/src/marketConfig/router.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/marketConfig/router.ts#L6"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "cceba529",
      "interpretation": {
        "sig": "cceba529",
        "summary": "Checks whether a given firm is the configured firm of record for a given market, returning a plain `isFirmOfRecord` boolean.",
        "models": [
          {
            "model": "MarketFirmOfRecord",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:team.create",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "team.create",
      "module": "team",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateTeamInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/team/procedures/createTeam.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/createTeam.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/team/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/router.ts#L10"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2518e796",
      "interpretation": {
        "sig": "2518e796",
        "summary": "Creates a new `Team` row scoped to a firm, from a name and `firmId`. Returns the created team; does not add any members to it.",
        "models": [
          {
            "model": "Team",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:team.delete",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "team.delete",
      "module": "team",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/team/procedures/deleteTeam.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/deleteTeam.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/team/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/router.ts#L11"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "8d146d12",
      "interpretation": {
        "sig": "8d146d12",
        "summary": "Deletes a team: removes all its `TeamMember` rows and the `Team` row itself in one transaction. Despite the code comment calling it a soft-delete, both deletes are hard Prisma deletes, not `deletedAt` flags.",
        "models": [
          {
            "model": "Team",
            "service": "identity-service"
          },
          {
            "model": "TeamMember",
            "service": "identity-service"
          }
        ],
        "flags": [
          "comment-says-soft-delete-but-is-hard-delete"
        ]
      }
    },
    {
      "id": "identity-service:team.update",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "team.update",
      "module": "team",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateTeamInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/team/procedures/updateTeam.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/updateTeam.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/team/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/router.ts#L12"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2434a94e",
      "interpretation": {
        "sig": "2434a94e",
        "summary": "Renames an existing team after checking it exists, and returns the updated `Team` row.",
        "models": [
          {
            "model": "Team",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:team.get",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "team.get",
      "module": "team",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetTeamInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/team/procedures/getTeam.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/getTeam.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/team/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/router.ts#L13"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "304b4578",
      "interpretation": {
        "sig": "304b4578",
        "summary": "Fetches one team by id with its active (non-deleted) members and each member's identity and firm memberships, sorted by member name. Read-only query.",
        "models": [
          {
            "model": "Team",
            "service": "identity-service"
          },
          {
            "model": "TeamMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:team.list",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "team.list",
      "module": "team",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListTeamsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/team/procedures/listTeams.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/team/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/router.ts#L14"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "194e595f",
      "interpretation": {
        "sig": "194e595f",
        "summary": "Lists teams filtered by firm id(s) or by an identity's (person's) membership, each with its active members and their identities. Accepts either `identityId` or the legacy `personId` field for backward compatibility. Read-only query.",
        "models": [
          {
            "model": "Team",
            "service": "identity-service"
          },
          {
            "model": "TeamMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:team.listTeamIds",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "team.listTeamIds",
      "module": "team",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListTeamIdsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/team/procedures/listTeamIds.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeamIds.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/team/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/router.ts#L15"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6b7fd4db",
      "interpretation": {
        "sig": "6b7fd4db",
        "summary": "Returns just the ids of teams a given identity belongs to, optionally narrowed to one firm. Used pre-auth (internal pre-auth token) rather than the standard protected procedure. Read-only query.",
        "models": [
          {
            "model": "Team",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:team.permissions",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "team.permissions",
      "module": "team",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/team/procedures/getTeamPermissions.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/getTeamPermissions.query.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/team/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/router.ts#L16"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "c277ba1e",
      "interpretation": {
        "sig": "c277ba1e",
        "summary": "Resolves what an identity can do on a team: `ADMIN` firm role wins as admin, otherwise team `OWNER` role wins as owner, otherwise any firm membership grants member, otherwise none. Read-only query that returns a permission/grant set, not raw records.",
        "models": [
          {
            "model": "Team",
            "service": "identity-service"
          },
          {
            "model": "TeamMember",
            "service": "identity-service"
          },
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:teamMember.add",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "teamMember.add",
      "module": "teamMember",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "AddTeamMemberInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/teamMember/procedures/addTeamMember.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/teamMember/procedures/addTeamMember.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/teamMember/router.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/teamMember/router.ts#L6"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e99dab9a",
      "interpretation": {
        "sig": "e99dab9a",
        "summary": "Adds an identity to a team with a role (defaults to `MEMBER`). If the identity was a previously soft-deleted member of that team, it undeletes the row and resets the role instead of creating a new one.",
        "models": [
          {
            "model": "TeamMember",
            "service": "identity-service"
          }
        ],
        "flags": [
          "response includes legacy personId/person aliases for backward compat"
        ]
      }
    },
    {
      "id": "identity-service:teamMember.delete",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "teamMember.delete",
      "module": "teamMember",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "DeleteTeamMemberInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/teamMember/procedures/deleteTeamMember.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/teamMember/procedures/deleteTeamMember.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/teamMember/router.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/teamMember/router.ts#L7"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9f98efa0",
      "interpretation": {
        "sig": "9f98efa0",
        "summary": "Removes a member from a team by soft-deleting their `TeamMember` row (throws `NOT_FOUND` if the id doesn't match the given team).",
        "models": [
          {
            "model": "TeamMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:teamMember.updateRole",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "identityRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "teamMember.updateRole",
      "module": "teamMember",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateTeamMemberRoleInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/identity-service/src/teamMember/procedures/updateTeamMemberRole.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/teamMember/procedures/updateTeamMemberRole.mutation.ts#L5"
      },
      "router": {
        "file": "services/identity-service/src/teamMember/router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/teamMember/router.ts#L8"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f05e0104",
      "interpretation": {
        "sig": "f05e0104",
        "summary": "Changes a team member's role on an existing `TeamMember` row (throws `NOT_FOUND` if the id doesn't match the given team).",
        "models": [
          {
            "model": "TeamMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "identity-service:apiKeys.create",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "createAuthRouter(identityServiceDirectory)",
      "mounts": [
        "/auth/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "apiKeys.create",
      "module": "apiKeys",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "protectedPersonProcedure",
        "base": "protectedPersonProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateApiKeyInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/auth-service/src/api-keys/api-keys.router.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/auth-service/src/api-keys/api-keys.router.ts#L37"
      },
      "router": {
        "file": "services/auth-service/src/api-keys/api-keys.router.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/auth-service/src/api-keys/api-keys.router.ts#L37"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "993b4920",
      "interpretation": {
        "sig": "993b4920",
        "summary": "Creates a firm-scoped API key for the calling person's firm: checks the caller belongs to that firm, provisions the BetterAuth user/organization rows if missing, then issues the key with a name, permission level, and optional expiry. Returns the raw key value once, plus its id and metadata.",
        "models": [
          {
            "model": "apikey",
            "service": "BetterAuth"
          },
          {
            "model": "organization",
            "service": "BetterAuth"
          }
        ],
        "flags": [
          "write-mechanism-not-flagged: source writes via BetterAuth's auth.api.createApiKey, not direct Prisma"
        ]
      }
    },
    {
      "id": "identity-service:apiKeys.list",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "createAuthRouter(identityServiceDirectory)",
      "mounts": [
        "/auth/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "apiKeys.list",
      "module": "apiKeys",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "protectedPersonProcedure",
        "base": "protectedPersonProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListApiKeysInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/auth-service/src/api-keys/api-keys.router.ts",
        "line": 51,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/auth-service/src/api-keys/api-keys.router.ts#L51"
      },
      "router": {
        "file": "services/auth-service/src/api-keys/api-keys.router.ts",
        "line": 51,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/auth-service/src/api-keys/api-keys.router.ts#L51"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2cc2fd7d",
      "interpretation": {
        "sig": "2cc2fd7d",
        "summary": "Lists the API keys belonging to the caller's firm (newest first), after confirming the caller is a member of that firm. Each entry includes name, key prefix, enabled state, expiry, and the permission recorded in its metadata.",
        "models": [
          {
            "model": "apikey",
            "service": "BetterAuth"
          }
        ]
      }
    },
    {
      "id": "identity-service:apiKeys.revoke",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "createAuthRouter(identityServiceDirectory)",
      "mounts": [
        "/auth/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "apiKeys.revoke",
      "module": "apiKeys",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "protectedPersonProcedure",
        "base": "protectedPersonProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RevokeApiKeyInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/auth-service/src/api-keys/api-keys.router.ts",
        "line": 65,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/auth-service/src/api-keys/api-keys.router.ts#L65"
      },
      "router": {
        "file": "services/auth-service/src/api-keys/api-keys.router.ts",
        "line": 65,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/auth-service/src/api-keys/api-keys.router.ts#L65"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4557772e",
      "interpretation": {
        "sig": "4557772e",
        "summary": "Revokes one API key by setting it disabled through BetterAuth, after confirming the caller belongs to the key's firm. A key from another firm is rejected with the same not-found error used for a missing key, so a cross-firm probe can't tell the two apart.",
        "models": [
          {
            "model": "apikey",
            "service": "BetterAuth"
          }
        ],
        "flags": [
          "write-mechanism-not-flagged: source writes via BetterAuth's auth.api.updateApiKey, not direct Prisma"
        ]
      }
    },
    {
      "id": "identity-service:apiKeys.verify",
      "api": "identity-service",
      "origin": "identity-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "createAuthRouter(identityServiceDirectory)",
      "mounts": [
        "/auth/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "apiKeys.verify",
      "module": "apiKeys",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "services/auth-service/src/api-keys/api-keys.router.ts",
        "line": 79,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/auth-service/src/api-keys/api-keys.router.ts#L79"
      },
      "router": {
        "file": "services/auth-service/src/api-keys/api-keys.router.ts",
        "line": 79,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/auth-service/src/api-keys/api-keys.router.ts#L79"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "baf26c5b",
      "interpretation": {
        "sig": "baf26c5b",
        "summary": "Validates a raw API key string against BetterAuth and returns its firm id and permission if valid. Deliberately skips re-checking the creating member: an API key is treated as firm-owned, so it stays valid after that person leaves the firm and is only killed by explicit revoke or expiry.",
        "flags": [
          "usage.dead: not called by apps or services"
        ]
      }
    },
    {
      "id": "ledger-service:accounts.get",
      "api": "ledger-service",
      "origin": "ledger-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "ledgerRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "accounts.get",
      "module": "accounts",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/ledger-service/src/account/account-controller.ts",
        "line": 65,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/account/account-controller.ts#L65"
      },
      "router": {
        "file": "services/ledger-service/src/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/router.ts#L16"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "659f618",
      "interpretation": {
        "sig": "659f618",
        "summary": "Looks up one ledger `Account` by id and returns it as stored. Used internally by other services to fetch account details, not exposed to apps directly.",
        "models": [
          {
            "model": "Account",
            "service": "ledger-service"
          }
        ]
      }
    },
    {
      "id": "ledger-service:accounts.list",
      "api": "ledger-service",
      "origin": "ledger-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "ledgerRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "accounts.list",
      "module": "accounts",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListLedgerAccountsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/ledger-service/src/procedures/listAccounts.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/procedures/listAccounts.query.ts#L9"
      },
      "router": {
        "file": "services/ledger-service/src/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/router.ts#L17"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "815b669f",
      "interpretation": {
        "sig": "815b669f",
        "summary": "Lists ledger `Account`s filtered by matter, person, firm, currency, and/or type, returning the matching rows and a total count. This is the separate router-level list implementation, distinct from the account-controller list below.",
        "models": [
          {
            "model": "Account",
            "service": "ledger-service"
          }
        ]
      }
    },
    {
      "id": "ledger-service:accounts.getBalance",
      "api": "ledger-service",
      "origin": "ledger-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "ledgerRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "accounts.getBalance",
      "module": "accounts",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetAccountsBalanceInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/ledger-service/src/procedures/getAccountsBalance.mutation.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/procedures/getAccountsBalance.mutation.ts#L17"
      },
      "router": {
        "file": "services/ledger-service/src/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/router.ts#L18"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4c42d8a0",
      "interpretation": {
        "sig": "4c42d8a0",
        "summary": "For each account id given, confirms the `Account` exists then sums its `Posting`s to return `balanceFrom`, `balanceTo`, and net balance per account. Despite the `.mutation.ts` filename, it only reads: no rows are created or changed.",
        "flags": [
          "read-that-writes-named-file-but-not-code"
        ],
        "models": [
          {
            "model": "Account",
            "service": "ledger-service"
          },
          {
            "model": "Posting",
            "service": "ledger-service"
          }
        ]
      }
    },
    {
      "id": "ledger-service:accounts.balance",
      "api": "ledger-service",
      "origin": "ledger-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "ledgerRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "accounts.balance",
      "module": "accounts",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/ledger-service/src/account/account-controller.ts",
        "line": 90,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/account/account-controller.ts#L90"
      },
      "router": {
        "file": "services/ledger-service/src/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/router.ts#L19"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "bc1cb23c",
      "interpretation": {
        "sig": "bc1cb23c",
        "summary": "Computes one account's balance (sum of inbound minus outbound `Posting`s) via the account-controller. Nothing in the codebase calls this: it looks unused, superseded by the `accounts.getBalance` procedure.",
        "flags": [
          "looks unused"
        ],
        "models": [
          {
            "model": "Posting",
            "service": "ledger-service"
          }
        ]
      }
    },
    {
      "id": "ledger-service:accounts.balanceBatch",
      "api": "ledger-service",
      "origin": "ledger-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "ledgerRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "accounts.balanceBatch",
      "module": "accounts",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/ledger-service/src/account/account-controller.ts",
        "line": 98,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/account/account-controller.ts#L98"
      },
      "router": {
        "file": "services/ledger-service/src/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/router.ts#L20"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ab352856",
      "interpretation": {
        "sig": "ab352856",
        "summary": "Computes balances for up to 500 accounts at once, using two grouped `Posting` sums instead of a per-account query, so a firm dashboard or matter Accounts page can fetch many balances in one round trip.",
        "models": [
          {
            "model": "Posting",
            "service": "ledger-service"
          }
        ]
      }
    },
    {
      "id": "ledger-service:postings.list",
      "api": "ledger-service",
      "origin": "ledger-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "ledgerRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "postings.list",
      "module": "postings",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/ledger-service/src/posting/posting-controller.ts",
        "line": 70,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/posting/posting-controller.ts#L70"
      },
      "router": {
        "file": "services/ledger-service/src/posting/posting-controller.ts",
        "line": 128,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/posting/posting-controller.ts#L128"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a8e62c9f",
      "interpretation": {
        "sig": "a8e62c9f",
        "summary": "Lists `Posting` records (double-entry ledger rows) filtered by `accountId` and/or `firmBankAccountId` and an optional effective-date range, paginated by cursor. Requires at least one of `accountId` or `firmBankAccountId` so the query can't page through every firm's transaction history unscoped.",
        "models": [
          {
            "model": "Posting",
            "service": "ledger-service"
          }
        ]
      }
    },
    {
      "id": "ledger-service:postings.listForMatter",
      "api": "ledger-service",
      "origin": "ledger-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "ledgerRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "postings.listForMatter",
      "module": "postings",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/ledger-service/src/posting/posting-controller.ts",
        "line": 98,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/posting/posting-controller.ts#L98"
      },
      "router": {
        "file": "services/ledger-service/src/posting/posting-controller.ts",
        "line": 129,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/posting/posting-controller.ts#L129"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a199f295",
      "interpretation": {
        "sig": "a199f295",
        "summary": "Lists `Posting` records where either the source or destination `Account` is bound to the given `matterId`, with optional effective-date range and cursor pagination. Used to show a matter's ledger activity.",
        "models": [
          {
            "model": "Posting",
            "service": "ledger-service"
          }
        ]
      }
    },
    {
      "id": "ledger-service:transactions.create",
      "api": "ledger-service",
      "origin": "ledger-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "ledgerRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "transactions.create",
      "module": "transactions",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/ledger-service/src/transaction/transaction-controller.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/transaction/transaction-controller.ts#L29"
      },
      "router": {
        "file": "services/ledger-service/src/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/router.ts#L24"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d2ebdd38",
      "interpretation": {
        "sig": "d2ebdd38",
        "summary": "Creates a ledger `Transaction` from one or more `Postings`, resolving each posting's source and destination `Account` (creating accounts on the fly if needed) before handing the whole thing to `TransactionService` to persist. The controller itself does no direct writes; it just resolves accounts and delegates the actual create to the service layer.",
        "models": [
          {
            "model": "Transaction",
            "service": "ledger-service"
          },
          {
            "model": "Account",
            "service": "ledger-service"
          },
          {
            "model": "Posting",
            "service": "ledger-service"
          }
        ],
        "flags": [
          "via-services write"
        ]
      }
    },
    {
      "id": "ledger-service:transactions.updateDescription",
      "api": "ledger-service",
      "origin": "ledger-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "ledgerRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "transactions.updateDescription",
      "module": "transactions",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/ledger-service/src/transaction/transaction-controller.ts",
        "line": 82,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/transaction/transaction-controller.ts#L82"
      },
      "router": {
        "file": "services/ledger-service/src/router.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/router.ts#L25"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ab23c04b",
      "interpretation": {
        "sig": "ab23c04b",
        "summary": "Updates only the description (narrative) field on an existing `Transaction`, delegating to `TransactionService.updateDescription`. Nothing else on the transaction changes; the description must be non-empty.",
        "models": [
          {
            "model": "Transaction",
            "service": "ledger-service"
          }
        ],
        "flags": [
          "via-services write"
        ]
      }
    },
    {
      "id": "ledger-service:transactions.getById",
      "api": "ledger-service",
      "origin": "ledger-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "ledgerRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "transactions.getById",
      "module": "transactions",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/ledger-service/src/procedures/getTransaction.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/procedures/getTransaction.query.ts#L8"
      },
      "router": {
        "file": "services/ledger-service/src/router.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/router.ts#L26"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "36b00726",
      "interpretation": {
        "sig": "36b00726",
        "summary": "Looks up a single `Transaction` by id, including its `Postings` and each posting's source and destination `Account`. Used both to prove a transaction belongs to a matter (via the postings' account `matterId`s) and to derive the opposite posting when reversing a transaction.",
        "models": [
          {
            "model": "Transaction",
            "service": "ledger-service"
          },
          {
            "model": "Posting",
            "service": "ledger-service"
          },
          {
            "model": "Account",
            "service": "ledger-service"
          }
        ]
      }
    },
    {
      "id": "ledger-service:transactions.list",
      "api": "ledger-service",
      "origin": "ledger-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "ledgerRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "transactions.list",
      "module": "transactions",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListLedgerTransactionsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/ledger-service/src/procedures/listTransactions.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/procedures/listTransactions.query.ts#L8"
      },
      "router": {
        "file": "services/ledger-service/src/router.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/router.ts#L27"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4ddef17",
      "interpretation": {
        "sig": "4ddef17",
        "summary": "Lists all `Postings` for a given `Account` (as source or destination), ordered by effective date, and computes a running balance plus per-posting funds in/out. Returns an empty list if the account doesn't exist.",
        "models": [
          {
            "model": "Account",
            "service": "ledger-service"
          },
          {
            "model": "Posting",
            "service": "ledger-service"
          },
          {
            "model": "Transaction",
            "service": "ledger-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterArtifact.lawyer.getMatterLegalFormArtifact",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.lawyer.getMatterLegalFormArtifact",
      "module": "matterArtifact",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/lawyer/getMatterLegalFormArtifact.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/getMatterLegalFormArtifact.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L28"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f25be4fa",
      "interpretation": {
        "sig": "f25be4fa",
        "summary": "Looks up the legal-form record tied to a matter artifact (form data, slug, jurisdiction) so a lawyer can view or resume a filled-form document. Throws `NOT_FOUND` if no such form artifact exists."
      }
    },
    {
      "id": "matter-service:matterArtifact.lawyer.getMatterArtifact",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.lawyer.getMatterArtifact",
      "module": "matterArtifact",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/lawyer/getMatterArtifact.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/getMatterArtifact.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L29"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "cde63070",
      "interpretation": {
        "sig": "cde63070",
        "summary": "Fetches one matter artifact (a document being drafted on a matter) with its versions and related data, then shapes it for the editor UI. Read-only."
      }
    },
    {
      "id": "matter-service:matterArtifact.lawyer.getMatterArtifactVersions",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.lawyer.getMatterArtifactVersions",
      "module": "matterArtifact",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/lawyer/getMatterArtifactVersions.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/getMatterArtifactVersions.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L30"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "66b48a42",
      "interpretation": {
        "sig": "66b48a42",
        "summary": "Returns the version history of a matter artifact so a lawyer can review or restore earlier drafts."
      }
    },
    {
      "id": "matter-service:matterArtifact.lawyer.listMatterArtifacts",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.lawyer.listMatterArtifacts",
      "module": "matterArtifact",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/lawyer/listMatterArtifacts.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/listMatterArtifacts.query.ts#L7"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L31"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "97971255",
      "interpretation": {
        "sig": "97971255",
        "summary": "Lists the `DRAFT`-status artifacts on a matter, but only after checking the caller has `can_manage` permission on that matter (via team access rules); returns an empty list otherwise.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterArtifact.lawyer.acceptDraftArtifact",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.lawyer.acceptDraftArtifact",
      "module": "matterArtifact",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/lawyer/acceptDraftArtifact.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/acceptDraftArtifact.mutation.ts#L7"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 32,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L32"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ff714afe",
      "interpretation": {
        "sig": "ff714afe",
        "summary": "Turns a `DRAFT` matter artifact's attached file into a real `MatterFile` visible to everyone on the matter, recording who accepted it. Fails if the draft has no file attached.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterArtifact.lawyer.discardDraftArtifact",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.lawyer.discardDraftArtifact",
      "module": "matterArtifact",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/lawyer/discardDraftArtifact.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/discardDraftArtifact.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 33,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L33"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3fe4fd76",
      "interpretation": {
        "sig": "3fe4fd76",
        "summary": "Marks a `DRAFT` matter artifact as `DISCARDED` so it drops out of the active drafts list. Fails if the artifact isn't currently a draft on that matter.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterArtifact.lawyer.createMatterArtifactFilePreviewUrl",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.lawyer.createMatterArtifactFilePreviewUrl",
      "module": "matterArtifact",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterArtifactPreviewUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/lawyer/createMatterArtifactPreviewUrl.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/createMatterArtifactPreviewUrl.mutation.ts#L14"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 34,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L34"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4a8c6246",
      "interpretation": {
        "sig": "4a8c6246",
        "summary": "Generates a short-lived (10 minute) signed S3 URL so the lawyer's browser can preview the artifact's attached file. Named and typed as a mutation but writes nothing; it only reads and signs a URL.",
        "flags": [
          "mutation only reads"
        ]
      }
    },
    {
      "id": "matter-service:matterArtifact.lawyer.updateMatterArtifactVersion",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.lawyer.updateMatterArtifactVersion",
      "module": "matterArtifact",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/lawyer/updateMatterArtifactVersion.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/updateMatterArtifactVersion.mutation.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L35"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1e27af4",
      "interpretation": {
        "sig": "1e27af4",
        "summary": "Saves edited HTML content as a new version of a matter artifact and moves the artifact's `latestVersion` pointer to it, skipping the write entirely if the content is unchanged. Accepts an optional `expectedVersionId` for compare-and-set: if another edit has already moved the pointer, it rejects with a `CONFLICT` instead of overwriting.",
        "models": [
          {
            "model": "MatterArtifactVersion",
            "service": "matter-service"
          },
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterArtifact.lawyer.updateMatterArtifactVersionName",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.lawyer.updateMatterArtifactVersionName",
      "module": "matterArtifact",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/lawyer/updateMatterArtifactVersionName.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/updateMatterArtifactVersionName.mutation.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 36,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L36"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "72ff77be",
      "interpretation": {
        "sig": "72ff77be",
        "summary": "Renames a specific saved version of a matter artifact."
      }
    },
    {
      "id": "matter-service:matterArtifact.lawyer.createMatterArtifact",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.lawyer.createMatterArtifact",
      "module": "matterArtifact",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterArtifactInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/lawyer/createMatterArtifact.mutation.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/createMatterArtifact.mutation.ts#L19"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L37"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "165dbb4e",
      "interpretation": {
        "sig": "165dbb4e",
        "summary": "Creates a new matter artifact (blank, filled-form, or from-precedent) as a `DRAFT` along with its first version, injecting stable node IDs into the HTML upfront so it can be edited by agents immediately without waiting for a UI backfill.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          },
          {
            "model": "MatterArtifactVersion",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterArtifact.lawyer.exportMatterArtifactDocx",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.lawyer.exportMatterArtifactDocx",
      "module": "matterArtifact",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/lawyer/exportMatterArtifactDocx.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/exportMatterArtifactDocx.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 38,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L38"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmLetterhead.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmLetterhead.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmLetterhead/procedures/getFirmLetterhead.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "24dc2020",
      "interpretation": {
        "sig": "24dc2020",
        "summary": "Renders a matter artifact's latest version into a Word document, including a Lawhive or firm letterhead pulled from the identity service, compliance footer, and page size. Persists a new artifact version first if one doesn't exist yet.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          },
          {
            "model": "MatterArtifactVersion",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterArtifact.lawyer.exportMatterArtifactPdf",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.lawyer.exportMatterArtifactPdf",
      "module": "matterArtifact",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/lawyer/exportMatterArtifactPdf.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/exportMatterArtifactPdf.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 39,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L39"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmLetterhead.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmLetterhead.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmLetterhead/procedures/getFirmLetterhead.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2f838b00",
      "interpretation": {
        "sig": "2f838b00",
        "summary": "Builds the DOCX for a matter artifact, uploads it to S3, calls a Lambda to convert it to PDF, then downloads and returns the PDF as base64. Depends on the same letterhead lookup as the DOCX export."
      }
    },
    {
      "id": "matter-service:matterArtifact.lawyer.updateMatterArtifactName",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.lawyer.updateMatterArtifactName",
      "module": "matterArtifact",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/lawyer/updateMatterArtifactName.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/updateMatterArtifactName.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 40,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L40"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3650e9f6",
      "interpretation": {
        "sig": "3650e9f6",
        "summary": "Renames a matter artifact. Runs as an internal service-auth procedure rather than the usual firm-side lawyer scope.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterArtifact.lawyer.finalizeArtifactFile",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.lawyer.finalizeArtifactFile",
      "module": "matterArtifact",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/lawyer/finalizeArtifactFile.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/finalizeArtifactFile.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 41,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L41"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmLetterhead.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmLetterhead.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmLetterhead/procedures/getFirmLetterhead.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/file.uploaded"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d9c091f4",
      "interpretation": {
        "sig": "d9c091f4",
        "summary": "Locks in a matter artifact as a final file: for `FILLED_FORM` artifacts it stores the client-supplied PDF directly, otherwise it generates the DOCX or PDF itself, uploads it to S3, creates a `MatterFile`, and sets the artifact's status to `FINAL` with a snapshot version. Fires the `matter-service/file.uploaded` Inngest event once the file is inserted, and looks up firm letterhead from `identity-service` along the way.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          },
          {
            "model": "MatterFile",
            "service": "matter-service"
          },
          {
            "model": "MatterArtifactVersion",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterArtifact.lawyer.unfinalizeArtifactFile",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.lawyer.unfinalizeArtifactFile",
      "module": "matterArtifact",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/lawyer/unfinalizeArtifactFile.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/unfinalizeArtifactFile.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 42,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L42"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f7f0bd46",
      "interpretation": {
        "sig": "f7f0bd46",
        "summary": "Branches a new editable `DRAFT` artifact off a `FINAL` one instead of downgrading it in place, cloning all non-snapshot versions so the original `FINAL` document and its history stay untouched. Fails if the source artifact isn't currently `FINAL`.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          },
          {
            "model": "MatterArtifactVersion",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterArtifact.lawyer.listFinalisedMatterArtifacts",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.lawyer.listFinalisedMatterArtifacts",
      "module": "matterArtifact",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/lawyer/listFinalisedMatterArtifacts.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/listFinalisedMatterArtifacts.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 43,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L43"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "bcac841c",
      "interpretation": {
        "sig": "bcac841c",
        "summary": "Lists `FINAL`-status artifacts on a matter (id, name, `fileId`, type only), hiding any that have already been migrated to a `MatterDocument` once that migration flag is on for the matter.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterArtifact.internal.createMatterArtifact",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.internal.createMatterArtifact",
      "module": "matterArtifact",
      "roleFolder": "internal",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/internal/createMatterArtifact.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/internal/createMatterArtifact.mutation.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 46,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L46"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f9a1319a",
      "interpretation": {
        "sig": "f9a1319a",
        "summary": "Creates a new matter artifact (briefing note, advice note, filled form, or generated letter) in `DRAFT` status and its first version, injecting stable node IDs into the HTML so agents can edit it right away. Called service-to-service via a pre-auth token.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          },
          {
            "model": "MatterArtifactVersion",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterArtifact.internal.getLatestBriefingNote",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.internal.getLatestBriefingNote",
      "module": "matterArtifact",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/internal/getLatestBriefingNote.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/internal/getLatestBriefingNote.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 47,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L47"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "982afa8a",
      "interpretation": {
        "sig": "982afa8a",
        "summary": "Looks up the most recently created `BRIEFING_NOTE` artifact for a matter, throwing `NOT_FOUND` if none exists. No source in the codebase calls it; it appears dead.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "matter-service:matterArtifact.internal.getMatterArtifact",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.internal.getMatterArtifact",
      "module": "matterArtifact",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/internal/getMatterArtifact.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/internal/getMatterArtifact.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 48,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L48"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "efd7dc9e",
      "interpretation": {
        "sig": "efd7dc9e",
        "summary": "Fetches a single matter artifact with its latest version, file, and preview info, then shapes the response by type: extracts advice-note/briefing-note/generated-letter sections, or returns a presigned S3 download URL when the artifact is file-backed.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          },
          {
            "model": "MatterArtifactVersion",
            "service": "matter-service"
          },
          {
            "model": "File",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterArtifact.internal.getMatterArtifactVersion",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.internal.getMatterArtifactVersion",
      "module": "matterArtifact",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/internal/getMatterArtifactVersion.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/internal/getMatterArtifactVersion.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 49,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L49"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f1f1ec3c",
      "interpretation": {
        "sig": "f1f1ec3c",
        "summary": "Returns one artifact version by ID with its HTML content and letterhead/page-size settings, without loading the parent artifact.",
        "models": [
          {
            "model": "MatterArtifactVersion",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterArtifact.internal.getMatterArtifactVersions",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.internal.getMatterArtifactVersions",
      "module": "matterArtifact",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/internal/getMatterArtifactVersions.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/internal/getMatterArtifactVersions.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 50,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L50"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "27794f9c",
      "interpretation": {
        "sig": "27794f9c",
        "summary": "Lists the version history of one matter artifact, newest first, optionally limited to versions created before a given datetime.",
        "models": [
          {
            "model": "MatterArtifactVersion",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterArtifact.internal.listMatterArtifacts",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.internal.listMatterArtifacts",
      "module": "matterArtifact",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/internal/listMatterArtifacts.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/internal/listMatterArtifacts.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 51,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L51"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3c395480",
      "interpretation": {
        "sig": "3c395480",
        "summary": "Lists `DRAFT`-status artifacts for a matter, hiding any that have already been migrated to a `MatterDocument` once the migration cutover flag is on for that matter, so the two don't show up twice.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          },
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterArtifact.internal.listFinalisedMatterArtifacts",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.internal.listFinalisedMatterArtifacts",
      "module": "matterArtifact",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/internal/listFinalisedMatterArtifacts.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/internal/listFinalisedMatterArtifacts.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 52,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L52"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f8187da0",
      "interpretation": {
        "sig": "f8187da0",
        "summary": "Lists `FINAL`-status artifacts for a matter with a minimal field set (id, name, `fileId`, status, type), applying the same migration-hide rule as the draft list so a finalised artifact's Edit affordance disappears once it's been migrated to a `MatterDocument`.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          },
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterArtifact.internal.updateMatterArtifactVersion",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterArtifact.internal.updateMatterArtifactVersion",
      "module": "matterArtifact",
      "roleFolder": "internal",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterArtifacts/procedures/internal/updateMatterArtifactVersion.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/internal/updateMatterArtifactVersion.mutation.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterArtifacts/router.ts",
        "line": 53,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/router.ts#L53"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ac904002",
      "interpretation": {
        "sig": "ac904002",
        "summary": "Saves an edit to a matter artifact by creating a new `MatterArtifactVersion` and repointing the artifact's `latestVersionId` to it; skips the write entirely if the incoming content matches the current version. Accepts an optional `expectedVersionId` for compare-and-set, rejecting with `CONFLICT` if another write already moved the pointer since the caller last read it.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          },
          {
            "model": "MatterArtifactVersion",
            "service": "matter-service"
          }
        ],
        "flags": [
          "optimistic-concurrency"
        ]
      }
    },
    {
      "id": "matter-service:calls.internal.listCalls",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "calls.internal.listCalls",
      "module": "calls",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListCallsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/calls/procedures/internal/listCalls.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/calls/procedures/internal/listCalls.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/calls/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/calls/router.ts#L12"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "adb806cf",
      "interpretation": {
        "sig": "adb806cf",
        "summary": "Lists a matter's phone `Call` records newest first. Internal service-to-service equivalent of the lawyer-facing list.",
        "models": [
          {
            "model": "Call",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:calls.internal.getCallForAttendanceNote",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "calls.internal.getCallForAttendanceNote",
      "module": "calls",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetCallForAttendanceNoteInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/calls/procedures/internal/getCallForAttendanceNote.query.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/calls/procedures/internal/getCallForAttendanceNote.query.ts#L10"
      },
      "router": {
        "file": "services/matter-service/src/calls/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/calls/router.ts#L13"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a83fa81f",
      "interpretation": {
        "sig": "a83fa81f",
        "summary": "Fetches one call's metadata (participants, timestamps, `attendanceNoteStatus`, `transcriptUrl`) by id and matter, for a service generating a call attendance note. 404s if the call is not found on that matter.",
        "models": [
          {
            "model": "Call",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:calls.internal.getCallTranscript",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "calls.internal.getCallTranscript",
      "module": "calls",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetCallTranscriptInternalInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/calls/procedures/internal/getCallTranscript.query.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/calls/procedures/internal/getCallTranscript.query.ts#L10"
      },
      "router": {
        "file": "services/matter-service/src/calls/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/calls/router.ts#L14"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b333d9cd",
      "interpretation": {
        "sig": "b333d9cd",
        "summary": "Loads the call's Deepgram JSON transcript from S3 and returns plain transcript text plus speaker-segmented lines, picking utterance, multichannel-word, paragraph, or word-level segmentation depending on what Deepgram actually returned. Returns null if the call has no `transcriptUrl` yet.",
        "models": [
          {
            "model": "Call",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:calls.internal.updateCallAttendanceNoteStatus",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "calls.internal.updateCallAttendanceNoteStatus",
      "module": "calls",
      "roleFolder": "internal",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateCallAttendanceNoteStatusInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/calls/procedures/internal/updateCallAttendanceNoteStatus.mutation.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/calls/procedures/internal/updateCallAttendanceNoteStatus.mutation.ts#L18"
      },
      "router": {
        "file": "services/matter-service/src/calls/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/calls/router.ts#L15"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4477acd3",
      "interpretation": {
        "sig": "4477acd3",
        "summary": "Sets a `Call`'s `attendanceNoteStatus` (`NOT_REQUESTED`, `PENDING`, `SUCCESS`, `FAILED`) and `attendanceNoteId` directly in the database, called by the attendance-note generation service to report progress.",
        "models": [
          {
            "model": "Call",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:calls.lawyer.listCalls",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "calls.lawyer.listCalls",
      "module": "calls",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListCallsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/calls/procedures/lawyer/listCalls.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/calls/procedures/lawyer/listCalls.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/calls/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/calls/router.ts#L19"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1b44c2dd",
      "interpretation": {
        "sig": "1b44c2dd",
        "summary": "Lists a matter's phone calls newest first for a firm member viewing the matter.",
        "models": [
          {
            "model": "Call",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:calls.lawyer.createCall",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "calls.lawyer.createCall",
      "module": "calls",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateCallInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/calls/procedures/lawyer/createCall.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/calls/procedures/lawyer/createCall.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/calls/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/calls/router.ts#L20"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "df236943",
      "interpretation": {
        "sig": "df236943",
        "summary": "Starts a conference phone call for a matter: creates the `Call` row, dials the host and each participant through Twilio (normalizing numbers to US/UK E.164), then marks the call `IN_PROGRESS` with a `startedAt` time, or `FAILED` if Twilio couldn't start the host leg.",
        "models": [
          {
            "model": "Call",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:calls.lawyer.getCallRecording",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "calls.lawyer.getCallRecording",
      "module": "calls",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetCallRecordingInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/calls/procedures/lawyer/getCallRecording.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/calls/procedures/lawyer/getCallRecording.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/calls/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/calls/router.ts#L21"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "af1edb8b",
      "interpretation": {
        "sig": "af1edb8b",
        "summary": "Returns a call's recording: a 1-hour presigned S3 URL plus, for files up to 20MB, the audio inlined as base64. Returns null if the call has no recording yet.",
        "models": [
          {
            "model": "Call",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:calls.lawyer.getCallTranscript",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "calls.lawyer.getCallTranscript",
      "module": "calls",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetCallTranscriptInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/calls/procedures/lawyer/getCallTranscript.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/calls/procedures/lawyer/getCallTranscript.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/calls/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/calls/router.ts#L22"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "be7bc06f",
      "interpretation": {
        "sig": "be7bc06f",
        "summary": "Loads and returns a call's Deepgram transcript (plain text plus speaker-segmented lines) for a firm member. Same logic as the internal transcript query; returns null if no transcript exists yet.",
        "models": [
          {
            "model": "Call",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:comment.create",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "comment.create",
      "module": "comment",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/comment/comment-controller.ts",
        "line": 36,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/comment/comment-controller.ts#L36"
      },
      "router": {
        "file": "services/matter-service/src/comment/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/comment/router.ts#L10"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "8d9fe9a2",
      "interpretation": {
        "sig": "8d9fe9a2",
        "summary": "Adds a comment on a matter (or other commentable entity): checks the caller's identity, then publishes a `comment.created` event whose handler runs the actual `Comment` insert.",
        "models": [
          {
            "model": "Comment",
            "service": "matter-service"
          }
        ],
        "flags": [
          "read-that-writes: the procedure itself only publishes an event, a separate effect handler does the prisma write"
        ]
      }
    },
    {
      "id": "matter-service:comment.update",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "comment.update",
      "module": "comment",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateCommentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/comment/comment-controller.ts",
        "line": 45,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/comment/comment-controller.ts#L45"
      },
      "router": {
        "file": "services/matter-service/src/comment/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/comment/router.ts#L11"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e2e5cd75",
      "interpretation": {
        "sig": "e2e5cd75",
        "summary": "Edits an existing comment's text: verifies the caller is the comment's author, then publishes a `comment.updated` event whose handler updates the content and sets `editedAt`.",
        "models": [
          {
            "model": "Comment",
            "service": "matter-service"
          }
        ],
        "flags": [
          "read-that-writes: the procedure itself only publishes an event, a separate effect handler does the prisma write"
        ]
      }
    },
    {
      "id": "matter-service:comment.delete",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "comment.delete",
      "module": "comment",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "DeleteCommentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/comment/comment-controller.ts",
        "line": 52,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/comment/comment-controller.ts#L52"
      },
      "router": {
        "file": "services/matter-service/src/comment/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/comment/router.ts#L12"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "c220c81b",
      "interpretation": {
        "sig": "c220c81b",
        "summary": "Deletes a comment: verifies the caller is the comment's author, then publishes a `comment.deleted` event whose handler removes the `Comment` row.",
        "models": [
          {
            "model": "Comment",
            "service": "matter-service"
          }
        ],
        "flags": [
          "read-that-writes: the procedure itself only publishes an event, a separate effect handler does the prisma write"
        ]
      }
    },
    {
      "id": "matter-service:comment.restore",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "comment.restore",
      "module": "comment",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RestoreCommentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/comment/comment-controller.ts",
        "line": 59,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/comment/comment-controller.ts#L59"
      },
      "router": {
        "file": "services/matter-service/src/comment/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/comment/router.ts#L13"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a5b2f684",
      "interpretation": {
        "sig": "a5b2f684",
        "summary": "Undeletes a previously deleted comment: verifies the caller authored it, then publishes a `comment.restored` event whose handler clears the comment's `deletedAt`.",
        "models": [
          {
            "model": "Comment",
            "service": "matter-service"
          }
        ],
        "flags": [
          "read-that-writes: the procedure itself only publishes an event, a separate effect handler does the prisma write"
        ]
      }
    },
    {
      "id": "matter-service:comment.list",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "comment.list",
      "module": "comment",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListCommentsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/comment/comment-controller.ts",
        "line": 68,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/comment/comment-controller.ts#L68"
      },
      "router": {
        "file": "services/matter-service/src/comment/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/comment/router.ts#L14"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "53637d6b",
      "interpretation": {
        "sig": "53637d6b",
        "summary": "Lists comments on a given entity (e.g. a matter) in the requested sort order, joining each comment with its author's name and photo fetched from `identity-service`.",
        "models": [
          {
            "model": "Comment",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterAttachment.create",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterAttachment.create",
      "module": "matterAttachment",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matter-attachment/matter-attachment-controller.ts",
        "line": 60,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matter-attachment/matter-attachment-controller.ts#L60"
      },
      "router": {
        "file": "services/matter-service/src/matter-attachment/router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matter-attachment/router.ts#L8"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.getByFirmIdentity",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getByFirmIdentity",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getByFirmIdentity.query.ts#L21",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "89046a16",
      "interpretation": {
        "sig": "89046a16",
        "summary": "Attaches an existing matter file to a task: after checking the task has a matter and the file belongs to that matter, it verifies the caller is a member of the firm (via a read call to `identity-service`) and creates a `MatterAttachment` row linking the file to the task.",
        "models": [
          {
            "model": "MatterAttachment",
            "service": "matter-service"
          },
          {
            "model": "Task",
            "service": "matter-service"
          },
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterAttachment.delete",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterAttachment.delete",
      "module": "matterAttachment",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "DeleteMatterAttachmentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matter-attachment/matter-attachment-controller.ts",
        "line": 92,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matter-attachment/matter-attachment-controller.ts#L92"
      },
      "router": {
        "file": "services/matter-service/src/matter-attachment/router.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matter-attachment/router.ts#L9"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.getByFirmIdentity",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getByFirmIdentity",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getByFirmIdentity.query.ts#L21",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1c2b167d",
      "interpretation": {
        "sig": "1c2b167d",
        "summary": "Removes a matter attachment: looks up the attachment to get its firm, checks the caller belongs to that firm (read call to `identity-service`), then deletes the `MatterAttachment` row.",
        "models": [
          {
            "model": "MatterAttachment",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterAttachment.list",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterAttachment.list",
      "module": "matterAttachment",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListMatterAttachmentsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matter-attachment/matter-attachment-controller.ts",
        "line": 115,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matter-attachment/matter-attachment-controller.ts#L115"
      },
      "router": {
        "file": "services/matter-service/src/matter-attachment/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matter-attachment/router.ts#L10"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "cfe35ec6",
      "interpretation": {
        "sig": "cfe35ec6",
        "summary": "Lists the non-deleted file attachments for a given entity (currently tasks), including each file's preview, ordered newest first.",
        "models": [
          {
            "model": "MatterAttachment",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterChannel.validateChannelAccess",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterChannel.validateChannelAccess",
      "module": "matterChannel",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "write",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ValidateChannelAccessInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/matter-service/src/matterChannel/procedures/validateChannelAccess.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterChannel/procedures/validateChannelAccess.query.ts#L8"
      },
      "router": {
        "file": "services/matter-service/src/matterChannel/router.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterChannel/router.ts#L5"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "messaging-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "messaging-service",
            "path": "channel.upsertChannel",
            "kind": "write",
            "inferred": false,
            "targetId": "messaging-service:channel.upsertChannel",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/channel/procedures/upsertChannel.mutation.ts#L8",
            "domain": "chat"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "53c27d8d",
      "interpretation": {
        "sig": "53c27d8d",
        "summary": "Checks whether an identity should have access to a matter's messaging channel, via direct participant match, team-based access, or an RBAC \"`can_view_all_matters`\" grant. If access is granted through participant or team routes it also syncs the messaging channel by upserting the caller into its participant list, so a plain access check ends up adding people to the channel.",
        "models": [
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          },
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ],
        "flags": [
          "read-that-writes"
        ]
      }
    },
    {
      "id": "matter-service:matterContact.create",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterContact.create",
      "module": "matterContact",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateMatterContactInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterContact/procedures/create.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/create.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterContact/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/router.ts#L10"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a7ff026b",
      "interpretation": {
        "sig": "a7ff026b",
        "summary": "Links a contact to a matter with a given role by publishing a `matterContact.created` event; if the input has a `parentContactId` without an existing parent link, it also creates that parent link in the same atomic publish. Verifies the matter exists first, otherwise throws `NOT_FOUND`.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "MatterContact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterContact.list",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterContact.list",
      "module": "matterContact",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListMatterContactsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterContact/procedures/list.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/list.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterContact/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/router.ts#L11"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7e8b09a",
      "interpretation": {
        "sig": "7e8b09a",
        "summary": "Lists matter-contact links, filterable by `matterId`, `contactId`, role, matter status, or a free-text/matter-number search, with pagination and a total count.",
        "models": [
          {
            "model": "MatterContact",
            "service": "matter-service"
          },
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterContact.listCoCounselFirmIds",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterContact.listCoCounselFirmIds",
      "module": "matterContact",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterContact/procedures/list-co-counsel-firm-ids.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/list-co-counsel-firm-ids.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterContact/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/router.ts#L12"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f873669c",
      "interpretation": {
        "sig": "f873669c",
        "summary": "Given a firm ID, returns the distinct IDs of other firms acting as co-counsel on matters where this firm is listed as firm of record.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterContact.listForConflictCheck",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterContact.listForConflictCheck",
      "module": "matterContact",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListMatterContactsForConflictCheckInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterContact/procedures/list-for-conflict-check.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/list-for-conflict-check.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterContact/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/router.ts#L13"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4bdcff25",
      "interpretation": {
        "sig": "4bdcff25",
        "summary": "For a list of contact IDs and a firm, returns each contact's matter history at that firm (as firm or firm of record), grouped by contact and ordered active-first then most recently completed, for use in a conflict-of-interest check.",
        "models": [
          {
            "model": "MatterContact",
            "service": "matter-service"
          },
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterContact.update",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterContact.update",
      "module": "matterContact",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateMatterContactInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterContact/procedures/update.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/update.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterContact/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/router.ts#L14"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "95afec5a",
      "interpretation": {
        "sig": "95afec5a",
        "summary": "Updates fields on an existing matter-contact link directly in the database. Throws `NOT_FOUND` if the link doesn't exist.",
        "models": [
          {
            "model": "MatterContact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterContact.delete",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterContact.delete",
      "module": "matterContact",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "DeleteMatterContactInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterContact/procedures/delete.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/delete.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterContact/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/router.ts#L15"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "bf8ce842",
      "interpretation": {
        "sig": "bf8ce842",
        "summary": "Deletes a single matter-contact link by ID directly in the database. Throws `NOT_FOUND` if the link doesn't exist.",
        "models": [
          {
            "model": "MatterContact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterContact.deleteWithCascade",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterContact.deleteWithCascade",
      "module": "matterContact",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "DeleteMatterContactInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterContact/procedures/delete-with-cascade.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/delete-with-cascade.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterContact/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/router.ts#L16"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "45d159ec",
      "interpretation": {
        "sig": "45d159ec",
        "summary": "Deletes a matter-contact link and, in the same transaction, any child links that named this contact as their `parentContactId` with the same role on the same matter (e.g. removing a co-counsel firm's contact also drops its dependent sub-contacts). Throws `NOT_FOUND` if the link doesn't exist.",
        "models": [
          {
            "model": "MatterContact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterContactSlot.list",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterContactSlot.list",
      "module": "matterContactSlot",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListMatterContactSlotsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterContactSlot/procedures/list.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContactSlot/procedures/list.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterContactSlot/router.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContactSlot/router.ts#L6"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1c26ac1a",
      "interpretation": {
        "sig": "1c26ac1a",
        "summary": "Lists the open (unfilled) contact slots for a matter, ordered by position then creation date, for showing which contact roles still need someone assigned.",
        "models": [
          {
            "model": "MatterContactSlot",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterContactSlot.get",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterContactSlot.get",
      "module": "matterContactSlot",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetMatterContactSlotInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterContactSlot/procedures/get.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContactSlot/procedures/get.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterContactSlot/router.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContactSlot/router.ts#L7"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "8363a2c8",
      "interpretation": {
        "sig": "8363a2c8",
        "summary": "Fetches a single matter contact slot by ID, including whether it has already been filled.",
        "models": [
          {
            "model": "MatterContactSlot",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterContactSlot.fill",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterContactSlot.fill",
      "module": "matterContactSlot",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "FillMatterContactSlotInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterContactSlot/procedures/fill.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContactSlot/procedures/fill.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterContactSlot/router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContactSlot/router.ts#L8"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d1771d9d",
      "interpretation": {
        "sig": "d1771d9d",
        "summary": "Assigns a contact to an open matter contact slot: validates the slot belongs to the caller's firm and isn't already filled, creates the `MatterContact` record (and its parent contact link if one is given), and publishes `matterContactSlot.filled`.",
        "models": [
          {
            "model": "MatterContactSlot",
            "service": "matter-service"
          },
          {
            "model": "MatterContact",
            "service": "matter-service"
          },
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ],
        "flags": [
          "write-via-services"
        ]
      }
    },
    {
      "id": "matter-service:matterFileFolder.admin.listMatterFileFolders",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFileFolder.admin.listMatterFileFolders",
      "module": "matterFileFolder",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFileFolders/procedures/admin/listMatterFileFolders.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/procedures/admin/listMatterFileFolders.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterFileFolders/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/router.ts#L12"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "80ac414e",
      "interpretation": {
        "sig": "80ac414e",
        "summary": "Lists a matter's file folders in order, each with a count of its non-deleted files, plus a separate count of files not assigned to any folder.",
        "models": [
          {
            "model": "MatterFileFolder",
            "service": "matter-service"
          },
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFileFolder.internal.listMatterFileFolders",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFileFolder.internal.listMatterFileFolders",
      "module": "matterFileFolder",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFileFolders/procedures/internal/listMatterFileFolders.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/procedures/internal/listMatterFileFolders.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterFileFolders/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/router.ts#L15"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3ddf82c4",
      "interpretation": {
        "sig": "3ddf82c4",
        "summary": "Internal, service-to-service version of the same folder listing: returns a matter's file folders in order with file counts, plus the uncategorised file count.",
        "models": [
          {
            "model": "MatterFileFolder",
            "service": "matter-service"
          },
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFileFolder.internal.listMatterFileFoldersWithAuth",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFileFolder.internal.listMatterFileFoldersWithAuth",
      "module": "matterFileFolder",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFileFolders/procedures/internal/listMatterFileFoldersWithAuth.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/procedures/internal/listMatterFileFoldersWithAuth.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterFileFolders/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/router.ts#L16"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7e1bcd38",
      "interpretation": {
        "sig": "7e1bcd38",
        "summary": "Same folder listing as the other list endpoints, but first checks the given person is authorized on the firm side of the matter before returning the folders and uncategorised count.",
        "models": [
          {
            "model": "MatterFileFolder",
            "service": "matter-service"
          },
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFileFolder.lawyer.listMatterFileFolders",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFileFolder.lawyer.listMatterFileFolders",
      "module": "matterFileFolder",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFileFolders/procedures/lawyer/listMatterFileFolders.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/procedures/lawyer/listMatterFileFolders.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterFileFolders/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/router.ts#L19"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9eeb6eba",
      "interpretation": {
        "sig": "9eeb6eba",
        "summary": "Lets a firm member viewing a matter see its file folders (with file counts) plus how many files sit outside any folder.",
        "models": [
          {
            "model": "MatterFileFolder",
            "service": "matter-service"
          },
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFileFolder.lawyer.updateMatterFileFolder",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFileFolder.lawyer.updateMatterFileFolder",
      "module": "matterFileFolder",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateMatterFileFolderInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFileFolders/procedures/lawyer/updateMatterFileFolder.mutation.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/procedures/lawyer/updateMatterFileFolder.mutation.ts#L17"
      },
      "router": {
        "file": "services/matter-service/src/matterFileFolders/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/router.ts#L20"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "cd7b4222",
      "interpretation": {
        "sig": "cd7b4222",
        "summary": "Lets a firm member rename a matter file folder, change its colour, or reorder it, after confirming the folder belongs to that matter.",
        "models": [
          {
            "model": "MatterFileFolder",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFileFolder.lawyer.deleteMatterFileFolder",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFileFolder.lawyer.deleteMatterFileFolder",
      "module": "matterFileFolder",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "DeleteMatterFileFolderInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFileFolders/procedures/lawyer/deleteMatterFileFolder.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/procedures/lawyer/deleteMatterFileFolder.mutation.ts#L14"
      },
      "router": {
        "file": "services/matter-service/src/matterFileFolders/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/router.ts#L21"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "8a558fee",
      "interpretation": {
        "sig": "8a558fee",
        "summary": "Lets a firm member permanently delete a matter file folder once it confirms the folder exists on that matter.",
        "models": [
          {
            "model": "MatterFileFolder",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFileFolder.lawyer.insertMatterFileFolder",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFileFolder.lawyer.insertMatterFileFolder",
      "module": "matterFileFolder",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "InsertMatterFileFolderInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFileFolders/procedures/lawyer/insertMatterFileFolder.mutation.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/procedures/lawyer/insertMatterFileFolder.mutation.ts#L15"
      },
      "router": {
        "file": "services/matter-service/src/matterFileFolders/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/router.ts#L22"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5119383e",
      "interpretation": {
        "sig": "5119383e",
        "summary": "Lets a firm member create a new, empty file folder on a matter, placed after all existing folders in display order.",
        "models": [
          {
            "model": "MatterFileFolder",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFileFolder.lawyer.insertAndSetMatterFileFolder",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFileFolder.lawyer.insertAndSetMatterFileFolder",
      "module": "matterFileFolder",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "InsertAndSetMatterFileFolderInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFileFolders/procedures/lawyer/insertAndSetMatterFileFolder.mutation.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/procedures/lawyer/insertAndSetMatterFileFolder.mutation.ts#L16"
      },
      "router": {
        "file": "services/matter-service/src/matterFileFolders/router.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/router.ts#L23"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "c30984fa",
      "interpretation": {
        "sig": "c30984fa",
        "summary": "Lets a firm member create a new file folder and move a chosen set of existing matter files into it in one transaction, verifying the matter and every file id are valid first.",
        "models": [
          {
            "model": "MatterFileFolder",
            "service": "matter-service"
          },
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.admin.listMatterFiles",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.admin.listMatterFiles",
      "module": "matterFile",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListMatterFilesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/admin/listMatterFiles.query.ts",
        "line": 41,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/admin/listMatterFiles.query.ts#L41"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 34,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L34"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5bf05f48",
      "interpretation": {
        "sig": "5bf05f48",
        "summary": "Lists a matter's files with paging, sorting, and filters (name, visibility, uploader, folder), enriching each with uploader name and, per the migration cutover flag, whether it links to an editable `MatterDocument`.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          },
          {
            "model": "File",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.admin.getPreviewFileUrl",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.admin.getPreviewFileUrl",
      "module": "matterFile",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/admin/getPreviewFileUrl.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/admin/getPreviewFileUrl.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L35"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4c29fe8e",
      "interpretation": {
        "sig": "4c29fe8e",
        "summary": "Looks up a `FilePreview` by id and returns a signed S3 URL (10-minute expiry) if generation succeeded, otherwise throws `NOT_FOUND`.",
        "models": [
          {
            "model": "FilePreview",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.admin.listMatterFileUploaders",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.admin.listMatterFileUploaders",
      "module": "matterFile",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/admin/listMatterFileUploaders.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/admin/listMatterFileUploaders.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 36,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L36"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2f1a4674",
      "interpretation": {
        "sig": "2f1a4674",
        "summary": "Returns the distinct set of people who uploaded files on a matter, resolving their names via `identity-service`.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.admin.insertMatterFile",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.admin.insertMatterFile",
      "module": "matterFile",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "InsertMatterFileInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/admin/insertMatterFile.mutation.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/admin/insertMatterFile.mutation.ts#L20"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L37"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [
        "matter-service/file.uploaded"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9835cef0",
      "interpretation": {
        "sig": "9835cef0",
        "summary": "Registers a completed S3 upload as a matter file: verifies the object exists in S3, creates `MatterFile`/`File`/`FilePreview` rows, fires the `matter-service/file.uploaded` event, and (unless the source is an inbound email attachment) notifies other matter participants via Knock.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          },
          {
            "model": "File",
            "service": "matter-service"
          },
          {
            "model": "FilePreview",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.admin.deleteMatterFile",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.admin.deleteMatterFile",
      "module": "matterFile",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/admin/deleteMatterFile.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/admin/deleteMatterFile.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 38,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L38"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [
        "matter-service/file.deleted"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2e023499",
      "interpretation": {
        "sig": "2e023499",
        "summary": "Soft-deletes a matter file (marks its `File` `isDeleted`, removes any `MatterAttachment` rows) and fires `matter-service/file.deleted`.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          },
          {
            "model": "File",
            "service": "matter-service"
          },
          {
            "model": "MatterAttachment",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.admin.updateMatterFile",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.admin.updateMatterFile",
      "module": "matterFile",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateMatterFileInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/admin/updateMatterFile.mutation.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/admin/updateMatterFile.mutation.ts#L13"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 39,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L39"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "68a87da4",
      "interpretation": {
        "sig": "68a87da4",
        "summary": "Updates a matter file's visibility, display name, ingestion status, summary, or AI ingestion v3 status. Changing visibility notifies the client (if newly made `ALL`) and always notifies the matter's lead lawyer of the visibility change.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          },
          {
            "model": "File",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.admin.createMatterFileDownloadUrl",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.admin.createMatterFileDownloadUrl",
      "module": "matterFile",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterFileDownloadUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/admin/createMatterFileDownloadUrl.mutation.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/admin/createMatterFileDownloadUrl.mutation.ts#L13"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 40,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L40"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "bf41d1b6",
      "interpretation": {
        "sig": "bf41d1b6",
        "summary": "Named as a mutation but only reads: builds a signed S3 download URL for a matter file, with a filename like \"Matter #123 - name.ext\". No database write occurs.",
        "flags": [
          "mutation only reads"
        ],
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.admin.createMatterFileUploadUrl",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.admin.createMatterFileUploadUrl",
      "module": "matterFile",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListMatterFileUploadUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/admin/createMatterFileUploadUrl.mutation.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/admin/createMatterFileUploadUrl.mutation.ts#L16"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 41,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L41"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "53745416",
      "interpretation": {
        "sig": "53745416",
        "summary": "Generates a pre-signed S3 POST upload URL (15-minute expiry, 200MB max) so a client can upload a matter file directly to S3; nothing is written to the database here.",
        "flags": [
          "mutation only reads"
        ]
      }
    },
    {
      "id": "matter-service:matterFile.lawyer.listMatterFiles",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.lawyer.listMatterFiles",
      "module": "matterFile",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/lawyer/listMatterFiles.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/lawyer/listMatterFiles.query.ts#L7"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 44,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L44"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "431becb0",
      "interpretation": {
        "sig": "431becb0",
        "summary": "Lists a matter's files for a firm-side caller, same logic as the admin listing: paging, uploader names, and migration-aware document links.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          },
          {
            "model": "File",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.lawyer.getMatterFile",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.lawyer.getMatterFile",
      "module": "matterFile",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/lawyer/getMatterFile.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/lawyer/getMatterFile.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 45,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L45"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1f0b9e70",
      "interpretation": {
        "sig": "1f0b9e70",
        "summary": "Fetches a single matter file with its preview, throwing `FORBIDDEN` if the caller is a non-firm participant trying to view a file marked `FIRM_SIDE_ONLY`.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.lawyer.updateMatterFile",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.lawyer.updateMatterFile",
      "module": "matterFile",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateMatterFileInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/lawyer/updateMatterFile.mutation.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/lawyer/updateMatterFile.mutation.ts#L16"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 46,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L46"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2c1f4ea6",
      "interpretation": {
        "sig": "2c1f4ea6",
        "summary": "Same as the admin update: changes visibility, display name, or ingestion/AI status on a matter file, notifying the client and lead lawyer on visibility changes.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          },
          {
            "model": "File",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.lawyer.deleteMatterFile",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.lawyer.deleteMatterFile",
      "module": "matterFile",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "deleteMatterFileSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/lawyer/deleteMatterFile.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/lawyer/deleteMatterFile.mutation.ts#L12"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 47,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L47"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [
        "matter-service/file.deleted"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9c4db2ab",
      "interpretation": {
        "sig": "9c4db2ab",
        "summary": "Soft-deletes a matter file for a firm-side caller (same as the admin path) and fires `matter-service/file.deleted`.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          },
          {
            "model": "File",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.lawyer.insertMatterFile",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.lawyer.insertMatterFile",
      "module": "matterFile",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "InsertMatterFileInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/lawyer/insertMatterFile.mutation.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/lawyer/insertMatterFile.mutation.ts#L26"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 48,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L48"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [
        "matter-service/file.uploaded"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "10814232",
      "interpretation": {
        "sig": "10814232",
        "summary": "Registers an uploaded file against a matter for a firm-side caller, optionally attaching it to a folder, matter artifact, or document finalisation. Fires `matter-service/file.uploaded` and notifies other participants unless `notifyOtherParticipants` is false.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          },
          {
            "model": "File",
            "service": "matter-service"
          },
          {
            "model": "FilePreview",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.lawyer.createMatterFileDownloadUrl",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.lawyer.createMatterFileDownloadUrl",
      "module": "matterFile",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "createMatterFileDownloadUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/lawyer/createMatterFileDownloadUrl.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/lawyer/createMatterFileDownloadUrl.mutation.ts#L14"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 49,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L49"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "948d7ace",
      "interpretation": {
        "sig": "948d7ace",
        "summary": "Named as a mutation but only reads: checks the caller's matter participation, blocks download of `FIRM_SIDE_ONLY` files by non-firm users, and returns a signed S3 download URL. No write occurs.",
        "flags": [
          "mutation only reads"
        ],
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          },
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.lawyer.createMatterFileDownloadUrls",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.lawyer.createMatterFileDownloadUrls",
      "module": "matterFile",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "createMatterFileDownloadUrlsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/lawyer/createMatterFileDownloadUrls.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/lawyer/createMatterFileDownloadUrls.mutation.ts#L14"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 50,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L50"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "56d80300",
      "interpretation": {
        "sig": "56d80300",
        "summary": "Named as a mutation but only reads: builds signed download URLs for up to 100 matter files (500MB total cap) for a client-side zip download, throwing if any requested file is missing or the size limit is exceeded. No write occurs.",
        "flags": [
          "mutation only reads"
        ],
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.lawyer.createMatterFilePreviewUrl",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.lawyer.createMatterFilePreviewUrl",
      "module": "matterFile",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterFilePreviewUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/lawyer/createMatterFilePreviewUrl.mutation.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/lawyer/createMatterFilePreviewUrl.mutation.ts#L15"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 51,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L51"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a76e62c",
      "interpretation": {
        "sig": "a76e62c",
        "summary": "Named as a mutation but only reads: returns a signed S3 URL for a file's generated preview, blocking non-firm callers from `FIRM_SIDE_ONLY` files and erroring if no preview exists. No write occurs.",
        "flags": [
          "mutation only reads"
        ],
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.lawyer.createMatterFileUploadUrl",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.lawyer.createMatterFileUploadUrl",
      "module": "matterFile",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListMatterFileUploadUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/lawyer/createMatterFileUploadUrl.mutation.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/lawyer/createMatterFileUploadUrl.mutation.ts#L17"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 52,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L52"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "71fa4de4",
      "interpretation": {
        "sig": "71fa4de4",
        "summary": "Gives a firm-side user a pre-signed S3 POST URL for uploading a matter file, keyed to `matters/{matterId}/matterFiles/{filename}`. Named a mutation but does no database write: it only mints an upload URL.",
        "flags": [
          "read-that-writes"
        ]
      }
    },
    {
      "id": "matter-service:matterFile.lawyer.setMatterFilesFolder",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.lawyer.setMatterFilesFolder",
      "module": "matterFile",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "setMatterFilesFolderSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/lawyer/setMatterFilesFolder.mutation.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/lawyer/setMatterFilesFolder.mutation.ts#L17"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 53,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L53"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5b8a4d62",
      "interpretation": {
        "sig": "5b8a4d62",
        "summary": "Moves one or more matter files into a chosen `matterFileFolder` (or clears the folder if null), after checking the files and target folder both belong to the matter.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          },
          {
            "model": "MatterFileFolder",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.client.listMatterFiles",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.client.listMatterFiles",
      "module": "matterFile",
      "roleFolder": "client",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "matterClientSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/client/listMatterFiles.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/client/listMatterFiles.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 56,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L56"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "afc0131a",
      "interpretation": {
        "sig": "afc0131a",
        "summary": "Lists matter files visible to the client, filtered to visibility `ALL`, with uploader names resolved via `identity-service` and per-file document links (finalisation, artifact status) attached. Read-only despite touching a migration flag lookup along the way.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.client.insertMatterFile",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.client.insertMatterFile",
      "module": "matterFile",
      "roleFolder": "client",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "matterClientSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "InsertMatterFileInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/client/insertMatterFile.mutation.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/client/insertMatterFile.mutation.ts#L20"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 57,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L57"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [
        "matter-service/file.uploaded"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "c8d8502a",
      "interpretation": {
        "sig": "c8d8502a",
        "summary": "Registers a file already uploaded to S3 as a `MatterFile` record (verifying it exists in S3 first), fires `matter-service/file.uploaded`, and notifies other matter participants (firm side always, client side only if visibility is `ALL`) unless the file came in as an `EXTERNAL_EMAIL_ATTACHMENT`.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          },
          {
            "model": "File",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.client.createMatterFileUploadUrl",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.client.createMatterFileUploadUrl",
      "module": "matterFile",
      "roleFolder": "client",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "matterClientSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListMatterFileUploadUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/client/createMatterFileUploadUrl.mutation.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/client/createMatterFileUploadUrl.mutation.ts#L16"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 58,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L58"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1da9ac9e",
      "interpretation": {
        "sig": "1da9ac9e",
        "summary": "Client-side counterpart to the lawyer upload-URL mutation: mints a pre-signed S3 POST URL for a client to upload a matter file. Does no database write itself.",
        "flags": [
          "read-that-writes"
        ]
      }
    },
    {
      "id": "matter-service:matterFile.client.createMatterFileDownloadUrl",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.client.createMatterFileDownloadUrl",
      "module": "matterFile",
      "roleFolder": "client",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "matterClientSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "createMatterFileDownloadUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/client/createMatterFileDownloadUrl.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/client/createMatterFileDownloadUrl.mutation.ts#L14"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 59,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L59"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1b1613b8",
      "interpretation": {
        "sig": "1b1613b8",
        "summary": "Returns a time-limited (10 min) signed S3 GET URL to download a matter file, after checking the requester is a matter participant and blocking client-side access to `FIRM_SIDE_ONLY` files. Named a mutation but only reads: no data is written.",
        "flags": [
          "mutation only reads"
        ]
      }
    },
    {
      "id": "matter-service:matterFile.client.createMatterFilePreviewUrl",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.client.createMatterFilePreviewUrl",
      "module": "matterFile",
      "roleFolder": "client",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "matterClientSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterFilePreviewUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/client/createMatterFilePreviewUrl.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/client/createMatterFilePreviewUrl.mutation.ts#L14"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 60,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L60"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a13b25e0",
      "interpretation": {
        "sig": "a13b25e0",
        "summary": "Returns a signed S3 GET URL for a file's preview rendering, rejecting files that cannot be previewed or that the requester (non-firm participant) isn't allowed to see. Named a mutation but only reads.",
        "flags": [
          "mutation only reads"
        ]
      }
    },
    {
      "id": "matter-service:matterFile.internal.listMatterFiles",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.internal.listMatterFiles",
      "module": "matterFile",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/internal/listMatterFiles.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/internal/listMatterFiles.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 63,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L63"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3e330a16",
      "interpretation": {
        "sig": "3e330a16",
        "summary": "Internal-service version of the matter file list, used by other services rather than end users; same enrichment (uploader names via `identity-service`, document links) as the client listing, unscoped by visibility.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.internal.getMatterFile",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.internal.getMatterFile",
      "module": "matterFile",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/internal/getMatterFile.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/internal/getMatterFile.query.ts#L7"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 64,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L64"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e247655e",
      "interpretation": {
        "sig": "e247655e",
        "summary": "Fetches a single matter file plus its preview for another service, enforcing the same `FIRM_SIDE_ONLY` visibility check when an `identityId` is supplied.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.internal.updateMatterFileIngestion",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.internal.updateMatterFileIngestion",
      "module": "matterFile",
      "roleFolder": "internal",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateMatterFileIngestionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/internal/updateMatterFileIngestion.mutation.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/internal/updateMatterFileIngestion.mutation.ts#L15"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 65,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L65"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "66a4b8be",
      "interpretation": {
        "sig": "66a4b8be",
        "summary": "Lets an ingestion pipeline record the outcome of processing a matter file: sets the legacy `aiIngestionV2Status` (only if not already `SUCCESS`), the newer `aiIngestionV3Status`, and/or an AI-generated summary on the underlying `File` row.",
        "models": [
          {
            "model": "File",
            "service": "matter-service"
          },
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.internal.findMatterFileIdsInFirm",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.internal.findMatterFileIdsInFirm",
      "module": "matterFile",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/internal/findMatterFileIdsInFirm.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/internal/findMatterFileIdsInFirm.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 66,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L66"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "75ba769a",
      "interpretation": {
        "sig": "75ba769a",
        "summary": "Given a firm and a candidate list of file ids, returns which of them are real, non-deleted matter files belonging to that firm, for validating cross-service references.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.internal.attachMatterFileToTransaction",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.internal.attachMatterFileToTransaction",
      "module": "matterFile",
      "roleFolder": "internal",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "AttachMatterFileToTransactionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/internal/attachMatterFileToTransaction.mutation.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/internal/attachMatterFileToTransaction.mutation.ts#L11"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 67,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L67"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b2867f70",
      "interpretation": {
        "sig": "b2867f70",
        "summary": "Links a matter file to a billing transaction by setting its `transactionId`, after confirming the file exists on that matter.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterFile.internal.createMatterFileDownloadUrl",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.internal.createMatterFileDownloadUrl",
      "module": "matterFile",
      "roleFolder": "internal",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateMatterFileDownloadUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/internal/createMatterFileDownloadUrl.mutation.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/internal/createMatterFileDownloadUrl.mutation.ts#L13"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 68,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L68"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d7f3c9e8",
      "interpretation": {
        "sig": "d7f3c9e8",
        "summary": "Admin/internal variant of the download-URL mutation: builds a signed S3 GET URL for a matter file named \"Matter #{`humanReadableId`} - {`displayName`}.{ext}\", with no participant or visibility check (internal callers only). Named a mutation but only reads.",
        "flags": [
          "mutation only reads"
        ]
      }
    },
    {
      "id": "matter-service:matterFile.internal.createMatterFilePreviewUrl",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterFile.internal.createMatterFilePreviewUrl",
      "module": "matterFile",
      "roleFolder": "internal",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateMatterFilePreviewUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterFiles/procedures/internal/createMatterFilePreviewUrl.mutation.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/internal/createMatterFilePreviewUrl.mutation.ts#L13"
      },
      "router": {
        "file": "services/matter-service/src/matterFiles/router.ts",
        "line": 69,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/router.ts#L69"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6d33c270",
      "interpretation": {
        "sig": "6d33c270",
        "summary": "Admin/internal variant of the preview-URL mutation: returns a signed S3 GET URL for a file's preview rendering, rejecting files with no preview. Named a mutation but only reads.",
        "flags": [
          "mutation only reads"
        ]
      }
    },
    {
      "id": "matter-service:legl.lawyer.getConfig",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "legl.lawyer.getConfig",
      "module": "legl",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/legl/procedures/lawyer/getConfig.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/procedures/lawyer/getConfig.query.ts#L4"
      },
      "router": {
        "file": "services/matter-service/src/legl/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/router.ts#L12"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9657fa8b",
      "interpretation": {
        "sig": "9657fa8b",
        "summary": "Returns the LEGL integration's current dev-safety config: whether the safety layer is active (non-production) and, if so, the placeholder matter reference, reviewer email, and client name/email it substitutes for real ones. No LEGL or DB call, just reads local env-derived config.",
        "flags": []
      }
    },
    {
      "id": "matter-service:legl.lawyer.listWorkflows",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "legl.lawyer.listWorkflows",
      "module": "legl",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/legl/procedures/lawyer/listWorkflows.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/procedures/lawyer/listWorkflows.query.ts#L4"
      },
      "router": {
        "file": "services/matter-service/src/legl/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/router.ts#L13"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "704f8427",
      "interpretation": {
        "sig": "704f8427",
        "summary": "Lists the LEGL onboarding workflows a lawyer can pick from, each with its steps and whether each step requires a supporting document. Calls out to LEGL's API live, no local state.",
        "flags": []
      }
    },
    {
      "id": "matter-service:legl.lawyer.listReviewers",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "legl.lawyer.listReviewers",
      "module": "legl",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/legl/procedures/lawyer/listReviewers.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/procedures/lawyer/listReviewers.query.ts#L4"
      },
      "router": {
        "file": "services/matter-service/src/legl/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/router.ts#L14"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5c6c57",
      "interpretation": {
        "sig": "5c6c57",
        "summary": "Lists LEGL's available reviewers (name and email) for assigning to an onboarding request. Calls out to LEGL's API live, no local state.",
        "flags": []
      }
    },
    {
      "id": "matter-service:legl.lawyer.sendEngageRequest",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "legl.lawyer.sendEngageRequest",
      "module": "legl",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "SendLeglEngageRequestInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/legl/procedures/lawyer/sendEngageRequest.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/procedures/lawyer/sendEngageRequest.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/legl/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/router.ts#L15"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "contact.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/get.query.ts#L20",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "904df367",
      "interpretation": {
        "sig": "904df367",
        "summary": "Starts LEGL client onboarding for a matter: creates a `PENDING` `LeglEngageRequest` row, uploads the matter's documents to LEGL, submits the engage request, then stores the returned reference and step snapshot on the row. Notifies the client by email via Knock with their `submitUrl` (LEGL's own emailing is disabled since Lawhive owns comms). Rolls back the local row if the LEGL call fails.",
        "models": [
          {
            "model": "LeglEngageRequest",
            "service": "matter-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "matter-service:legl.lawyer.listEngageRequests",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "legl.lawyer.listEngageRequests",
      "module": "legl",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListLeglEngageRequestsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/legl/procedures/lawyer/listEngageRequests.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/procedures/lawyer/listEngageRequests.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/legl/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/router.ts#L16"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2c6c716f",
      "interpretation": {
        "sig": "2c6c716f",
        "summary": "Lists a matter's LEGL onboarding requests with their steps, review status, and any attached matter files, batching the file lookups into one query. Meant to be polled while requests are in flight.",
        "models": [
          {
            "model": "LeglEngageRequest",
            "service": "matter-service"
          },
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "matter-service:legl.lawyer.reviewEngageRequest",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "legl.lawyer.reviewEngageRequest",
      "module": "legl",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ReviewLeglEngageRequestInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/legl/procedures/lawyer/reviewEngageRequest.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/procedures/lawyer/reviewEngageRequest.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/legl/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/router.ts#L17"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [
        "legl/engage.reviewed"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1b20beee",
      "interpretation": {
        "sig": "1b20beee",
        "summary": "Lets a lawyer manually approve an engage request LEGL left in `READY_FOR_REVIEW`: claims it atomically (only the first call wins), records the reviewer and comment, tells LEGL it was reviewed, then fires `legl/engage.reviewed` so the Inngest handler moves it to `APPROVED` and downloads the resulting documents. Review here always means approve.",
        "models": [
          {
            "model": "LeglEngageRequest",
            "service": "matter-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "matter-service:legl.lawyer.createPaymentRequest",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "legl.lawyer.createPaymentRequest",
      "module": "legl",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateLeglPaymentRequestInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/legl/procedures/lawyer/createPaymentRequest.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/procedures/lawyer/createPaymentRequest.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/legl/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/router.ts#L18"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "contact.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/get.query.ts#L20",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2c22ddc3",
      "interpretation": {
        "sig": "2c22ddc3",
        "summary": "Creates a LEGL payment request for a client on a matter (validates the contact is an individual and, if `requiresEngageRequestId` is set, that it matches the same matter/client), stores it as a `LeglPaymentRequest` with the LEGL checkout URL, then triggers release of any pending payment emails for that matter/contact.",
        "models": [
          {
            "model": "LeglPaymentRequest",
            "service": "matter-service"
          },
          {
            "model": "LeglEngageRequest",
            "service": "matter-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "matter-service:legl.lawyer.listPaymentRequests",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "legl.lawyer.listPaymentRequests",
      "module": "legl",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListLeglPaymentRequestsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/legl/procedures/lawyer/listPaymentRequests.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/procedures/lawyer/listPaymentRequests.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/legl/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/router.ts#L19"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "403cc03",
      "interpretation": {
        "sig": "403cc03",
        "summary": "Lists a matter's LEGL payment requests (amount, description, status, checkout URL) newest first.",
        "models": [
          {
            "model": "LeglPaymentRequest",
            "service": "matter-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.createMatterDocumentEmpty",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.createMatterDocumentEmpty",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterDocumentEmptyInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentEmpty.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentEmpty.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 42,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L42"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.deleteContent",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.deleteContent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/deleteContent.mutation.ts#L4",
            "domain": "content"
          },
          {
            "service": "content-service",
            "path": "content.createContentEmpty",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.createContentEmpty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentEmpty.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "54380a62",
      "interpretation": {
        "sig": "54380a62",
        "summary": "Lets a firm lawyer start a new blank draft document on a matter: it creates an empty content record in `content-service`, then a `MatterDocument` row pointing at it. If the `MatterDocument` insert fails it deletes the just-created content to avoid an orphan.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.createMatterDocumentFromTemplate",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.createMatterDocumentFromTemplate",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterDocumentFromTemplateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentFromTemplate.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentFromTemplate.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 43,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L43"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.deleteContent",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.deleteContent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/deleteContent.mutation.ts#L4",
            "domain": "content"
          },
          {
            "service": "content-service",
            "path": "content.createContentFromTemplate",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.createContentFromTemplate",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentFromTemplate.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "98148f19",
      "interpretation": {
        "sig": "98148f19",
        "summary": "Creates a new matter document by cloning a firm template into `content-service`, then linking it to the matter as a `MatterDocument`. Cleans up the created content if the `MatterDocument` insert fails.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.createMatterDocumentFromExistingDocument",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.createMatterDocumentFromExistingDocument",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterDocumentFromExistingDocumentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentFromExistingDocument.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentFromExistingDocument.mutation.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 44,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L44"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.deleteContent",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.deleteContent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/deleteContent.mutation.ts#L4",
            "domain": "content"
          },
          {
            "service": "content-service",
            "path": "content.createContentFromExistingContent",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.createContentFromExistingContent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentFromExistingContent.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2b934483",
      "interpretation": {
        "sig": "2b934483",
        "summary": "Duplicates an existing matter document's content (a specific version, if given) into a new content record, then creates a new `MatterDocument` pointing at the copy. Not called by the apps directly, only used internally by other services; content is deleted if the `MatterDocument` insert fails.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.createMatterDocumentFromPlainText",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.createMatterDocumentFromPlainText",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterDocumentFromPlainTextInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentFromPlainText.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentFromPlainText.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 46,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L46"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.deleteContent",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.deleteContent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/deleteContent.mutation.ts#L4",
            "domain": "content"
          },
          {
            "service": "content-service",
            "path": "content.createContentFromPlainText",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.createContentFromPlainText",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentFromPlainText.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "44a26090",
      "interpretation": {
        "sig": "44a26090",
        "summary": "Creates a new matter document seeded from plain text: `content-service` turns the text into a content record, then a `MatterDocument` row links it to the matter. Rolls back the content if the `MatterDocument` insert fails.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.createMatterDocumentFromMarkdown",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.createMatterDocumentFromMarkdown",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterDocumentFromMarkdownInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentFromMarkdown.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentFromMarkdown.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 48,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L48"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.deleteContent",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.deleteContent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/deleteContent.mutation.ts#L4",
            "domain": "content"
          },
          {
            "service": "content-service",
            "path": "content.createContentFromMarkdown",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.createContentFromMarkdown",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentFromMarkdown.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "fd70965a",
      "interpretation": {
        "sig": "fd70965a",
        "summary": "Creates a new matter document from markdown source: `content-service` converts the markdown into a content record, then a `MatterDocument` row links it to the matter. Rolls back the content if the `MatterDocument` insert fails.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.createMatterDocumentFromHtml",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.createMatterDocumentFromHtml",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterDocumentFromHtmlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentFromHtml.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentFromHtml.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 49,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L49"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.deleteContent",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.deleteContent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/deleteContent.mutation.ts#L4",
            "domain": "content"
          },
          {
            "service": "content-service",
            "path": "content.createContentFromHtml",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.createContentFromHtml",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentFromHtml.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "142c5d32",
      "interpretation": {
        "sig": "142c5d32",
        "summary": "Creates a new matter document from raw HTML: `content-service` converts it into a content record, then a `MatterDocument` row links it to the matter. Rolls back the content if the `MatterDocument` insert fails.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.createMatterDocumentFromProsemirrorJson",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.createMatterDocumentFromProsemirrorJson",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterDocumentFromProsemirrorJsonInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentFromProsemirrorJson.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentFromProsemirrorJson.mutation.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 50,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L50"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.deleteContent",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.deleteContent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/deleteContent.mutation.ts#L4",
            "domain": "content"
          },
          {
            "service": "content-service",
            "path": "content.createContentFromProsemirrorJson",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.createContentFromProsemirrorJson",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentFromProsemirrorJson.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "79f79e7f",
      "interpretation": {
        "sig": "79f79e7f",
        "summary": "Creates a new matter document from a ProseMirror JSON document (the editor's native format): `content-service` stores it as a content record, then a `MatterDocument` row links it to the matter. Rolls back the content if the `MatterDocument` insert fails.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.createMatterDocumentFromUploadedDocx",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.createMatterDocumentFromUploadedDocx",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterDocumentFromUploadedDocxInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentFromUploadedDocx.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentFromUploadedDocx.mutation.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 52,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L52"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.createContentEmpty",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.createContentEmpty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentEmpty.mutation.ts#L5",
            "domain": "content"
          },
          {
            "service": "content-service",
            "path": "content.deleteContent",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.deleteContent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/deleteContent.mutation.ts#L4",
            "domain": "content"
          },
          {
            "service": "content-service",
            "path": "file.createUploadableFile",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:file.createUploadableFile",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/file/procedures/createUploadableFile.mutation.ts#L5",
            "domain": "content"
          },
          {
            "service": "content-service",
            "path": "content.createContentVersionFromFile",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.createContentVersionFromFile",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentVersionFromFile.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2aefdd9d",
      "interpretation": {
        "sig": "2aefdd9d",
        "summary": "Converts an already-uploaded, scanned DOCX matter file into an editable matter document: it creates empty content, uploads the file's bytes into `content-service` as a new content version, and creates the `MatterDocument` linking to the source file. Rejects if the file isn't an `UPLOAD`-sourced, scanned DOCX, or if a draft already exists for that file (checked both up front and via a DB unique-constraint race), and cleans up the created content on any failure.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          },
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.listMatterDocuments",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.listMatterDocuments",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListMatterDocumentsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/listMatterDocuments.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/listMatterDocuments.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 54,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L54"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.listContentVersions",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:content.listContentVersions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/listContentVersions.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d0892f40",
      "interpretation": {
        "sig": "d0892f40",
        "summary": "Lists the matter documents on a matter (optionally including deleted or finalised ones, hiding documents migrated from artifacts while a per-matter migration flag is off), and can attach each document's recent content versions by calling `content-service`.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.getMatterDocument",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.getMatterDocument",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetMatterDocumentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/getMatterDocument.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/getMatterDocument.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 55,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L55"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "573fd230",
      "interpretation": {
        "sig": "573fd230",
        "summary": "Fetches one matter document's own record by id and matter, optionally including a soft-deleted one.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.getMatterDocumentContentYjs",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.getMatterDocumentContentYjs",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetMatterDocumentContentYjsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/getMatterDocumentContentYjs.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/getMatterDocumentContentYjs.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 56,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L56"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.getContentYjs",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:content.getContentYjs",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentYjs.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e629bf47",
      "interpretation": {
        "sig": "e629bf47",
        "summary": "Resolves a matter document's linked content id, then fetches its collaborative-editing Yjs state (optionally diffed against a state vector, for a specific version) from `content-service`.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.getMatterDocumentContentProsemirrorJson",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.getMatterDocumentContentProsemirrorJson",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetMatterDocumentContentProsemirrorJsonInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/getMatterDocumentContentProsemirrorJson.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/getMatterDocumentContentProsemirrorJson.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 57,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L57"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.getContentProsemirrorJson",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:content.getContentProsemirrorJson",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentProsemirrorJson.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5f64c90d",
      "interpretation": {
        "sig": "5f64c90d",
        "summary": "Resolves a matter document's linked content id, then fetches its content as ProseMirror JSON from `content-service`.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.getMatterDocumentContentPlainText",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.getMatterDocumentContentPlainText",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetMatterDocumentContentPlainTextInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/getMatterDocumentContentPlainText.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/getMatterDocumentContentPlainText.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 59,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L59"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.getContentPlainText",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:content.getContentPlainText",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentPlainText.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "8a66e236",
      "interpretation": {
        "sig": "8a66e236",
        "summary": "Resolves a matter document's linked content id, then fetches its content as plain text from `content-service`.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.getMatterDocumentContentMarkdown",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.getMatterDocumentContentMarkdown",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetMatterDocumentContentMarkdownInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/getMatterDocumentContentMarkdown.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/getMatterDocumentContentMarkdown.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 60,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L60"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.getContentMarkdown",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:content.getContentMarkdown",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentMarkdown.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b472faf6",
      "interpretation": {
        "sig": "b472faf6",
        "summary": "Resolves a matter document's linked content id, then fetches its content rendered as markdown from `content-service`.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.getMatterDocumentContentDocx",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.getMatterDocumentContentDocx",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetMatterDocumentContentDocxInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/getMatterDocumentContentDocx.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/getMatterDocumentContentDocx.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 61,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L61"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.getContentDocx",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:content.getContentDocx",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentDocx.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "973eecb9",
      "interpretation": {
        "sig": "973eecb9",
        "summary": "Resolves a matter document's linked content id, then fetches it rendered as a DOCX file from `content-service`.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.getMatterDocumentContentPdf",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.getMatterDocumentContentPdf",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetMatterDocumentContentPdfInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/getMatterDocumentContentPdf.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/getMatterDocumentContentPdf.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 62,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L62"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.getContentPdf",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:content.getContentPdf",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentPdf.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "36e8f005",
      "interpretation": {
        "sig": "36e8f005",
        "summary": "Resolves a matter document's linked content id, then fetches it rendered as a PDF from `content-service`.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.finalizeMatterDocument",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.finalizeMatterDocument",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "FinalizeMatterDocumentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/finalizeMatterDocument.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/finalizeMatterDocument.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 63,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L63"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.createContentVersionFromCurrentState",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.createContentVersionFromCurrentState",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentVersionFromCurrentState.mutation.ts#L6",
            "domain": "content"
          },
          {
            "service": "content-service",
            "path": "content.getContentDocx",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:content.getContentDocx",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentDocx.query.ts#L5",
            "domain": "content"
          },
          {
            "service": "content-service",
            "path": "content.getContentPdf",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:content.getContentPdf",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentPdf.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/file.deleted",
        "matter-service/file.uploaded"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e8f26238",
      "interpretation": {
        "sig": "e8f26238",
        "summary": "Locks in the document's current content as a finalised version: snapshots it in `content-service`, renders DOCX and PDF copies, uploads both to S3 as matter files, and sets the document's `currentFinalisationId` to the new finalisation. The previous finalisation's DOCX gets retired.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          },
          {
            "model": "MatterDocumentFinalisation",
            "service": "matter-service"
          },
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.unfinalizeMatterDocument",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.unfinalizeMatterDocument",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UnfinalizeMatterDocumentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/unfinalizeMatterDocument.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/unfinalizeMatterDocument.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 64,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L64"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [
        "matter-service/file.deleted"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ccf54113",
      "interpretation": {
        "sig": "ccf54113",
        "summary": "Reverts a finalised document to draft by clearing `currentFinalisationId`, soft-deleting the retired finalisation's DOCX matter file, removing its `matterAttachment` rows, and deleting the object from S3. No-ops (`alreadyDraft: true`) if the document was already unfinalised.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          },
          {
            "model": "MatterFile",
            "service": "matter-service"
          },
          {
            "model": "MatterAttachment",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.deleteMatterDocument",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.deleteMatterDocument",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "DeleteMatterDocumentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/deleteMatterDocument.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/deleteMatterDocument.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 65,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L65"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.deleteContent",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.deleteContent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/deleteContent.mutation.ts#L4",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "c3c549dc",
      "interpretation": {
        "sig": "c3c549dc",
        "summary": "Deletes a matter document record and its underlying content in `content-service` (`content.deleteContent`). No soft-delete or archival; the document row is gone.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.updateMatterDocumentInfo",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.updateMatterDocumentInfo",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateMatterDocumentInfoInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/updateMatterDocumentInfo.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/updateMatterDocumentInfo.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 66,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L66"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1589d95e",
      "interpretation": {
        "sig": "1589d95e",
        "summary": "Renames a matter document by updating its `name` field directly in Postgres.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.applyMatterDocumentYjsUpdate",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.applyMatterDocumentYjsUpdate",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ApplyMatterDocumentYjsUpdateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/applyMatterDocumentYjsUpdate.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/applyMatterDocumentYjsUpdate.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 67,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L67"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.applyContentYjsUpdate",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.applyContentYjsUpdate",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/applyContentYjsUpdate.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "content-service/content.updatePersisted"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6f582294",
      "interpretation": {
        "sig": "6f582294",
        "summary": "Applies a Yjs collaborative-editing update (base64 diff, batch id, expected epoch) to the document's content in `content-service`, keeping the live editor state in sync as the lawyer types.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.createMatterDocumentVersion",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.createMatterDocumentVersion",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterDocumentVersionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersion.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersion.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 68,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L68"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.createContentVersionFromCurrentState",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.createContentVersionFromCurrentState",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentVersionFromCurrentState.mutation.ts#L6",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "c6994a94",
      "interpretation": {
        "sig": "c6994a94",
        "summary": "Snapshots the document's current content as a new labelled version in `content-service`. Not called from any app today, only from other services.",
        "flags": [
          "usage.usedByApps=false"
        ],
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.createMatterDocumentVersionFromPlainText",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.createMatterDocumentVersionFromPlainText",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterDocumentVersionFromPlainTextInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromPlainText.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromPlainText.mutation.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 69,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L69"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.createContentVersionFromPlainText",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.createContentVersionFromPlainText",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentVersionFromPlainText.mutation.ts#L6",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "c2f55ae5",
      "interpretation": {
        "sig": "c2f55ae5",
        "summary": "Creates a new content version for the document from a plain-text body, delegating to `content-service`. Not called from any app today, only from other services.",
        "flags": [
          "usage.usedByApps=false"
        ],
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.createMatterDocumentVersionFromMarkdown",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.createMatterDocumentVersionFromMarkdown",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterDocumentVersionFromMarkdownInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromMarkdown.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromMarkdown.mutation.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 71,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L71"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.createContentVersionFromMarkdown",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.createContentVersionFromMarkdown",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentVersionFromMarkdown.mutation.ts#L6",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ed8d120d",
      "interpretation": {
        "sig": "ed8d120d",
        "summary": "Creates a new content version for the document from a Markdown body, delegating to `content-service`. Not called from any app today, only from other services.",
        "flags": [
          "usage.usedByApps=false"
        ],
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.createMatterDocumentVersionFromHtml",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.createMatterDocumentVersionFromHtml",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterDocumentVersionFromHtmlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromHtml.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromHtml.mutation.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 73,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L73"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.createContentVersionFromHtml",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.createContentVersionFromHtml",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentVersionFromHtml.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a5bae415",
      "interpretation": {
        "sig": "a5bae415",
        "summary": "Creates a new content version for the document from an HTML body, delegating to `content-service`. Not called from any app today, only from other services.",
        "flags": [
          "usage.usedByApps=false"
        ],
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.createMatterDocumentVersionFromProsemirrorJson",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.createMatterDocumentVersionFromProsemirrorJson",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterDocumentVersionFromProsemirrorJsonInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromProsemirrorJson.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromProsemirrorJson.mutation.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 75,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L75"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.createContentVersionFromProsemirrorJson",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.createContentVersionFromProsemirrorJson",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentVersionFromProsemirrorJson.mutation.ts#L6",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "aaf24448",
      "interpretation": {
        "sig": "aaf24448",
        "summary": "Creates a new content version for the document from a Prosemirror JSON document, delegating to `content-service`. Not called from any app today, only from other services.",
        "flags": [
          "usage.usedByApps=false"
        ],
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.createMatterDocumentVersionFromYjsSnapshot",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.createMatterDocumentVersionFromYjsSnapshot",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterDocumentVersionFromYjsSnapshotInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromYjsSnapshot.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromYjsSnapshot.mutation.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 77,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L77"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.createContentVersionFromYjsSnapshot",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.createContentVersionFromYjsSnapshot",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentVersionFromYjsSnapshot.mutation.ts#L6",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6e815612",
      "interpretation": {
        "sig": "6e815612",
        "summary": "Creates a new content version for the document from a Yjs snapshot, delegating to `content-service`. Not called from any app today, only from other services.",
        "flags": [
          "usage.usedByApps=false"
        ],
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.createMatterDocumentVersionFromExistingVersion",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.createMatterDocumentVersionFromExistingVersion",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterDocumentVersionFromExistingVersionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromExistingVersion.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromExistingVersion.mutation.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 79,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L79"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.createContentVersionFromExistingVersion",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.createContentVersionFromExistingVersion",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentVersionFromExistingVersion.mutation.ts#L6",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "8f09b8f5",
      "interpretation": {
        "sig": "8f09b8f5",
        "summary": "Duplicates an existing content version of the document into a new version with its own label and description, via `content-service`.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.createMatterDocumentVersionDocxUpload",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.createMatterDocumentVersionDocxUpload",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterDocumentVersionDocxUploadInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersionDocxUpload.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersionDocxUpload.mutation.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 81,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L81"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "file.createUploadableFile",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:file.createUploadableFile",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/file/procedures/createUploadableFile.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "84609c3d",
      "interpretation": {
        "sig": "84609c3d",
        "summary": "Requests an uploadable-file slot from `content-service` for a DOCX to become a new version of the document (source `EXTERNAL`); the actual file bytes are uploaded separately using the returned target. Not called from any app today, only from other services.",
        "flags": [
          "usage.usedByApps=false"
        ],
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.updateMatterDocumentVersionInfo",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.updateMatterDocumentVersionInfo",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateMatterDocumentVersionInfoInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/updateMatterDocumentVersionInfo.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/updateMatterDocumentVersionInfo.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 83,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L83"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.updateContentVersionInfo",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.updateContentVersionInfo",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/updateContentVersionInfo.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "46c6995d",
      "interpretation": {
        "sig": "46c6995d",
        "summary": "Updates a content version's label and description in `content-service`. Not called from any app today, only from other services.",
        "flags": [
          "usage.usedByApps=false"
        ],
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.deleteMatterDocumentVersion",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.deleteMatterDocumentVersion",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "DeleteMatterDocumentVersionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/deleteMatterDocumentVersion.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/deleteMatterDocumentVersion.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 84,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L84"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.deleteContentVersion",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.deleteContentVersion",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/deleteContentVersion.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3500c9bf",
      "interpretation": {
        "sig": "3500c9bf",
        "summary": "Deletes one content version of the document via `content-service`. Not called from any app today, only from other services.",
        "flags": [
          "usage.usedByApps=false"
        ],
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.lawyer.listMatterDocumentVersions",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.lawyer.listMatterDocumentVersions",
      "module": "matterDocument",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListMatterDocumentVersionsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/lawyer/listMatterDocumentVersions.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/listMatterDocumentVersions.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 85,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L85"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.listContentVersions",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:content.listContentVersions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/listContentVersions.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1c0d64fe",
      "interpretation": {
        "sig": "1c0d64fe",
        "summary": "Lists all content versions of a matter document, fetched from `content-service`. Read-only, no local writes.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.internal.listMatterDocuments",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.internal.listMatterDocuments",
      "module": "matterDocument",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListMatterDocumentsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/internal/listMatterDocuments.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/internal/listMatterDocuments.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 88,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L88"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.listContentVersions",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:content.listContentVersions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/listContentVersions.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "38dfcc8a",
      "interpretation": {
        "sig": "38dfcc8a",
        "summary": "Lists a matter's documents from the `matter-service` DB, filtering out deleted or finalised copies unless asked for and hiding documents migrated from artifacts until the migration flag flips on for that matter. When a `versionsLimit` is given it also pulls each document's recent content versions from `content-service`.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.internal.findMatterDocumentIdsInFirm",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.internal.findMatterDocumentIdsInFirm",
      "module": "matterDocument",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/internal/findMatterDocumentIdsInFirm.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/internal/findMatterDocumentIdsInFirm.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 89,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L89"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "441a505a",
      "interpretation": {
        "sig": "441a505a",
        "summary": "Given a firm and a list of candidate ids, returns the subset that are real, non-deleted matter documents belonging to that firm. Used by other services to validate document references before acting on them.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.internal.getMatterDocumentContentMarkdown",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.internal.getMatterDocumentContentMarkdown",
      "module": "matterDocument",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetMatterDocumentContentMarkdownInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/internal/getMatterDocumentContentMarkdown.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/internal/getMatterDocumentContentMarkdown.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 90,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L90"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.getContentMarkdown",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:content.getContentMarkdown",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentMarkdown.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3e11ef82",
      "interpretation": {
        "sig": "3e11ef82",
        "summary": "Resolves a matter document to its `content-service` `contentId`, then fetches that content's markdown (optionally a specific version) from `content-service`.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.internal.getMatterDocumentContentMap",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.internal.getMatterDocumentContentMap",
      "module": "matterDocument",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetMatterDocumentContentMapInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/internal/getMatterDocumentContentMap.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/internal/getMatterDocumentContentMap.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 92,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L92"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.getContentMap",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:content.getContentMap",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentMap.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7bb1f2a3",
      "interpretation": {
        "sig": "7bb1f2a3",
        "summary": "Resolves a matter document to its `contentId` and fetches a paginated map of that content's structure (sections/blocks with preview text) from `content-service`.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.internal.getMatterDocumentContentProsemirrorJson",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.internal.getMatterDocumentContentProsemirrorJson",
      "module": "matterDocument",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetMatterDocumentContentProsemirrorJsonInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/internal/getMatterDocumentContentProsemirrorJson.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/internal/getMatterDocumentContentProsemirrorJson.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 93,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L93"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.getContentProsemirrorJson",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:content.getContentProsemirrorJson",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentProsemirrorJson.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "32f1918b",
      "interpretation": {
        "sig": "32f1918b",
        "summary": "Resolves a matter document to its `contentId` and fetches the full document body as ProseMirror JSON from `content-service`, capped by `maxSizeBytes`.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterDocument.internal.getMatterDocumentContentProsemirrorJsonSection",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterDocument.internal.getMatterDocumentContentProsemirrorJsonSection",
      "module": "matterDocument",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetMatterDocumentContentProsemirrorJsonSectionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterDocuments/procedures/internal/getMatterDocumentContentProsemirrorJsonSection.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/internal/getMatterDocumentContentProsemirrorJsonSection.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterDocuments/router.ts",
        "line": 95,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/router.ts#L95"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.getContentProsemirrorJsonSection",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:content.getContentProsemirrorJsonSection",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentProsemirrorJsonSection.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9ea996c2",
      "interpretation": {
        "sig": "9ea996c2",
        "summary": "Resolves a matter document to its `contentId` and fetches a single from/to section of that document's body as ProseMirror JSON from `content-service`, capped by `maxSizeBytes`.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterPrecedent.internal.listMatterPrecedents",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterPrecedent.internal.listMatterPrecedents",
      "module": "matterPrecedent",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListMatterPrecedentsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterPrecedents/procedures/internal/listMatterPrecedents.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterPrecedents/procedures/internal/listMatterPrecedents.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterPrecedents/router.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterPrecedents/router.ts#L9"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.listTemplates",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:template.listTemplates",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/listTemplates.query.ts#L5",
            "domain": "content"
          },
          {
            "service": "content-service",
            "path": "template.listTemplateVersions",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:template.listTemplateVersions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/listTemplateVersions.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ce9d423a",
      "interpretation": {
        "sig": "ce9d423a",
        "summary": "Lists the precedent templates a matter's firm and identity can use, pulling firm-scoped and identity-scoped templates from `content-service` and deduplicating them, optionally attaching a capped number of recent versions per template.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterPrecedent.internal.getMatterPrecedentContentMarkdown",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterPrecedent.internal.getMatterPrecedentContentMarkdown",
      "module": "matterPrecedent",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetMatterPrecedentContentMarkdownInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterPrecedents/procedures/internal/getMatterPrecedentContentMarkdown.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterPrecedents/procedures/internal/getMatterPrecedentContentMarkdown.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterPrecedents/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterPrecedents/router.ts#L10"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.getTemplate",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:template.getTemplate",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/getTemplate.query.ts#L4",
            "domain": "content"
          },
          {
            "service": "content-service",
            "path": "content.getContentMarkdown",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:content.getContentMarkdown",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentMarkdown.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "c8e517b7",
      "interpretation": {
        "sig": "c8e517b7",
        "summary": "Returns the markdown body of a precedent template's content, after checking the template's scope (firm or identity) actually matches the requesting matter and identity.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterPrecedent.internal.getMatterPrecedentContentMap",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterPrecedent.internal.getMatterPrecedentContentMap",
      "module": "matterPrecedent",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetMatterPrecedentContentMapInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterPrecedents/procedures/internal/getMatterPrecedentContentMap.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterPrecedents/procedures/internal/getMatterPrecedentContentMap.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterPrecedents/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterPrecedents/router.ts#L11"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.getTemplate",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:template.getTemplate",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/getTemplate.query.ts#L4",
            "domain": "content"
          },
          {
            "service": "content-service",
            "path": "content.getContentMap",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:content.getContentMap",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentMap.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d4b6c2e0",
      "interpretation": {
        "sig": "d4b6c2e0",
        "summary": "Returns a paginated map of a precedent template's content nodes (with preview text), after verifying the template belongs to the requesting matter's firm or identity.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterPrecedent.internal.getMatterPrecedentContentProsemirrorJson",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterPrecedent.internal.getMatterPrecedentContentProsemirrorJson",
      "module": "matterPrecedent",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetMatterPrecedentContentProsemirrorJsonInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterPrecedents/procedures/internal/getMatterPrecedentContentProsemirrorJson.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterPrecedents/procedures/internal/getMatterPrecedentContentProsemirrorJson.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterPrecedents/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterPrecedents/router.ts#L12"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.getTemplate",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:template.getTemplate",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/getTemplate.query.ts#L4",
            "domain": "content"
          },
          {
            "service": "content-service",
            "path": "content.getContentProsemirrorJson",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:content.getContentProsemirrorJson",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentProsemirrorJson.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2f489614",
      "interpretation": {
        "sig": "2f489614",
        "summary": "Returns the full ProseMirror JSON document for a precedent template's content, after confirming the template is accessible to the requesting matter's firm or identity.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterPrecedent.internal.getMatterPrecedentContentProsemirrorJsonSection",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterPrecedent.internal.getMatterPrecedentContentProsemirrorJsonSection",
      "module": "matterPrecedent",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetMatterPrecedentContentProsemirrorJsonSectionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterPrecedents/procedures/internal/getMatterPrecedentContentProsemirrorJsonSection.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterPrecedents/procedures/internal/getMatterPrecedentContentProsemirrorJsonSection.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterPrecedents/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterPrecedents/router.ts#L14"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.getTemplate",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:template.getTemplate",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/getTemplate.query.ts#L4",
            "domain": "content"
          },
          {
            "service": "content-service",
            "path": "content.getContentProsemirrorJsonSection",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:content.getContentProsemirrorJsonSection",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentProsemirrorJsonSection.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "738c2a2f",
      "interpretation": {
        "sig": "738c2a2f",
        "summary": "Returns a from/to slice of a precedent template's ProseMirror JSON content, after the same firm/identity access check used by the other precedent content lookups.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterNote.lawyer.listMatterNotes",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterNote.lawyer.listMatterNotes",
      "module": "matterNote",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterNotes/procedures/lawyer/listMatterNotes.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/lawyer/listMatterNotes.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterNotes/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/router.ts#L17"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "36f0b908",
      "interpretation": {
        "sig": "36f0b908",
        "summary": "Lists a matter's notes newest-first, with each note's body hydrated from `content-service` (falling back to the inline column) and the creator's name/photo attached from `identity-service`.",
        "models": [
          {
            "model": "MatterNote",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterNote.lawyer.getMatterNote",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterNote.lawyer.getMatterNote",
      "module": "matterNote",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterNotes/procedures/lawyer/getMatterNote.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/lawyer/getMatterNote.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterNotes/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/router.ts#L18"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "21cc876e",
      "interpretation": {
        "sig": "21cc876e",
        "summary": "Fetches one matter note, hydrates its body from `content-service`, attaches the creator's identity details, and (if the note came from a call) includes the source call's ID.",
        "models": [
          {
            "model": "MatterNote",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterNote.lawyer.getMatterNoteContentProsemirrorJson",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterNote.lawyer.getMatterNoteContentProsemirrorJson",
      "module": "matterNote",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetMatterNoteContentProsemirrorJsonInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterNotes/procedures/lawyer/getMatterNoteContentProsemirrorJson.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/lawyer/getMatterNoteContentProsemirrorJson.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterNotes/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/router.ts#L19"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.getContentProsemirrorJson",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:content.getContentProsemirrorJson",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentProsemirrorJson.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "60306a89",
      "interpretation": {
        "sig": "60306a89",
        "summary": "Returns a matter note's body as ProseMirror JSON by resolving the note to its `content-service` `contentId` and forwarding the read there.",
        "flags": [
          "not used by any app"
        ]
      }
    },
    {
      "id": "matter-service:matterNote.lawyer.getMatterNoteContentMap",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterNote.lawyer.getMatterNoteContentMap",
      "module": "matterNote",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetMatterNoteContentMapInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterNotes/procedures/lawyer/getMatterNoteContentMap.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/lawyer/getMatterNoteContentMap.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterNotes/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/router.ts#L21"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.getContentMap",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:content.getContentMap",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentMap.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ee96fe45",
      "interpretation": {
        "sig": "ee96fe45",
        "summary": "Returns a paginated outline (headings/blocks with previews) of a matter note's content, resolved via the note's `contentId` and read from `content-service`.",
        "flags": [
          "not used by any app"
        ]
      }
    },
    {
      "id": "matter-service:matterNote.lawyer.getMatterNoteContentYjs",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterNote.lawyer.getMatterNoteContentYjs",
      "module": "matterNote",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetMatterNoteContentYjsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterNotes/procedures/lawyer/getMatterNoteContentYjs.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/lawyer/getMatterNoteContentYjs.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterNotes/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/router.ts#L22"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.getContentYjs",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:content.getContentYjs",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/getContentYjs.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f327d1c7",
      "interpretation": {
        "sig": "f327d1c7",
        "summary": "Returns a matter note's collaborative-editing (Yjs) state so a client can sync its editor, resolved via the note's `contentId` and read from `content-service`."
      }
    },
    {
      "id": "matter-service:matterNote.lawyer.createMatterNote",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterNote.lawyer.createMatterNote",
      "module": "matterNote",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterNoteInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterNotes/procedures/lawyer/createMatterNote.mutation.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/lawyer/createMatterNote.mutation.ts#L13"
      },
      "router": {
        "file": "services/matter-service/src/matterNotes/router.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/router.ts#L23"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.createContentFromMarkdown",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.createContentFromMarkdown",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentFromMarkdown.mutation.ts#L5",
            "domain": "content"
          },
          {
            "service": "content-service",
            "path": "content.deleteContent",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.deleteContent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/deleteContent.mutation.ts#L4",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/note.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "771c46f8",
      "interpretation": {
        "sig": "771c46f8",
        "summary": "Creates a new matter note: writes the note's markdown to `content-service` to get a `contentId`, then creates the `MatterNote` row in Prisma (rolling back the `content-service` record if the DB insert fails) and fires the `note.created` Inngest event.",
        "models": [
          {
            "model": "MatterNote",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterNote.lawyer.updateMatterNote",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterNote.lawyer.updateMatterNote",
      "module": "matterNote",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateMatterNoteInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterNotes/procedures/lawyer/updateMatterNote.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/lawyer/updateMatterNote.mutation.ts#L12"
      },
      "router": {
        "file": "services/matter-service/src/matterNotes/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/router.ts#L24"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.createContentVersionFromMarkdown",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.createContentVersionFromMarkdown",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentVersionFromMarkdown.mutation.ts#L6",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/note.updated"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ea434933",
      "interpretation": {
        "sig": "ea434933",
        "summary": "Edits a matter note's body: if the note is `content-service`-backed, creates a new content version there; otherwise updates the inline content column directly in Prisma. Fires the `note.updated` Inngest event either way.",
        "models": [
          {
            "model": "MatterNote",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterNote.lawyer.applyMatterNoteYjsUpdate",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterNote.lawyer.applyMatterNoteYjsUpdate",
      "module": "matterNote",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ApplyMatterNoteYjsUpdateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterNotes/procedures/lawyer/applyMatterNoteYjsUpdate.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/lawyer/applyMatterNoteYjsUpdate.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterNotes/router.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/router.ts#L25"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.applyContentYjsUpdate",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.applyContentYjsUpdate",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/applyContentYjsUpdate.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "content-service/content.updatePersisted"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a72b8b4",
      "interpretation": {
        "sig": "a72b8b4",
        "summary": "Applies an incremental Yjs update (from live collaborative editing) to a matter note's content, resolving the note to its `contentId` and delegating the write to `content-service`.",
        "flags": [
          "write is entirely via-services, no direct Prisma write here"
        ]
      }
    },
    {
      "id": "matter-service:matterNote.lawyer.deleteMatterNote",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterNote.lawyer.deleteMatterNote",
      "module": "matterNote",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "DeleteMatterNoteInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterNotes/procedures/lawyer/deleteMatterNote.mutation.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/lawyer/deleteMatterNote.mutation.ts#L11"
      },
      "router": {
        "file": "services/matter-service/src/matterNotes/router.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/router.ts#L26"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "22c7fba",
      "interpretation": {
        "sig": "22c7fba",
        "summary": "Soft-deletes a matter note by setting `isDeleted` true; rejects if the note is already deleted.",
        "models": [
          {
            "model": "MatterNote",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterNote.internal.listMatterNotes",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterNote.internal.listMatterNotes",
      "module": "matterNote",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterNotes/procedures/internal/listMatterNotes.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/internal/listMatterNotes.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterNotes/router.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/router.ts#L29"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "60fc79e",
      "interpretation": {
        "sig": "60fc79e",
        "summary": "Service-to-service version of `listMatterNotes`: same listing and hydration logic, but reads note content through the internal (pre-auth) `content-service` client and supports filtering to notes created before a given datetime.",
        "flags": [
          "not used by any app (service-to-service only)"
        ]
      }
    },
    {
      "id": "matter-service:matterNote.internal.getMatterNote",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterNote.internal.getMatterNote",
      "module": "matterNote",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterNotes/procedures/internal/getMatterNote.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/internal/getMatterNote.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterNotes/router.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/router.ts#L30"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "19a3bab4",
      "interpretation": {
        "sig": "19a3bab4",
        "summary": "Service-to-service version of `getMatterNote`, reading the note's content through the internal (pre-auth) `content-service` client instead of the user-scoped one.",
        "flags": [
          "not used by any app (service-to-service only)"
        ]
      }
    },
    {
      "id": "matter-service:matterNote.internal.createMatterNote",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterNote.internal.createMatterNote",
      "module": "matterNote",
      "roleFolder": "internal",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateMatterNoteInternalInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterNotes/procedures/internal/createMatterNote.mutation.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/internal/createMatterNote.mutation.ts#L19"
      },
      "router": {
        "file": "services/matter-service/src/matterNotes/router.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/router.ts#L31"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.createContentFromMarkdown",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.createContentFromMarkdown",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentFromMarkdown.mutation.ts#L5",
            "domain": "content"
          },
          {
            "service": "content-service",
            "path": "content.deleteContent",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.deleteContent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/deleteContent.mutation.ts#L4",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/note.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ce98cee4",
      "interpretation": {
        "sig": "ce98cee4",
        "summary": "Background-context version of `createMatterNote`: signs a short-lived identity token for the given `createdById` (there's no logged-in user in this path) so the identity-checked `content-service` write attributes correctly, then creates the note the same way as the lawyer-facing mutation.",
        "models": [
          {
            "model": "MatterNote",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterNote.internal.updateMatterNote",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterNote.internal.updateMatterNote",
      "module": "matterNote",
      "roleFolder": "internal",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateMatterNoteInternalInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterNotes/procedures/internal/updateMatterNote.mutation.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/internal/updateMatterNote.mutation.ts#L15"
      },
      "router": {
        "file": "services/matter-service/src/matterNotes/router.ts",
        "line": 32,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/router.ts#L32"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "content.createContentVersionFromMarkdown",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:content.createContentVersionFromMarkdown",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/content/procedures/createContentVersionFromMarkdown.mutation.ts#L6",
            "domain": "content"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/note.updated"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "3bf3b5db",
      "interpretation": {
        "sig": "3bf3b5db",
        "summary": "Service-to-service version of `updateMatterNote` with identical logic (new `content-service` version or inline Prisma update, then `note.updated` event), but nothing currently calls it.",
        "flags": [
          "usage.dead: no callers found"
        ],
        "models": [
          {
            "model": "MatterNote",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterParticipant.admin.listMatterParticipants",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterParticipant.admin.listMatterParticipants",
      "module": "matterParticipant",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterParticipants/procedures/admin/listMatterParticipants.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/admin/listMatterParticipants.query.ts#L4"
      },
      "router": {
        "file": "services/matter-service/src/matterParticipants/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/router.ts#L15"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1549975c",
      "interpretation": {
        "sig": "1549975c",
        "summary": "Lists everyone attached to a matter (lawyers, team members, clients) and enriches each with their identity record and firm membership pulled from `identity-service`.",
        "models": [
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterParticipant.admin.removeMatterParticipant",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterParticipant.admin.removeMatterParticipant",
      "module": "matterParticipant",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterParticipants/procedures/admin/removeMatterParticipant.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/admin/removeMatterParticipant.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterParticipants/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/router.ts#L16"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "fa2802a8",
      "interpretation": {
        "sig": "fa2802a8",
        "summary": "Takes a participant off a matter, but the actual removal happens by publishing a `matterParticipant.removed` event rather than the procedure deleting the row itself; blocks removal of the lead participant.",
        "models": [
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          }
        ],
        "flags": [
          "mutation only reads (write is a published event, not a direct DB change)"
        ]
      }
    },
    {
      "id": "matter-service:matterParticipant.admin.makeLeadMatterParticipant",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterParticipant.admin.makeLeadMatterParticipant",
      "module": "matterParticipant",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterParticipants/procedures/admin/makeParticipantLead.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/admin/makeParticipantLead.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterParticipants/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/router.ts#L17"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2578b99f",
      "interpretation": {
        "sig": "2578b99f",
        "summary": "Promotes a `CLIENT` participant to lead on a matter, again by publishing a `matterParticipant.leadChanged` event instead of writing the row directly; rejects non-`CLIENT` participants and participants already marked lead.",
        "models": [
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          }
        ],
        "flags": [
          "mutation only reads (write is a published event, not a direct DB change)"
        ]
      }
    },
    {
      "id": "matter-service:matterParticipant.admin.inviteClientMatterParticipant",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterParticipant.admin.inviteClientMatterParticipant",
      "module": "matterParticipant",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "InviteClientMatterParticipantInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterParticipants/procedures/admin/inviteClientMatterParticipant.mutation.ts",
        "line": 39,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/admin/inviteClientMatterParticipant.mutation.ts#L39"
      },
      "router": {
        "file": "services/matter-service/src/matterParticipants/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/router.ts#L18"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "contact.ensureForIdentity",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:contact.ensureForIdentity",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/ensure-for-identity.mutation.ts#L21",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.admin.search",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.admin.search",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/searchIdentities.query.ts#L7",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "credential.createClerkUser",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:credential.createClerkUser",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/credential/procedures/createClerkUserMutation.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2ddf527f",
      "interpretation": {
        "sig": "2ddf527f",
        "summary": "Invites a client onto a matter: for an existing person it adds them as a `CLIENT` participant, subscribes them in Knock and sends the `clientInvitedToMatter` notification; for a new person it first creates a Clerk user and identity record via `identity-service`, then does the same. Either path also creates/links a `matterContact` record for the firm.",
        "models": [
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          },
          {
            "model": "MatterContact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterParticipant.admin.countMattersForPersons",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterParticipant.admin.countMattersForPersons",
      "module": "matterParticipant",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CounterMattersForPersonQueryInput",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterParticipants/procedures/admin/countMattersForPersons.query.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/admin/countMattersForPersons.query.ts#L17"
      },
      "router": {
        "file": "services/matter-service/src/matterParticipants/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/router.ts#L19"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ae105b5e",
      "interpretation": {
        "sig": "ae105b5e",
        "summary": "Given a list of identity IDs, returns per-person counts of how many matters they participate in and how many they lead, optionally filtered by side, matter status or firm.",
        "models": [
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterParticipant.lawyer.assignPersonToMatter",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterParticipant.lawyer.assignPersonToMatter",
      "module": "matterParticipant",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "AssignPersonToMatterInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterParticipants/procedures/lawyer/assignPersonToMatter.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/lawyer/assignPersonToMatter.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterParticipants/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/router.ts#L22"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "eb413fae",
      "interpretation": {
        "sig": "eb413fae",
        "summary": "Grants a firm team member access to a matter after checking they belong to that firm; the grant itself is a `matterParticipant.added` event publish, not a direct row insert, so a lawyer calling this only triggers reads plus the event.",
        "models": [
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          }
        ],
        "flags": [
          "mutation only reads (write is a published event, not a direct DB change)"
        ]
      }
    },
    {
      "id": "matter-service:matterParticipant.lawyer.removePersonFromMatter",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterParticipant.lawyer.removePersonFromMatter",
      "module": "matterParticipant",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RemovePersonFromMatterInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterParticipants/procedures/lawyer/removePersonFromMatter.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/lawyer/removePersonFromMatter.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterParticipants/router.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/router.ts#L23"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a51cc1c",
      "interpretation": {
        "sig": "a51cc1c",
        "summary": "Revokes a firm team member's access to a matter on the `FIRM` side; looks up the participant row and, if found, delegates to `removeMatterParticipant` (which publishes the removal event rather than deleting directly). No-ops if the person was never on the matter.",
        "models": [
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          }
        ],
        "flags": [
          "mutation only reads (write is a published event, not a direct DB change)"
        ]
      }
    },
    {
      "id": "matter-service:matterParticipant.internal.getMatterParticipant",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterParticipant.internal.getMatterParticipant",
      "module": "matterParticipant",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetMatterParticipantInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterParticipants/procedures/internal/getMatterParticipant.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/internal/getMatterParticipant.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterParticipants/router.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/router.ts#L26"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "41a6c46e",
      "interpretation": {
        "sig": "41a6c46e",
        "summary": "Looks up a single matter participant by matter, person, side and participant type, including the parent matter. No caller in apps or services currently uses this endpoint.",
        "models": [
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          }
        ],
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "matter-service:matterParticipant.internal.listMatterParticipants",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterParticipant.internal.listMatterParticipants",
      "module": "matterParticipant",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterParticipants/procedures/internal/listMatterParticipants.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/internal/listMatterParticipants.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterParticipants/router.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/router.ts#L27"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "fe17a14a",
      "interpretation": {
        "sig": "fe17a14a",
        "summary": "Internal-JWT counterpart to the admin `listMatterParticipants`: lists participants on a matter enriched with identity and firm membership data from `identity-service`, for service-to-service callers rather than authenticated staff.",
        "models": [
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterParticipant.internal.getMattersForPersonWithParticipantsWithEmail",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterParticipant.internal.getMattersForPersonWithParticipantsWithEmail",
      "module": "matterParticipant",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterParticipants/procedures/internal/getMattersForPersonWithParticipantsWithEmail.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/internal/getMattersForPersonWithParticipantsWithEmail.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterParticipants/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/router.ts#L28"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "51f7d3d2",
      "interpretation": {
        "sig": "51f7d3d2",
        "summary": "Finds matters where a given identity is a `FIRM`-side participant and at least one other participant's email matches a supplied list; used to check whether a person shares a matter with any of a set of email addresses (e.g. for access-grant checks), excluding the person's own and a grant email from the match.",
        "models": [
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterParticipant.internal.getParticipantHistory",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterParticipant.internal.getParticipantHistory",
      "module": "matterParticipant",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterParticipants/procedures/internal/getParticipantHistory.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/internal/getParticipantHistory.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterParticipants/router.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/router.ts#L30"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "bb77f34c",
      "interpretation": {
        "sig": "bb77f34c",
        "summary": "Returns the recorded event history (added, removed, lead-changed) for a matter's participants by reading the event store, not the current `MatterParticipant` rows.",
        "models": []
      }
    },
    {
      "id": "matter-service:matterTeamAccess.lawyer.assignTeamToMatter",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterTeamAccess.lawyer.assignTeamToMatter",
      "module": "matterTeamAccess",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "AssignTeamToMatterInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterTeamAccess/matter-team-access-controller.ts",
        "line": 34,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTeamAccess/matter-team-access-controller.ts#L34"
      },
      "router": {
        "file": "services/matter-service/src/matterTeamAccess/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTeamAccess/router.ts#L10"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/getTeam.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "bcbf55e6",
      "interpretation": {
        "sig": "bcbf55e6",
        "summary": "A firm lawyer assigns a team to a matter after checking the team belongs to the matter's own firm. The check itself is just a read from `identity-service` (`team.get`); the assignment is handed off by publishing a `matterTeamAccess.assigned` event rather than writing to the database directly here.",
        "models": [
          {
            "model": "MatterTeamAccess",
            "service": "matter-service"
          }
        ],
        "flags": [
          "mutation only validates then publishes an event, no direct DB write in this handler"
        ]
      }
    },
    {
      "id": "matter-service:matterTeamAccess.lawyer.removeTeamFromMatter",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterTeamAccess.lawyer.removeTeamFromMatter",
      "module": "matterTeamAccess",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RemoveTeamFromMatterInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterTeamAccess/matter-team-access-controller.ts",
        "line": 49,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTeamAccess/matter-team-access-controller.ts#L49"
      },
      "router": {
        "file": "services/matter-service/src/matterTeamAccess/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTeamAccess/router.ts#L11"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ca4034a1",
      "interpretation": {
        "sig": "ca4034a1",
        "summary": "A firm lawyer removes a team's access to a matter. The handler does no direct read or write itself: it just publishes a `matterTeamAccess.removed` event and logs the action, leaving the actual state change to whatever consumes that event.",
        "flags": [
          "mutation with no direct DB access here, just an event publish"
        ]
      }
    },
    {
      "id": "matter-service:matterTeamAccess.lawyer.listMatterTeams",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterTeamAccess.lawyer.listMatterTeams",
      "module": "matterTeamAccess",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListMatterTeamsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterTeamAccess/matter-team-access-controller.ts",
        "line": 59,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTeamAccess/matter-team-access-controller.ts#L59"
      },
      "router": {
        "file": "services/matter-service/src/matterTeamAccess/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTeamAccess/router.ts#L12"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "bcd88495",
      "interpretation": {
        "sig": "bcd88495",
        "summary": "Lists the teams currently assigned to a matter, oldest assignment first, by querying the `MatterTeamAccess` table for that matter.",
        "models": [
          {
            "model": "MatterTeamAccess",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterTeamAccess.lawyer.countMattersForTeams",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterTeamAccess.lawyer.countMattersForTeams",
      "module": "matterTeamAccess",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CountMattersForTeamsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterTeamAccess/matter-team-access-controller.ts",
        "line": 63,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTeamAccess/matter-team-access-controller.ts#L63"
      },
      "router": {
        "file": "services/matter-service/src/matterTeamAccess/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTeamAccess/router.ts#L13"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "17a34caa",
      "interpretation": {
        "sig": "17a34caa",
        "summary": "Given a list of team IDs (and an optional matter status filter), returns how many matters each team has access to within a firm. Used internally by other services rather than by lawyers directly, despite the 'lawyer' path segment.",
        "models": [
          {
            "model": "MatterTeamAccess",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterTemplate.create",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterTemplate.create",
      "module": "matterTemplate",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterTemplateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterTemplate/procedures/create.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTemplate/procedures/create.mutation.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterTemplate/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTemplate/router.ts#L10"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "52040b29",
      "interpretation": {
        "sig": "52040b29",
        "summary": "Creates a new matter template for a firm by publishing a `matterTemplate.created` event; rejects with a duplicate-name result if a template with that name already exists for the firm.",
        "models": [
          {
            "model": "MatterTemplate",
            "service": "matter-service"
          }
        ],
        "flags": [
          "framework-publish write"
        ]
      }
    },
    {
      "id": "matter-service:matterTemplate.update",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterTemplate.update",
      "module": "matterTemplate",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateMatterTemplateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterTemplate/procedures/update.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTemplate/procedures/update.mutation.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/matterTemplate/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTemplate/router.ts#L11"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4266b531",
      "interpretation": {
        "sig": "4266b531",
        "summary": "Updates an existing matter template's fields (after checking it isn't `ARCHIVED`) by publishing a `matterTemplate.updated` event; returns a duplicate-name result if the new name collides with another template.",
        "models": [
          {
            "model": "MatterTemplate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterTemplate.publish",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterTemplate.publish",
      "module": "matterTemplate",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "PublishMatterTemplateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterTemplate/procedures/publish.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTemplate/procedures/publish.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterTemplate/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTemplate/router.ts#L12"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "49a0562d",
      "interpretation": {
        "sig": "49a0562d",
        "summary": "Publishes a `DRAFT` matter template so it becomes usable for new matters, moving it out of draft state via a `matterTemplate.published` event; rejects if the template isn't currently `DRAFT`.",
        "models": [
          {
            "model": "MatterTemplate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterTemplate.archive",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterTemplate.archive",
      "module": "matterTemplate",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ArchiveMatterTemplateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterTemplate/procedures/archive.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTemplate/procedures/archive.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterTemplate/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTemplate/router.ts#L13"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2c6bc0f7",
      "interpretation": {
        "sig": "2c6bc0f7",
        "summary": "Archives a matter template so it can no longer be used for new matters, via a `matterTemplate.archived` event; rejects if it's already `ARCHIVED`.",
        "models": [
          {
            "model": "MatterTemplate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterTemplate.restore",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterTemplate.restore",
      "module": "matterTemplate",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RestoreMatterTemplateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterTemplate/procedures/restore.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTemplate/procedures/restore.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterTemplate/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTemplate/router.ts#L14"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3cfe9617",
      "interpretation": {
        "sig": "3cfe9617",
        "summary": "Restores a previously archived matter template back to an active state via a `matterTemplate.restored` event; rejects if the template isn't currently `ARCHIVED`.",
        "models": [
          {
            "model": "MatterTemplate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterTemplate.list",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterTemplate.list",
      "module": "matterTemplate",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListMatterTemplatesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterTemplate/procedures/list.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTemplate/procedures/list.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterTemplate/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTemplate/router.ts#L15"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "8cd77a0c",
      "interpretation": {
        "sig": "8cd77a0c",
        "summary": "Lists a firm's matter templates, optionally filtered by status, with each template's count of matters created from it.",
        "models": [
          {
            "model": "MatterTemplate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterTemplate.get",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterTemplate.get",
      "module": "matterTemplate",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetMatterTemplateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterTemplate/procedures/get.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTemplate/procedures/get.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterTemplate/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTemplate/router.ts#L16"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9af185a",
      "interpretation": {
        "sig": "9af185a",
        "summary": "Fetches a single matter template with its current and published version configs parsed and attached; 404s if not found for the firm.",
        "models": [
          {
            "model": "MatterTemplate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterTransaction.createMatterTransaction",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterTransaction.createMatterTransaction",
      "module": "matterTransaction",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterTransactions/procedures/createMatterTransaction.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTransactions/procedures/createMatterTransaction.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterTransactions/router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTransactions/router.ts#L8"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e483c66b",
      "interpretation": {
        "sig": "e483c66b",
        "summary": "Creates a `MatterTransaction` record linking a payment transaction to a matter, storing the transaction ID and a description. Used internally by other services to record that a transaction happened against a matter.",
        "models": [
          {
            "model": "MatterTransaction",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterTransaction.backfillMatterRefundTransaction",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterTransaction.backfillMatterRefundTransaction",
      "module": "matterTransaction",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterTransactions/procedures/backfillMatterRefundTransaction.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTransactions/procedures/backfillMatterRefundTransaction.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterTransactions/router.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTransactions/router.ts#L9"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d4352b13",
      "interpretation": {
        "sig": "d4352b13",
        "summary": "Records a refund transaction against a matter, but first checks for an existing `MatterTransaction` with the same `matterId` and `transactionId` and returns that instead of creating a duplicate. Meant for backfilling refunds that may already have been recorded.",
        "models": [
          {
            "model": "MatterTransaction",
            "service": "matter-service"
          }
        ],
        "flags": [
          "idempotent-write"
        ]
      }
    },
    {
      "id": "matter-service:matterTransaction.listMatterTransactions",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterTransaction.listMatterTransactions",
      "module": "matterTransaction",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterTransactions/procedures/listMatterTransactions.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTransactions/procedures/listMatterTransactions.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterTransactions/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTransactions/router.ts#L10"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e65e37e5",
      "interpretation": {
        "sig": "e65e37e5",
        "summary": "Lists all `MatterTransaction` records for a given matter. Read-only, used to show the transaction history tied to a matter.",
        "models": [
          {
            "model": "MatterTransaction",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterTransaction.updateMatterTransaction",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterTransaction.updateMatterTransaction",
      "module": "matterTransaction",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterTransactions/procedures/update-matter-transaction.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTransactions/procedures/update-matter-transaction.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterTransactions/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTransactions/router.ts#L11"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "8927f519",
      "interpretation": {
        "sig": "8927f519",
        "summary": "Updates the description field on an existing `MatterTransaction` record, identified by its ID.",
        "models": [
          {
            "model": "MatterTransaction",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:matterTransaction.get",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "matterTransaction.get",
      "module": "matterTransaction",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/matterTransactions/procedures/getMatterTransaction.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTransactions/procedures/getMatterTransaction.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/matterTransactions/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTransactions/router.ts#L12"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ac3e694e",
      "interpretation": {
        "sig": "ac3e694e",
        "summary": "Looks up a single `MatterTransaction` by its `transactionId` and returns it with the related matter attached, or throws `NOT_FOUND` if none exists.",
        "models": [
          {
            "model": "MatterTransaction",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:pinnable.lawyer.pin",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "pinnable.lawyer.pin",
      "module": "pinnable",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "PinnableEntityInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/pinnable/pinnable-router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/pinnable/pinnable-router.ts#L8"
      },
      "router": {
        "file": "services/matter-service/src/pinnable/pinnable-router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/pinnable/pinnable-router.ts#L8"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5d859d3a",
      "interpretation": {
        "sig": "5d859d3a",
        "summary": "Pins a matter note to a matter for quick access: publishes a `pinnable.pinned` event whose effect upserts a `MatterPin` row, so the note shows in the matter's pinned list going forward.",
        "models": [
          {
            "model": "MatterPin",
            "service": "matter-service"
          }
        ],
        "flags": [
          "write is via published event effect, not a direct prisma call in the router"
        ]
      }
    },
    {
      "id": "matter-service:pinnable.lawyer.unpin",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "pinnable.lawyer.unpin",
      "module": "pinnable",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "PinnableEntityInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/pinnable/pinnable-router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/pinnable/pinnable-router.ts#L17"
      },
      "router": {
        "file": "services/matter-service/src/pinnable/pinnable-router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/pinnable/pinnable-router.ts#L17"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "dc067819",
      "interpretation": {
        "sig": "dc067819",
        "summary": "Unpins a previously pinned matter note: looks up the existing `MatterPin` row and, if found, publishes a `pinnable.unpinned` event whose effect deletes it, removing the note from the matter's pinned list. If no pin exists it returns count 0 and does nothing.",
        "models": [
          {
            "model": "MatterPin",
            "service": "matter-service"
          }
        ],
        "flags": [
          "write is via published event effect, not a direct prisma call in the router"
        ]
      }
    },
    {
      "id": "matter-service:pinnable.lawyer.list",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "pinnable.lawyer.list",
      "module": "pinnable",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/pinnable/pinnable-router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/pinnable/pinnable-router.ts#L21"
      },
      "router": {
        "file": "services/matter-service/src/pinnable/pinnable-router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/pinnable/pinnable-router.ts#L21"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "230b2e0c",
      "interpretation": {
        "sig": "230b2e0c",
        "summary": "Lists the matter notes currently pinned to a matter, newest first, with a short content preview for each, by reading `MatterPin` rows and joining them to the matching `MatterNote` records.",
        "models": [
          {
            "model": "MatterPin",
            "service": "matter-service"
          },
          {
            "model": "MatterNote",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:reviewRequest.list",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "reviewRequest.list",
      "module": "reviewRequest",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListReviewRequestsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/reviewRequests/procedures/listReviewRequests.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/listReviewRequests.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/reviewRequests/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/router.ts#L11"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.admin.search",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.admin.search",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/searchIdentities.query.ts#L7",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "firm.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/listFirms.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4af99c2a",
      "interpretation": {
        "sig": "4af99c2a",
        "summary": "Lists review requests (reassignment or fee agreement completion requests) with filtering by matter, firm, status, requester, or related record, and pagination. Enriches each row with the firm, requester, rejecter and approver identities from `identity-service`.",
        "models": [
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:reviewRequest.listApprovers",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "reviewRequest.listApprovers",
      "module": "reviewRequest",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/reviewRequests/procedures/admin/listApprovers.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/admin/listApprovers.query.ts#L4"
      },
      "router": {
        "file": "services/matter-service/src/reviewRequests/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/router.ts#L12"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d9b138fb",
      "interpretation": {
        "sig": "d9b138fb",
        "summary": "Returns the distinct set of identities who have ever approved a review request, looked up in `identity-service`, for use in an approver filter dropdown.",
        "models": [
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:reviewRequest.admin.get",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "reviewRequest.admin.get",
      "module": "reviewRequest",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/reviewRequests/procedures/admin/getReviewRequest.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/admin/getReviewRequest.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/reviewRequests/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/router.ts#L14"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "aedd2b69",
      "interpretation": {
        "sig": "aedd2b69",
        "summary": "Fetches a single review request by id and enriches it with the requester, rejecter and approver identities from `identity-service`. Throws `NOT_FOUND` if the request does not exist.",
        "models": [
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:reviewRequest.admin.reject",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "reviewRequest.admin.reject",
      "module": "reviewRequest",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/reviewRequests/procedures/admin/rejectReviewRequest.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/admin/rejectReviewRequest.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/reviewRequests/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/router.ts#L15"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d3ef6f61",
      "interpretation": {
        "sig": "d3ef6f61",
        "summary": "Rejects a `PENDING` review request: sets its status to `REJECTED`, records the rejecter and reason, then sends the requester a Knock `reviewRequestRejected` notification naming the matter and the rejection reason. Throws `NOT_FOUND` if the request isn't pending or its matter is missing.",
        "models": [
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          },
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:reviewRequest.admin.approveFeeAgreementCompletionRequests",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "reviewRequest.admin.approveFeeAgreementCompletionRequests",
      "module": "reviewRequest",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ApproveFeeAgreementCompletionRequestsInput",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/reviewRequests/procedures/admin/approveFeeAgreementCompletionRequests.mutation.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/admin/approveFeeAgreementCompletionRequests.mutation.ts#L11"
      },
      "router": {
        "file": "services/matter-service/src/reviewRequests/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/router.ts#L16"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1a6efb86",
      "interpretation": {
        "sig": "1a6efb86",
        "summary": "Approves one or more `PENDING` fee-agreement-completion review requests in bulk: marks them `APPROVED` with the approver and an optional comment, then bumps `lastActivityAt` on the affected matters.",
        "models": [
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          },
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:reviewRequest.admin.approveReviewRequests",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "reviewRequest.admin.approveReviewRequests",
      "module": "reviewRequest",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/reviewRequests/procedures/admin/approveReviewRequests.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/admin/approveReviewRequests.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/reviewRequests/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/router.ts#L18"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2f88349a",
      "interpretation": {
        "sig": "2f88349a",
        "summary": "Approves a batch of `PENDING` review requests by id. For any that are `FEE_AGREEMENT_COMPLETION` type it delegates to `approveFeeAgreementCompletionRequests` to mark them `APPROVED` and touch the matter's `lastActivityAt`; other request types in the batch are otherwise unaffected by this call.",
        "flags": [
          "approval only takes effect for FEE_AGREEMENT_COMPLETION type requests"
        ],
        "models": [
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:reviewRequest.lawyer.create",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "reviewRequest.lawyer.create",
      "module": "reviewRequest",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateReviewRequestInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/reviewRequests/procedures/lawyer/createReviewRequest.mutation.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/lawyer/createReviewRequest.mutation.ts#L30"
      },
      "router": {
        "file": "services/matter-service/src/reviewRequests/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/router.ts#L21"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d6b3d9b1",
      "interpretation": {
        "sig": "d6b3d9b1",
        "summary": "Lets a firm lawyer raise a review request (matter reassignment or fee agreement completion) against a matter, then sends a Knock notification (`matterReassignmentRequested` or `feeAgreementCompletionRequested`) to the requester.",
        "models": [
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:reviewRequest.lawyer.update",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "reviewRequest.lawyer.update",
      "module": "reviewRequest",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateReviewRequestInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/reviewRequests/procedures/lawyer/updateReviewRequest.mutation.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/lawyer/updateReviewRequest.mutation.ts#L30"
      },
      "router": {
        "file": "services/matter-service/src/reviewRequests/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/router.ts#L22"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b520d167",
      "interpretation": {
        "sig": "b520d167",
        "summary": "Lets a firm lawyer edit an existing review request's fields (type, details, etc.) and re-stamps it with the calling lawyer as requester. No approval or rejection state changes here, and no notification is sent.",
        "models": [
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:permissions",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "permissions",
      "module": "permissions",
      "roleFolder": "permissions",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/permissions/getMatterPermissions.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/permissions/getMatterPermissions.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 81,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L81"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e398175c",
      "interpretation": {
        "sig": "e398175c",
        "summary": "Returns the calling identity's permission grants on a matter (e.g. `can_view`) for a given side (`CLIENT`/`FIRM`), checking direct participation, team-based matter access (via a posthog flag and either the team-matter-access table or `identity-service` team membership), firm RBAC grants, and firm-of-record fallback.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          },
          {
            "model": "MatterTeamAccess",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:task.tasks.list",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "task.tasks.list",
      "module": "task",
      "roleFolder": "tasks",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/task/procedures/tasks/listTasks.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/listTasks.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/task/router.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/router.ts#L26"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.getByFirmIdentity",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getByFirmIdentity",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getByFirmIdentity.query.ts#L21",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "contact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list.query.ts#L31",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5eb45828",
      "interpretation": {
        "sig": "5eb45828",
        "summary": "Lists a firm member's tasks, either all tasks assigned to the caller or all tasks on one matter, with comment/attachment counts and the matter label attached.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          },
          {
            "model": "TaskAssignment",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:task.tasks.create",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "task.tasks.create",
      "module": "task",
      "roleFolder": "tasks",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateTaskInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/task/procedures/tasks/createTask.mutation.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/createTask.mutation.ts#L19"
      },
      "router": {
        "file": "services/matter-service/src/task/router.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/router.ts#L27"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.getByFirmIdentity",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getByFirmIdentity",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getByFirmIdentity.query.ts#L21",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a179ab05",
      "interpretation": {
        "sig": "a179ab05",
        "summary": "Creates a new task for a firm or matter and, if an assignee is given, creates the `TaskAssignment` row alongside it in a transaction.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          },
          {
            "model": "TaskAssignment",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:task.tasks.rename",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "task.tasks.rename",
      "module": "task",
      "roleFolder": "tasks",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RenameTaskInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/task/procedures/tasks/renameTask.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/renameTask.mutation.ts#L12"
      },
      "router": {
        "file": "services/matter-service/src/task/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/router.ts#L28"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6fdbaa68",
      "interpretation": {
        "sig": "6fdbaa68",
        "summary": "Renames a task, trimming whitespace and rejecting an empty name.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:task.tasks.delete",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "task.tasks.delete",
      "module": "task",
      "roleFolder": "tasks",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "DeleteTaskInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/task/procedures/tasks/deleteTask.mutation.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/deleteTask.mutation.ts#L11"
      },
      "router": {
        "file": "services/matter-service/src/task/router.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/router.ts#L29"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5b209074",
      "interpretation": {
        "sig": "5b209074",
        "summary": "Deletes a task by ID (the prisma soft-delete wrapper turns this into setting `deletedAt` rather than removing the row).",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:task.tasks.restore",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "task.tasks.restore",
      "module": "task",
      "roleFolder": "tasks",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RestoreTaskInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/task/procedures/tasks/restoreTask.mutation.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/restoreTask.mutation.ts#L13"
      },
      "router": {
        "file": "services/matter-service/src/task/router.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/router.ts#L30"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.getByFirmIdentity",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getByFirmIdentity",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getByFirmIdentity.query.ts#L21",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "55e6ffb5",
      "interpretation": {
        "sig": "55e6ffb5",
        "summary": "Un-deletes a previously deleted task by clearing `deletedAt`, after checking the caller belongs to the task's firm.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:task.tasks.schedule",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "task.tasks.schedule",
      "module": "task",
      "roleFolder": "tasks",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ScheduleTaskInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/task/procedures/tasks/scheduleTask.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/scheduleTask.mutation.ts#L12"
      },
      "router": {
        "file": "services/matter-service/src/task/router.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/router.ts#L31"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a8fbb0c4",
      "interpretation": {
        "sig": "a8fbb0c4",
        "summary": "Sets or changes a task's due date, rejecting any date earlier than today.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:task.tasks.updateCompletedAt",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "task.tasks.updateCompletedAt",
      "module": "task",
      "roleFolder": "tasks",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateTaskCompletedAtInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/task/procedures/tasks/updateTaskCompletedAt.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/updateTaskCompletedAt.mutation.ts#L10"
      },
      "router": {
        "file": "services/matter-service/src/task/router.ts",
        "line": 32,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/router.ts#L32"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d01a4e08",
      "interpretation": {
        "sig": "d01a4e08",
        "summary": "Marks a task complete or reopens it by setting or clearing its `completedAt` timestamp.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:task.tasks.batchUpdateCompletedAt",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "task.tasks.batchUpdateCompletedAt",
      "module": "task",
      "roleFolder": "tasks",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "BatchUpdateTasksCompletedAtInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/task/procedures/tasks/batchUpdateTasksCompletedAt.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/batchUpdateTasksCompletedAt.mutation.ts#L10"
      },
      "router": {
        "file": "services/matter-service/src/task/router.ts",
        "line": 33,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/router.ts#L33"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6a46ce1d",
      "interpretation": {
        "sig": "6a46ce1d",
        "summary": "Sets `completedAt` (or clears it) on a batch of tasks in one transaction, failing the whole request if any of the given task IDs don't exist.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:task.tasks.assign",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "task.tasks.assign",
      "module": "task",
      "roleFolder": "tasks",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "AssignTaskInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/task/procedures/tasks/assignTask.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/assignTask.mutation.ts#L12"
      },
      "router": {
        "file": "services/matter-service/src/task/router.ts",
        "line": 34,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/router.ts#L34"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.getByFirmIdentity",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getByFirmIdentity",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getByFirmIdentity.query.ts#L21",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e8ff39c5",
      "interpretation": {
        "sig": "e8ff39c5",
        "summary": "Assigns or reassigns a task to a firm member (or clears the assignee), upserting the `TaskAssignment` row, then sends a Knock `taskAssigned` notification to the new assignee if it actually changed.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          },
          {
            "model": "TaskAssignment",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:task.tasks.updateMatter",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "task.tasks.updateMatter",
      "module": "task",
      "roleFolder": "tasks",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateTaskMatterInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/task/procedures/tasks/updateTaskMatter.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/updateTaskMatter.mutation.ts#L10"
      },
      "router": {
        "file": "services/matter-service/src/task/router.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/router.ts#L35"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.getByFirmIdentity",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getByFirmIdentity",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getByFirmIdentity.query.ts#L21",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "8542f555",
      "interpretation": {
        "sig": "8542f555",
        "summary": "Moves a task onto a different matter (or detaches it to the firm level if it still has an assignee), clears its `keyDateId`, and deletes any matter attachments linked to the task since they no longer apply.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          },
          {
            "model": "MatterAttachment",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:task.tasks.updateKeyDate",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "task.tasks.updateKeyDate",
      "module": "task",
      "roleFolder": "tasks",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateTaskKeyDateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/task/procedures/tasks/updateTaskKeyDate.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/updateTaskKeyDate.mutation.ts#L14"
      },
      "router": {
        "file": "services/matter-service/src/task/router.ts",
        "line": 36,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/router.ts#L36"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ceccc79a",
      "interpretation": {
        "sig": "ceccc79a",
        "summary": "Links a task to a key date (or unlinks it), after validating the key date belongs to the same firm/matter as the task.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:task.tasks.internal.listMatterTasks",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "task.tasks.internal.listMatterTasks",
      "module": "task",
      "roleFolder": "tasks",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/task/procedures/tasks/listMatterTasks.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/listMatterTasks.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/task/router.ts",
        "line": 38,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/router.ts#L38"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.getByFirmIdentity",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getByFirmIdentity",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getByFirmIdentity.query.ts#L21",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "contact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list.query.ts#L31",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "cc091755",
      "interpretation": {
        "sig": "cc091755",
        "summary": "Internal, pre-auth version of the task list query for service-to-service callers: same lookup by identity or matter, same enrichment with comment/attachment counts and matter labels.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          },
          {
            "model": "TaskAssignment",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:task.tasks.internal.get",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "task.tasks.internal.get",
      "module": "task",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/task/procedures/internal/getTask.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/internal/getTask.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/task/router.ts",
        "line": 39,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/router.ts#L39"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "ac4de400",
      "interpretation": {
        "sig": "ac4de400",
        "summary": "Fetches a single task by ID with its assignment relation for internal callers. No caller currently uses it.",
        "flags": [
          "usage.dead"
        ],
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:task.tasks.internal.create",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "task.tasks.internal.create",
      "module": "task",
      "roleFolder": "internal",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateTaskInternalInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/task/procedures/internal/createTask.mutation.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/internal/createTask.mutation.ts#L18"
      },
      "router": {
        "file": "services/matter-service/src/task/router.ts",
        "line": 40,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/router.ts#L40"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.getByFirmIdentity",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getByFirmIdentity",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getByFirmIdentity.query.ts#L21",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "97b6369",
      "interpretation": {
        "sig": "97b6369",
        "summary": "Internal, pre-auth version of task creation for service-to-service callers (e.g. the `lawrence-api` VFS adapter) that supply the creator and assignee identities directly rather than via session context; creates the task and, if assigned, the `TaskAssignment` row and a Knock notification.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          },
          {
            "model": "TaskAssignment",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:task.keyDates.list",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "task.keyDates.list",
      "module": "task",
      "roleFolder": "key-dates",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/task/procedures/key-dates/listKeyDates.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/key-dates/listKeyDates.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/task/router.ts",
        "line": 44,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/router.ts#L44"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.getByFirmIdentity",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getByFirmIdentity",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getByFirmIdentity.query.ts#L21",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "contact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list.query.ts#L31",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b0839c7b",
      "interpretation": {
        "sig": "b0839c7b",
        "summary": "Lists key dates for a matter, or across all matters a firm member participates in, optionally filtered to a due-date range, with each key date's outstanding and total task counts attached.",
        "models": [
          {
            "model": "KeyDate",
            "service": "matter-service"
          },
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          },
          {
            "model": "Task",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:task.keyDates.create",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "task.keyDates.create",
      "module": "task",
      "roleFolder": "key-dates",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateKeyDateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/task/procedures/key-dates/createKeyDate.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/key-dates/createKeyDate.mutation.ts#L14"
      },
      "router": {
        "file": "services/matter-service/src/task/router.ts",
        "line": 45,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/router.ts#L45"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6d5c1757",
      "interpretation": {
        "sig": "6d5c1757",
        "summary": "Creates a new key date on a matter after checking the caller has firm-side access to that matter.",
        "models": [
          {
            "model": "KeyDate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:task.keyDates.rename",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "task.keyDates.rename",
      "module": "task",
      "roleFolder": "key-dates",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RenameKeyDateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/task/procedures/key-dates/renameKeyDate.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/key-dates/renameKeyDate.mutation.ts#L14"
      },
      "router": {
        "file": "services/matter-service/src/task/router.ts",
        "line": 46,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/router.ts#L46"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ebd3169b",
      "interpretation": {
        "sig": "ebd3169b",
        "summary": "Renames an existing key date on a matter after checking the caller has firm-side access to that matter. Updates the `name` field directly in the database.",
        "models": [
          {
            "model": "keyDate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:task.keyDates.schedule",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "task.keyDates.schedule",
      "module": "task",
      "roleFolder": "key-dates",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ScheduleKeyDateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/task/procedures/key-dates/scheduleKeyDate.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/key-dates/scheduleKeyDate.mutation.ts#L14"
      },
      "router": {
        "file": "services/matter-service/src/task/router.ts",
        "line": 47,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/router.ts#L47"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6873eaaf",
      "interpretation": {
        "sig": "6873eaaf",
        "summary": "Changes the due date of a key date on a matter, after checking the caller has firm-side access to that matter.",
        "models": [
          {
            "model": "keyDate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:task.keyDates.delete",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "task.keyDates.delete",
      "module": "task",
      "roleFolder": "key-dates",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "DeleteKeyDateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/task/procedures/key-dates/deleteKeyDate.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/key-dates/deleteKeyDate.mutation.ts#L14"
      },
      "router": {
        "file": "services/matter-service/src/task/router.ts",
        "line": 48,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/router.ts#L48"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "89c51d33",
      "interpretation": {
        "sig": "89c51d33",
        "summary": "Deletes a key date from a matter after checking the caller has firm-side access to that matter. An optional `shouldDeleteTasks` flag lets the caller also remove tasks tied to the key date.",
        "models": [
          {
            "model": "keyDate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:task.keyDates.internal.listMatterKeyDates",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "task.keyDates.internal.listMatterKeyDates",
      "module": "task",
      "roleFolder": "key-dates",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/task/procedures/key-dates/listMatterKeyDates.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/key-dates/listMatterKeyDates.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/task/router.ts",
        "line": 50,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/router.ts#L50"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.getByFirmIdentity",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getByFirmIdentity",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getByFirmIdentity.query.ts#L21",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "contact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list.query.ts#L31",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "c1ad89ee",
      "interpretation": {
        "sig": "c1ad89ee",
        "summary": "Lists key dates for a matter or for all matters an identity participates in, with optional due-date range filters. Each result carries outstanding and total task counts and, when queried by identity, a matter label resolved from `identity-service`.",
        "models": [
          {
            "model": "keyDate",
            "service": "matter-service"
          },
          {
            "model": "matter",
            "service": "matter-service"
          },
          {
            "model": "matterParticipant",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:task.keyDates.internal.get",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "task.keyDates.internal.get",
      "module": "task",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/task/procedures/internal/getKeyDate.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/internal/getKeyDate.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/task/router.ts",
        "line": 51,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/router.ts#L51"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "619d9af0",
      "interpretation": {
        "sig": "619d9af0",
        "summary": "Looks up a single key date by ID and returns it, throwing if it doesn't exist or isn't tied to a matter. Nothing in the codebase calls this internal query.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "matter-service:task.keyDates.internal.create",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "task.keyDates.internal.create",
      "module": "task",
      "roleFolder": "internal",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateKeyDateInternalInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/task/procedures/internal/createKeyDate.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/internal/createKeyDate.mutation.ts#L14"
      },
      "router": {
        "file": "services/matter-service/src/task/router.ts",
        "line": 52,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/router.ts#L52"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d0adeeec",
      "interpretation": {
        "sig": "d0adeeec",
        "summary": "Creates a key date on a matter from an internal service call: looks up the matter's firm, then writes a new `keyDate` row with the given name, due date, and creator identity.",
        "models": [
          {
            "model": "keyDate",
            "service": "matter-service"
          },
          {
            "model": "matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:admin.getMatterForAdmin",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "admin.getMatterForAdmin",
      "module": "admin",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "inputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 84,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L84"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "contact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list.query.ts#L31",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "fc459dd2",
      "interpretation": {
        "sig": "fc459dd2",
        "summary": "Loads one matter for the admin panel with names filled in: firm details plus the identities and contacts behind each participant. Read only, no writes.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:admin.listMattersForAdmin",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "admin.listMattersForAdmin",
      "module": "admin",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListMattersForAdminInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/admin/listMattersForAdmin.query.ts",
        "line": 48,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/listMattersForAdmin.query.ts#L48"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 85,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L85"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.admin.search",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.admin.search",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/searchIdentities.query.ts#L7",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "contact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list.query.ts#L31",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "firm.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/listFirms.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3ea14e41",
      "interpretation": {
        "sig": "3ea14e41",
        "summary": "Lists and paginates matters for the admin matter table, with sort and filters by status, firm, source, lead lawyer/client, and matter number, enriched with firm and participant identity data. Read only.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:admin.search",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "admin.search",
      "module": "admin",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "SearchMattersInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/admin/searchMatters.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/searchMatters.query.ts#L7"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 86,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L86"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b367ca22",
      "interpretation": {
        "sig": "b367ca22",
        "summary": "Free-text search over matters for internal service callers (no app usage recorded). Read only, no side effects.",
        "flags": [
          "service-only"
        ]
      }
    },
    {
      "id": "matter-service:admin.reassignMatter",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "admin.reassignMatter",
      "module": "admin",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ReassignMatterInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/admin/reassignMatter.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/reassignMatter.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 87,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L87"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "71ea27b0",
      "interpretation": {
        "sig": "71ea27b0",
        "summary": "Reassigns a matter to a new firm and/or lawyer through `MatterReassignmentService.reassignByAdmin`, then re-reads the updated matter with its participants to return to the caller. The dashboard fact flags this as a mutation whose top-level effect only reads, but the underlying reassignment service does perform the actual write.",
        "flags": [
          "read-that-writes"
        ],
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:admin.reopenMatter",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "admin.reopenMatter",
      "module": "admin",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/admin/reopenMatter.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/reopenMatter.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 88,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L88"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "57a38840",
      "interpretation": {
        "sig": "57a38840",
        "summary": "Reopens a `COMPLETED` matter back to `ACTIVE` and clears its `completedAt` date, rejecting the call if the matter isn't currently closed. Notifies the client and firm participants via Knock that the matter reopened.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:admin.getMatterBalance",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "admin.getMatterBalance",
      "module": "admin",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "inputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/admin/getMatterBalance.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterBalance.query.ts#L9"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 89,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L89"
      },
      "hops": {
        "direct": 2,
        "services": [
          "work-service",
          "transaction-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "bill.listBills",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:bill.listBills",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/bill/procedures/listBills.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "listTransactions",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:listTransactions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/listTransactions.query.ts#L7",
            "domain": "money"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "51fa6767",
      "interpretation": {
        "sig": "51fa6767",
        "summary": "Computes a matter's outstanding balance for admin: sums `PAID` bills from `work-service`, subtracts `COMPLETED` refund transactions from `transaction-service`, and returns `totalBilled`, `totalRefunded` and `remainingBalance` in major currency units. Read only.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:admin.cancelMatter",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "admin.cancelMatter",
      "module": "admin",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/admin/cancelMatter.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/cancelMatter.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 90,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L90"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "feeAgreement.admin.cancelFeeAgreements",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:feeAgreement.admin.cancelFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/cancelFeeAgreements.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/matter.cancelled"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5398859d",
      "interpretation": {
        "sig": "5398859d",
        "summary": "Cancels a matter: cancels its fee agreements in `work-service`, silently rejects any pending reassignment review requests, sets the matter to `CANCELLED`, and fires a `matter.cancelled` event for downstream Inngest functions.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:admin.countMattersByStatus",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "admin.countMattersByStatus",
      "module": "admin",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "services/matter-service/src/procedures/admin/countMattersByStatus.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/countMattersByStatus.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 91,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L91"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "cf06ff42",
      "interpretation": {
        "sig": "cf06ff42",
        "summary": "Counts a person's matters grouped by `matterStatus`, for admin summary widgets. Read only.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:admin.createMatter",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "admin.createMatter",
      "module": "admin",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": true,
        "viaServices": true
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "createMatterSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/admin/createMatter.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/createMatter.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 92,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L92"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "contact.ensureForIdentity",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:contact.ensureForIdentity",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/ensure-for-identity.mutation.ts#L21",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/matter.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f3ee9136",
      "interpretation": {
        "sig": "f3ee9136",
        "summary": "Creates a matter (admin path): validates a lead lawyer is set, applies a matter template if given, links existing transactions/intents and participants, then non-fatally ensures a client contact record, sets up Knock invites and subscriptions, publishes `matter.created`, records participant-added events, and syncs marketplace lead-lawyer teams. Returns the freshly created matter with participants.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "MatterTransaction",
            "service": "matter-service"
          },
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:lawyer.countMatters",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "lawyer.countMatters",
      "module": "lawyer",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "MatterCountScopeInternalInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/lawyer/countLawyerMatters.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/countLawyerMatters.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 95,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L95"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e3678049",
      "interpretation": {
        "sig": "e3678049",
        "summary": "Returns a count of matters for a firm, firm-of-record, or the caller's own accessible scope (including team-shared matters). Used for list badges and totals, not the list itself.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:lawyer.createMatter",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "lawyer.createMatter",
      "module": "lawyer",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": true,
        "viaServices": true
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "createMatterSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/lawyer/createMatter.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/createMatter.mutation.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 96,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L96"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "contact.ensureForIdentity",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:contact.ensureForIdentity",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/ensure-for-identity.mutation.ts#L21",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/matter.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a2a46d44",
      "interpretation": {
        "sig": "a2a46d44",
        "summary": "Creates a new `Matter` row with its participants and any linked payment transactions, sets status to `ACTIVE` by default, then non-fatally applies a matter template if given, ensures a client `Contact` exists, sets up Knock notification subscriptions, publishes `matter.created`, records participant-added events, and syncs marketplace lead-lawyer team assignment.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          },
          {
            "model": "MatterTransaction",
            "service": "matter-service"
          }
        ],
        "flags": [
          "no RBAC check yet (TODO in source)"
        ]
      }
    },
    {
      "id": "matter-service:lawyer.getMatter",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "lawyer.getMatter",
      "module": "lawyer",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/lawyer/getMatter.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/getMatter.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 97,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L97"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "contact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list.query.ts#L31",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b66e57e6",
      "interpretation": {
        "sig": "b66e57e6",
        "summary": "Fetches one matter by ID and enriches it with the firm's and participants' display names (identity, contact, firm lookups). Pure read, no side effects.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:lawyer.listMatters",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "lawyer.listMatters",
      "module": "lawyer",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "MatterListScopeInternalInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/lawyer/listLawyerMatters.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/listLawyerMatters.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 98,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L98"
      },
      "hops": {
        "direct": 3,
        "services": [
          "identity-service",
          "messaging-service",
          "work-service"
        ],
        "reachable": [
          "identity-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "contact.searchWithRelations",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.searchWithRelations",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/search-with-relations.query.ts#L107",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "contact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list.query.ts#L31",
            "domain": "people"
          },
          {
            "service": "messaging-service",
            "path": "message.getUnreadMessagesForChannels",
            "kind": "read",
            "inferred": false,
            "targetId": "messaging-service:message.getUnreadMessagesForChannels",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getUnreadMessagesForChannels.query.ts#L8",
            "domain": "chat"
          },
          {
            "service": "messaging-service",
            "path": "message.getMessageCount",
            "kind": "read",
            "inferred": false,
            "targetId": "messaging-service:message.getMessageCount",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getMessageCount.query.ts#L8",
            "domain": "chat"
          },
          {
            "service": "work-service",
            "path": "agreementSignature.listUnsignedAgreementSignatures",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
            "domain": "deal"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f74f1a87",
      "interpretation": {
        "sig": "f74f1a87",
        "summary": "Lists matters for a firm, firm-of-record, or the caller's viewer scope (own plus team-accessible matters), enriched with participant names, unread message counts, and unsigned agreement counts. The listed `messaging-service` Inngest trigger is unrelated to this read path.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:lawyer.updateMatterStatus",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "lawyer.updateMatterStatus",
      "module": "lawyer",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateMatterStatusSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/lawyer/updateMatterStatus.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/updateMatterStatus.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 99,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L99"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ff154e68",
      "interpretation": {
        "sig": "ff154e68",
        "summary": "Changes a matter's `matterStatus` (e.g. to `COMPLETED`) directly in the database, stamping `lastActivityAt` and, when moving to `COMPLETED`, `completedAt`.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:lawyer.updateMatterTitle",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "lawyer.updateMatterTitle",
      "module": "lawyer",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/lawyer/updateMatterTitle.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/updateMatterTitle.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 100,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L100"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "66192cfc",
      "interpretation": {
        "sig": "66192cfc",
        "summary": "Renames a matter by writing its `title` field directly in the database.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:lawyer.lawyerAuthorizeForMatter",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "lawyer.lawyerAuthorizeForMatter",
      "module": "lawyer",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts",
        "line": 3,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 101,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L101"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a1ca08f8",
      "interpretation": {
        "sig": "a1ca08f8",
        "summary": "Returns the matter already resolved and access-checked by `matterFirmSideProcedure`'s middleware. Exists purely so a caller can confirm the requesting lawyer has access to a matter; it does no lookup of its own.",
        "flags": [
          "not called by any app, only by other services"
        ]
      }
    },
    {
      "id": "matter-service:lawyer.countActiveLeadMatters",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "lawyer.countActiveLeadMatters",
      "module": "lawyer",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/lawyer/countActiveLeadMatters.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/countActiveLeadMatters.query.ts#L4"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 102,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L102"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b945415a",
      "interpretation": {
        "sig": "b945415a",
        "summary": "Counts matters where the caller is the lead lawyer participant and the matter is still `ACTIVE`. Used for a lawyer's active-caseload count.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ],
        "flags": [
          "not called by any app, only by other services"
        ]
      }
    },
    {
      "id": "matter-service:lawyer.reassignMatter",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "lawyer.reassignMatter",
      "module": "lawyer",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/reassignment/reassignment-controller.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reassignment/reassignment-controller.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 103,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L103"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5b771330",
      "interpretation": {
        "sig": "5b771330",
        "summary": "Reassigns a matter's lead lawyer: looks up the current lead lawyer, publishes a `reassignment.reassigned` event (which performs the actual database update), and updates the outgoing and incoming lawyer's Knock notification subscriptions for the matter.",
        "flags": [
          "write happens via the published event, not in this handler"
        ]
      }
    },
    {
      "id": "matter-service:lawyer.getReassignmentHistory",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "lawyer.getReassignmentHistory",
      "module": "lawyer",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/reassignment/procedures/getReassignmentHistory.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reassignment/procedures/getReassignmentHistory.query.ts#L4"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 104,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L104"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6debfece",
      "interpretation": {
        "sig": "6debfece",
        "summary": "Returns the reassignment event history for a matter by querying the event log, not a live database table.",
        "flags": [
          "not called by any app, only by other services"
        ]
      }
    },
    {
      "id": "matter-service:lawyer.applyMatterTemplate",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "lawyer.applyMatterTemplate",
      "module": "lawyer",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ApplyMatterTemplateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/lawyer/applyMatterTemplate.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/applyMatterTemplate.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 105,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L105"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "47c38625",
      "interpretation": {
        "sig": "47c38625",
        "summary": "Applies a matter template to an existing matter: validates the template version is active for the firm, computes which template folders and contact-role slots are still missing, then publishes `matter.matterTemplateApplied` for another service to create them.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "MatterFileFolder",
            "service": "matter-service"
          },
          {
            "model": "MatterContactSlot",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:lawyer.removeAppliedMatterTemplate",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "lawyer.removeAppliedMatterTemplate",
      "module": "lawyer",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RemoveAppliedMatterTemplateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/lawyer/removeAppliedMatterTemplate.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/removeAppliedMatterTemplate.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 106,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L106"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6b8dc683",
      "interpretation": {
        "sig": "6b8dc683",
        "summary": "Removes a previously applied template from a matter by publishing `appliedMatterTemplateRemoved` (a no-op if the matter has no template set).",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:client.listMatters",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "client.listMatters",
      "module": "client",
      "roleFolder": "client",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/client/listClientMatters.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/listClientMatters.query.ts#L4"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 109,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L109"
      },
      "hops": {
        "direct": 3,
        "services": [
          "identity-service",
          "messaging-service",
          "work-service"
        ],
        "reachable": [
          "identity-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "contact.searchWithRelations",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.searchWithRelations",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/search-with-relations.query.ts#L107",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "contact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list.query.ts#L31",
            "domain": "people"
          },
          {
            "service": "messaging-service",
            "path": "message.getUnreadMessagesForChannels",
            "kind": "read",
            "inferred": false,
            "targetId": "messaging-service:message.getUnreadMessagesForChannels",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getUnreadMessagesForChannels.query.ts#L8",
            "domain": "chat"
          },
          {
            "service": "messaging-service",
            "path": "message.getMessageCount",
            "kind": "read",
            "inferred": false,
            "targetId": "messaging-service:message.getMessageCount",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getMessageCount.query.ts#L8",
            "domain": "chat"
          },
          {
            "service": "work-service",
            "path": "agreementSignature.listUnsignedAgreementSignatures",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
            "domain": "deal"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9be1a9f4",
      "interpretation": {
        "sig": "9be1a9f4",
        "summary": "Returns the paginated list of matters a client identity is a participant on, with unread message counts, new document counts, required signatures, and per-matter contact/participant details enriched from identity and messaging services.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          },
          {
            "model": "MatterContact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:client.getMatter",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "client.getMatter",
      "module": "client",
      "roleFolder": "client",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "matterClientSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/client/getMatter.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/getMatter.query.ts#L4"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 110,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L110"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "contact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list.query.ts#L31",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e77f89f0",
      "interpretation": {
        "sig": "e77f89f0",
        "summary": "Returns a single matter's details enriched with firm, identity, and contact names for display to the client, given a `matterId` already authorized upstream.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:client.mapParticipants",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "client.mapParticipants",
      "module": "client",
      "roleFolder": "client",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/client/mapParticipants.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/mapParticipants.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 111,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L111"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "fb6184ce",
      "interpretation": {
        "sig": "fb6184ce",
        "summary": "Given a matter the caller participates in, returns the firm-side participants grouped by person, each with their firm membership id, firm name, and job title, for building a lawyer-team lookup on that matter.",
        "flags": [
          "looks unused (usedByApps: false)"
        ],
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:client.clientAuthorizeForMatter",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "client.clientAuthorizeForMatter",
      "module": "client",
      "roleFolder": "client",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "matterClientSideProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": [
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts",
        "line": 3,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 112,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L112"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "de9da7c8",
      "interpretation": {
        "sig": "de9da7c8",
        "summary": "Confirms the calling client is authorized on the given matter and returns the matter object already resolved by the client-side procedure's auth middleware; the handler itself does no additional lookup.",
        "flags": [
          "trivial pass-through of ctx.matter"
        ]
      }
    },
    {
      "id": "matter-service:internal.getMatter",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "internal.getMatter",
      "module": "internal",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/internal/getMatter.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 115,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L115"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "contact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list.query.ts#L31",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4b13ebf0",
      "interpretation": {
        "sig": "4b13ebf0",
        "summary": "Returns the full detail of one matter: the `Matter` row plus its participants and review requests, with firm name/address, firm-of-record (for co-counsel matters), and each participant's identity and contact enriched from `identity-service`. Throws `NOT_FOUND` if the matter or its lead lawyer is missing.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          },
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          },
          {
            "model": "MatterContact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:internal.getMatterOverview",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "internal.getMatterOverview",
      "module": "internal",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "services/matter-service/src/procedures/internal/getMatterOverview.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatterOverview.query.ts#L7"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 116,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L116"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "contact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list.query.ts#L31",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7f52c895",
      "interpretation": {
        "sig": "7f52c895",
        "summary": "Returns a lighter matter summary for internal callers: title, human-readable ID, the owning solicitor, client party persons, all party persons, and the lead lawyer's other team members, plus whether the firm has case alerts enabled. Throws if the matter, firm, or an owning solicitor cannot be resolved.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:internal.getMatterPermissions",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "internal.getMatterPermissions",
      "module": "internal",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/internal/getMatterPermissions.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatterPermissions.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 117,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L117"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "de8c361d",
      "interpretation": {
        "sig": "de8c361d",
        "summary": "Works out what a given identity can do on a matter for a given side: checks direct participation first, then (FIRM side only) team access, RBAC's `can_view_all_matters` grant, and a firm-of-record cascade, returning the resulting grant list and the matter itself when the identity can view it.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:internal.getMatterStatuses",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "internal.getMatterStatuses",
      "module": "internal",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "services/matter-service/src/procedures/internal/getMatterStatuses.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatterStatuses.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 118,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L118"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "908923d6",
      "interpretation": {
        "sig": "908923d6",
        "summary": "Batch-reads up to 50 matters and returns each one's `matterStatus` plus whether it has a pending `REASSIGNMENT` review request. Runs with no per-matter access check; callers are responsible for authorizing the result themselves.",
        "flags": [
          "no-authz-check"
        ],
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:internal.getMatterLabels",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "internal.getMatterLabels",
      "module": "internal",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "services/matter-service/src/procedures/internal/getMatterLabels.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatterLabels.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 119,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L119"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "contact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list.query.ts#L31",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "89726d2e",
      "interpretation": {
        "sig": "89726d2e",
        "summary": "For up to 50 matter IDs, filters down to the matters the calling identity can view (via `getMatterPermissions` on the FIRM side) and returns a display label built from each matter's participants and contacts. Matters the caller cannot view are silently dropped from the result.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          },
          {
            "model": "MatterContact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:internal.listMatters",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "internal.listMatters",
      "module": "internal",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/internal/listMatters.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/listMatters.query.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 120,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L120"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a19dfdd4",
      "interpretation": {
        "sig": "a19dfdd4",
        "summary": "Fetches matters by a list of IDs with their participants attached; a plain bulk lookup with no enrichment or access filtering.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:internal.listCoreDetailsForAllMatters",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "internal.listCoreDetailsForAllMatters",
      "module": "internal",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/internal/listCoreDetailsForAllMatters.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/listCoreDetailsForAllMatters.query.ts#L4"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 121,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L121"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ad588cba",
      "interpretation": {
        "sig": "ad588cba",
        "summary": "Returns `id`, `title`, `humanReadableId`, `matterStatus`, and `primaryJurisdictionId` for every matter in the database. Takes no input and no firm/identity filter, so it dumps core details for the whole table.",
        "flags": [
          "returns-all-matters-unfiltered"
        ],
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:internal.listPersonMatters",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "internal.listPersonMatters",
      "module": "internal",
      "roleFolder": "internal",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/internal/listPersonMatters.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/listPersonMatters.query.ts#L6"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 122,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L122"
      },
      "hops": {
        "direct": 3,
        "services": [
          "identity-service",
          "messaging-service",
          "work-service"
        ],
        "reachable": [
          "identity-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "contact.searchWithRelations",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.searchWithRelations",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/search-with-relations.query.ts#L107",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "contact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list.query.ts#L31",
            "domain": "people"
          },
          {
            "service": "messaging-service",
            "path": "message.getUnreadMessagesForChannels",
            "kind": "read",
            "inferred": false,
            "targetId": "messaging-service:message.getUnreadMessagesForChannels",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getUnreadMessagesForChannels.query.ts#L8",
            "domain": "chat"
          },
          {
            "service": "messaging-service",
            "path": "message.getMessageCount",
            "kind": "read",
            "inferred": false,
            "targetId": "messaging-service:message.getMessageCount",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getMessageCount.query.ts#L8",
            "domain": "chat"
          },
          {
            "service": "work-service",
            "path": "agreementSignature.listUnsignedAgreementSignatures",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
            "domain": "deal"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6512337f",
      "interpretation": {
        "sig": "6512337f",
        "summary": "Lists the matters a person participates in on a given side (optionally including team-accessible matters), enriched per row with participants, matter contacts, unread message count, new document count, whether required signatures are outstanding, and whether the person has sent a message. Supports search and pagination.",
        "flags": [
          "also-invoked-from-message.created-inngest-flow"
        ],
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          },
          {
            "model": "MatterContact",
            "service": "matter-service"
          },
          {
            "model": "MatterTeamAccess",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:internal.createMatter",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "internal.createMatter",
      "module": "internal",
      "roleFolder": "internal",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": true,
        "viaServices": true
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "createMatterSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/internal/createMatter.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/createMatter.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 123,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L123"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "contact.ensureForIdentity",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:contact.ensureForIdentity",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/ensure-for-identity.mutation.ts#L21",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/matter.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a51cd1d8",
      "interpretation": {
        "sig": "a51cd1d8",
        "summary": "Creates a new `Matter` row (with participants, linked transactions, and a quote if given), then non-fatally applies a matter template if one was passed, ensures a client contact exists, sets up Knock invites/subscriptions and sends notifications, publishes `matter.created`, records participant-added events, and syncs marketplace team access for the lead lawyer. Called with a pre-auth service token.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          },
          {
            "model": "MatterTransaction",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:internal.closeMatter",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "internal.closeMatter",
      "module": "internal",
      "roleFolder": "internal",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/internal/closeMatter.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/closeMatter.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 124,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L124"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "bb863054",
      "interpretation": {
        "sig": "bb863054",
        "summary": "Marks an `ACTIVE` matter `COMPLETED` (sets `completedAt` and `lastActivityAt`) and rejects any `PENDING` reassignment review requests on it in one transaction, then sends Knock notifications to the matter's client and firm participants that the matter closed.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:internal.reopenMatter",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "internal.reopenMatter",
      "module": "internal",
      "roleFolder": "internal",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/internal/reopenMatter.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/reopenMatter.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 125,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L125"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "60d671f0",
      "interpretation": {
        "sig": "60d671f0",
        "summary": "Reopens a matter that is currently `COMPLETED`, setting `matterStatus` back to `ACTIVE` and clearing `completedAt` (rejects with `BAD_REQUEST` if it isn't closed), then notifies the matter's client and firm participants via Knock that it reopened. Called with a pre-auth service token.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "matter-service:internal.createComment",
      "api": "matter-service",
      "origin": "matter-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "matterRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "internal.createComment",
      "module": "internal",
      "roleFolder": "internal",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateCommentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/matter-service/src/procedures/internal/createInternalComment.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/createInternalComment.mutation.ts#L5"
      },
      "router": {
        "file": "services/matter-service/src/router.ts",
        "line": 126,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/router.ts#L126"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "69604909",
      "interpretation": {
        "sig": "69604909",
        "summary": "Creates a comment on a matter or other entity by publishing a `comment.created` event through `CommentService` rather than writing to the database directly; the actual `Comment` row is written downstream by whatever consumes that event.",
        "flags": [
          "write-via-event-publish-not-direct-write"
        ],
        "models": [
          {
            "model": "Comment",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "messaging-service:channel.upsertChannel",
      "api": "messaging-service",
      "origin": "messaging-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "messagingRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "channel.upsertChannel",
      "module": "channel",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpsertChannelInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/messaging-service/src/channel/procedures/upsertChannel.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/channel/procedures/upsertChannel.mutation.ts#L8"
      },
      "router": {
        "file": "services/messaging-service/src/channel/router.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/channel/router.ts#L7"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "chat",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b4d54fb1",
      "interpretation": {
        "sig": "b4d54fb1",
        "summary": "Creates a chat `Channel` by id if it doesn't exist (or leaves it as-is if it does), then adds the given identities as `ACTIVE` `ChannelParticipant` rows, skipping any who are already members.",
        "models": [
          {
            "model": "Channel",
            "service": "messaging-service"
          },
          {
            "model": "ChannelParticipant",
            "service": "messaging-service"
          }
        ]
      }
    },
    {
      "id": "messaging-service:channel.removeParticipant",
      "api": "messaging-service",
      "origin": "messaging-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "messagingRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "channel.removeParticipant",
      "module": "channel",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "RemoveParticipantInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/messaging-service/src/channel/procedures/removeParticipant.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/channel/procedures/removeParticipant.mutation.ts#L8"
      },
      "router": {
        "file": "services/messaging-service/src/channel/router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/channel/router.ts#L8"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "chat",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d4e1853",
      "interpretation": {
        "sig": "d4e1853",
        "summary": "Marks a person's `ChannelParticipant` record for a channel as `INACTIVE`, removing them from the chat without deleting the row.",
        "models": [
          {
            "model": "ChannelParticipant",
            "service": "messaging-service"
          }
        ]
      }
    },
    {
      "id": "messaging-service:channel.getRealtimeToken",
      "api": "messaging-service",
      "origin": "messaging-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "messagingRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "channel.getRealtimeToken",
      "module": "channel",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "channelMemberProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetRealtimeTokenInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/messaging-service/src/channel/procedures/getRealtimeToken.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/channel/procedures/getRealtimeToken.query.ts#L9"
      },
      "router": {
        "file": "services/messaging-service/src/channel/router.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/channel/router.ts#L9"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "chat",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f75fe971",
      "interpretation": {
        "sig": "f75fe971",
        "summary": "Checks the caller is an `ACTIVE` participant of the channel, then requests an Ably token scoped to subscribe on that channel so the client can open a realtime connection. Throws if the caller isn't an active member.",
        "models": [
          {
            "model": "ChannelParticipant",
            "service": "messaging-service"
          }
        ]
      }
    },
    {
      "id": "messaging-service:channel.listChannelParticipants",
      "api": "messaging-service",
      "origin": "messaging-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "messagingRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "channel.listChannelParticipants",
      "module": "channel",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListChannelParticipantsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/messaging-service/src/channel/procedures/listChannelParticipants.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/channel/procedures/listChannelParticipants.query.ts#L5"
      },
      "router": {
        "file": "services/messaging-service/src/channel/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/channel/router.ts#L10"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "chat",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "aeb1aa03",
      "interpretation": {
        "sig": "aeb1aa03",
        "summary": "Lists all `ChannelParticipant` rows for a channel (keyed by `matterId`), active or not, with no filtering on status.",
        "models": [
          {
            "model": "ChannelParticipant",
            "service": "messaging-service"
          }
        ]
      }
    },
    {
      "id": "messaging-service:message.getMessages",
      "api": "messaging-service",
      "origin": "messaging-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "messagingRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "message.getMessages",
      "module": "message",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "channelMemberProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetMessagesInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/messaging-service/src/message/procedures/getMessages.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getMessages.query.ts#L8"
      },
      "router": {
        "file": "services/messaging-service/src/message/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/router.ts#L14"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.getPeople",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.getPeople",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentities.query.ts#L8",
            "domain": "people"
          }
        ]
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "8ee55010",
      "interpretation": {
        "sig": "8ee55010",
        "summary": "Fetches a channel's messages page by page (newest first, cursor-paginated), marking each message as editable/deletable for the caller and attaching read status and author info via `identity-service`.",
        "models": [
          {
            "model": "Message",
            "service": "messaging-service"
          },
          {
            "model": "MessageReadStatus",
            "service": "messaging-service"
          }
        ]
      }
    },
    {
      "id": "messaging-service:message.getAllMessages",
      "api": "messaging-service",
      "origin": "messaging-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "messagingRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "message.getAllMessages",
      "module": "message",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetAllMessagesInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/messaging-service/src/message/procedures/getAllMessagesInternal.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getAllMessagesInternal.query.ts#L8"
      },
      "router": {
        "file": "services/messaging-service/src/message/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/router.ts#L15"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "22a36664",
      "interpretation": {
        "sig": "22a36664",
        "summary": "Returns every message in a channel with no pagination or read-state enrichment. Nothing in the codebase calls it, so it looks dead.",
        "models": [
          {
            "model": "Message",
            "service": "messaging-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "messaging-service:message.createMessage",
      "api": "messaging-service",
      "origin": "messaging-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "messagingRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "message.createMessage",
      "module": "message",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "channelMemberProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMessageInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/messaging-service/src/message/procedures/createMessage.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/createMessage.mutation.ts#L8"
      },
      "router": {
        "file": "services/messaging-service/src/message/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/router.ts#L16"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e0f78ad1",
      "interpretation": {
        "sig": "e0f78ad1",
        "summary": "Posts a `TEXT` message into a channel, giving it a 15-minute edit/delete window, then fires the `message.created` Inngest event and publishes a realtime `message.created` event to the channel's Ably room.",
        "models": [
          {
            "model": "Message",
            "service": "messaging-service"
          }
        ]
      }
    },
    {
      "id": "messaging-service:message.editMessage",
      "api": "messaging-service",
      "origin": "messaging-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "messagingRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "message.editMessage",
      "module": "message",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "channelMemberProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "EditMessageInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/messaging-service/src/message/procedures/editMessage.mutation.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/editMessage.mutation.ts#L9"
      },
      "router": {
        "file": "services/messaging-service/src/message/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/router.ts#L17"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "90f8dfa5",
      "interpretation": {
        "sig": "90f8dfa5",
        "summary": "Lets the author edit their own message's content while still inside its editable window, records the prior content in a `MessageAudit` `EDIT` entry, and publishes a `message.edited` event over Ably. Rejects if the message isn't theirs or the window has passed.",
        "models": [
          {
            "model": "Message",
            "service": "messaging-service"
          },
          {
            "model": "MessageAudit",
            "service": "messaging-service"
          }
        ]
      }
    },
    {
      "id": "messaging-service:message.deleteMessage",
      "api": "messaging-service",
      "origin": "messaging-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "messagingRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "message.deleteMessage",
      "module": "message",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "channelMemberProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "DeleteMessageInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/messaging-service/src/message/procedures/deleteMessage.mutation.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/deleteMessage.mutation.ts#L9"
      },
      "router": {
        "file": "services/messaging-service/src/message/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/router.ts#L18"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ac87d4e3",
      "interpretation": {
        "sig": "ac87d4e3",
        "summary": "Soft-deletes the caller's own message (sets `deletedAt`) while inside its deletable window, logs a `MessageAudit` `DELETE` entry, and publishes a `message.deleted` event over Ably. Rejects if the message isn't theirs or the window has passed.",
        "models": [
          {
            "model": "Message",
            "service": "messaging-service"
          },
          {
            "model": "MessageAudit",
            "service": "messaging-service"
          }
        ]
      }
    },
    {
      "id": "messaging-service:message.updateReadStatus",
      "api": "messaging-service",
      "origin": "messaging-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "messagingRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "message.updateReadStatus",
      "module": "message",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "channelMemberProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateReadStatusInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/messaging-service/src/message/procedures/updateReadStatus.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/updateReadStatus.mutation.ts#L8"
      },
      "router": {
        "file": "services/messaging-service/src/message/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/router.ts#L19"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1638f9e7",
      "interpretation": {
        "sig": "1638f9e7",
        "summary": "Marks a list of messages as read by the caller in a channel, inserting `MessageReadStatus` rows and skipping ones that already exist.",
        "models": [
          {
            "model": "MessageReadStatus",
            "service": "messaging-service"
          }
        ]
      }
    },
    {
      "id": "messaging-service:message.getUnreadMessages",
      "api": "messaging-service",
      "origin": "messaging-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "messagingRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "message.getUnreadMessages",
      "module": "message",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetUnreadMessagesInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/messaging-service/src/message/procedures/getUnreadMessages.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getUnreadMessages.query.ts#L8"
      },
      "router": {
        "file": "services/messaging-service/src/message/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/router.ts#L20"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "edfc2ef9",
      "interpretation": {
        "sig": "edfc2ef9",
        "summary": "Lists which message IDs in a channel are unread for a given person (sent by someone else, not deleted, no `MessageReadStatus` row yet) and returns the count.",
        "models": [
          {
            "model": "Message",
            "service": "messaging-service"
          },
          {
            "model": "MessageReadStatus",
            "service": "messaging-service"
          }
        ]
      }
    },
    {
      "id": "messaging-service:message.getUnreadMessagesForChannels",
      "api": "messaging-service",
      "origin": "messaging-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "messagingRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "message.getUnreadMessagesForChannels",
      "module": "message",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetUnreadMessagesForChannelsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/messaging-service/src/message/procedures/getUnreadMessagesForChannels.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getUnreadMessagesForChannels.query.ts#L8"
      },
      "router": {
        "file": "services/messaging-service/src/message/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/router.ts#L21"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7eb1425f",
      "interpretation": {
        "sig": "7eb1425f",
        "summary": "Returns the unread message count per channel for a person across a batch of channel IDs, using the same unread logic as `getUnreadMessages` but grouped.",
        "models": [
          {
            "model": "Message",
            "service": "messaging-service"
          },
          {
            "model": "MessageReadStatus",
            "service": "messaging-service"
          }
        ]
      }
    },
    {
      "id": "messaging-service:message.getMessageCount",
      "api": "messaging-service",
      "origin": "messaging-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "messagingRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "message.getMessageCount",
      "module": "message",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetMessageCountInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/messaging-service/src/message/procedures/getMessageCount.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getMessageCount.query.ts#L8"
      },
      "router": {
        "file": "services/messaging-service/src/message/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/router.ts#L22"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "890cb2cf",
      "interpretation": {
        "sig": "890cb2cf",
        "summary": "Counts how many messages a specific person has sent in each of a set of channels.",
        "models": [
          {
            "model": "Message",
            "service": "messaging-service"
          }
        ]
      }
    },
    {
      "id": "messaging-service:message.internal.getMessage",
      "api": "messaging-service",
      "origin": "messaging-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "messagingRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "message.internal.getMessage",
      "module": "message",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetMessageInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/messaging-service/src/message/procedures/getMessageInternal.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getMessageInternal.query.ts#L8"
      },
      "router": {
        "file": "services/messaging-service/src/message/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/router.ts#L24"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.getPeople",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.getPeople",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentities.query.ts#L8",
            "domain": "people"
          }
        ]
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "aec1e2c",
      "interpretation": {
        "sig": "aec1e2c",
        "summary": "Internal (service-to-service) lookup of a single message by ID, enriched with author details from `identity-service`. Treats the message as system-authored (no `personId`) rather than tied to a calling user.",
        "models": [
          {
            "model": "Message",
            "service": "messaging-service"
          }
        ]
      }
    },
    {
      "id": "messaging-service:message.internal.getMessages",
      "api": "messaging-service",
      "origin": "messaging-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "messagingRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "message.internal.getMessages",
      "module": "message",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetMessagesInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/messaging-service/src/message/procedures/getMessagesInternal.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getMessagesInternal.query.ts#L8"
      },
      "router": {
        "file": "services/messaging-service/src/message/router.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/router.ts#L25"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.getPeople",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.getPeople",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentities.query.ts#L8",
            "domain": "people"
          }
        ]
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "17e8aff8",
      "interpretation": {
        "sig": "17e8aff8",
        "summary": "Internal (service-to-service) paginated fetch of a channel's messages, enriched with author details from `identity-service`, without per-user read status since no identity is passed.",
        "models": [
          {
            "model": "Message",
            "service": "messaging-service"
          }
        ]
      }
    },
    {
      "id": "payment-service:payments.listStripePayments",
      "api": "payment-service",
      "origin": "payment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "paymentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "payments.listStripePayments",
      "module": "payments",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "listStripePaymentsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/payment-service/src/payments/procedures/listStripePayments.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/listStripePayments.query.ts#L8"
      },
      "router": {
        "file": "services/payment-service/src/payments/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/router.ts#L11"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2cf77df7",
      "interpretation": {
        "sig": "2cf77df7",
        "summary": "Looks up payments by Stripe payment intent ID, returning the matching `Payment` records with their refund and processor-payment details. Read-only, called by other services.",
        "models": [
          {
            "model": "Payment",
            "service": "payment-service"
          },
          {
            "model": "StripeRefund",
            "service": "payment-service"
          }
        ]
      }
    },
    {
      "id": "payment-service:payments.listPayments",
      "api": "payment-service",
      "origin": "payment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "paymentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "payments.listPayments",
      "module": "payments",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "listPaymentsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/payment-service/src/payments/procedures/listPayments.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/listPayments.query.ts#L8"
      },
      "router": {
        "file": "services/payment-service/src/payments/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/router.ts#L12"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e5034a45",
      "interpretation": {
        "sig": "e5034a45",
        "summary": "Lists payments, optionally filtered by a set of payment IDs, paginated and ordered newest first, with each payment's processor-payment record included.",
        "models": [
          {
            "model": "Payment",
            "service": "payment-service"
          }
        ]
      }
    },
    {
      "id": "payment-service:payments.getPaymentById",
      "api": "payment-service",
      "origin": "payment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "paymentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "payments.getPaymentById",
      "module": "payments",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "services/payment-service/src/payments/procedures/getPaymentById.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/getPaymentById.query.ts#L7"
      },
      "router": {
        "file": "services/payment-service/src/payments/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/router.ts#L13"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "2f4eb887",
      "interpretation": {
        "sig": "2f4eb887",
        "summary": "Fetches one payment by ID with its bank transfer, processor payment, and refund details, or throws `NOT_FOUND` if it doesn't exist. Nothing in the codebase currently calls it.",
        "flags": [
          "looks unused"
        ],
        "models": [
          {
            "model": "Payment",
            "service": "payment-service"
          }
        ]
      }
    },
    {
      "id": "payment-service:payments.getBankCounterparty",
      "api": "payment-service",
      "origin": "payment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "paymentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "payments.getBankCounterparty",
      "module": "payments",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "services/payment-service/src/payments/procedures/getBankCounterparty.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/getBankCounterparty.query.ts#L6"
      },
      "router": {
        "file": "services/payment-service/src/payments/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/router.ts#L14"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "81333233",
      "interpretation": {
        "sig": "81333233",
        "summary": "Looks up a firm's bank counterparty record. Nothing in the codebase currently calls it.",
        "flags": [
          "looks unused"
        ],
        "models": [
          {
            "model": "PaymentCounterparty",
            "service": "payment-service"
          }
        ]
      }
    },
    {
      "id": "payment-service:payments.getOrCreateBankCounterparty",
      "api": "payment-service",
      "origin": "payment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "paymentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "payments.getOrCreateBankCounterparty",
      "module": "payments",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "getOrCreateBankCounterpartyInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/payment-service/src/payments/procedures/getOrCreateBankCounterparty.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/getOrCreateBankCounterparty.mutation.ts#L8"
      },
      "router": {
        "file": "services/payment-service/src/payments/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/router.ts#L15"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "40cc155b",
      "interpretation": {
        "sig": "40cc155b",
        "summary": "Finds a matching bank counterparty by firm and bank account details, or creates a new `PaymentCounterparty` and `BankCounterparty` pair when none matches.",
        "models": [
          {
            "model": "PaymentCounterparty",
            "service": "payment-service"
          },
          {
            "model": "BankCounterparty",
            "service": "payment-service"
          }
        ]
      }
    },
    {
      "id": "payment-service:payments.createBankPayment",
      "api": "payment-service",
      "origin": "payment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "paymentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "payments.createBankPayment",
      "module": "payments",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "createBankPaymentInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/payment-service/src/payments/procedures/createBankPayment.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/createBankPayment.mutation.ts#L8"
      },
      "router": {
        "file": "services/payment-service/src/payments/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/router.ts#L16"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [
        "payment-service/bankPayment.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "89c4144c",
      "interpretation": {
        "sig": "89c4144c",
        "summary": "Creates a bank-transfer `Payment` plus its linked `BankTransfer` record, then, unless it was entered manually, publishes `bankPayment.created` to hand it off to reconciliation.",
        "flags": [
          "framework-publish write path"
        ],
        "models": [
          {
            "model": "Payment",
            "service": "payment-service"
          },
          {
            "model": "BankTransfer",
            "service": "payment-service"
          }
        ]
      }
    },
    {
      "id": "payment-service:payments.upsertStripeRefund",
      "api": "payment-service",
      "origin": "payment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "paymentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "payments.upsertStripeRefund",
      "module": "payments",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "upsertStripeRefundInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/payment-service/src/payments/procedures/upsertStripeRefund.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/upsertStripeRefund.mutation.ts#L8"
      },
      "router": {
        "file": "services/payment-service/src/payments/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/router.ts#L17"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [
        "payment-service/reconciliation.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e8f986f5",
      "interpretation": {
        "sig": "e8f986f5",
        "summary": "Finds the original Stripe payment, confirms the charge with Stripe, then creates the refund `Payment`/`StripeRefund` if none exists yet and updates its status, last4, and receipt URL. Creating the refund also writes a `Reconciliation` row and fires `reconciliation.created`.",
        "models": [
          {
            "model": "Payment",
            "service": "payment-service"
          },
          {
            "model": "StripeRefund",
            "service": "payment-service"
          },
          {
            "model": "Reconciliation",
            "service": "payment-service"
          }
        ]
      }
    },
    {
      "id": "payment-service:payments.issueStripeRefund",
      "api": "payment-service",
      "origin": "payment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "paymentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "payments.issueStripeRefund",
      "module": "payments",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "issueStripeRefundInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/payment-service/src/payments/procedures/issueStripeRefund.mutation.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/issueStripeRefund.mutation.ts#L9"
      },
      "router": {
        "file": "services/payment-service/src/payments/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/router.ts#L18"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [
        "payment-service/reconciliation.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "91602bb5",
      "interpretation": {
        "sig": "91602bb5",
        "summary": "Calls the Stripe API to issue a refund on a payment intent, records it as a new `Payment` and `StripeRefund`, and writes a `Reconciliation` row that fires `reconciliation.created` to trigger downstream reconciliation.",
        "models": [
          {
            "model": "Payment",
            "service": "payment-service"
          },
          {
            "model": "StripeRefund",
            "service": "payment-service"
          },
          {
            "model": "Reconciliation",
            "service": "payment-service"
          }
        ]
      }
    },
    {
      "id": "payment-service:reconciliation.create",
      "api": "payment-service",
      "origin": "payment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "paymentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "reconciliation.create",
      "module": "reconciliation",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "createReconciliationInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/payment-service/src/reconciliation/procedures/createReconciliation.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/reconciliation/procedures/createReconciliation.mutation.ts#L8"
      },
      "router": {
        "file": "services/payment-service/src/reconciliation/router.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/reconciliation/router.ts#L6"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2c5e0a10",
      "interpretation": {
        "sig": "2c5e0a10",
        "summary": "Creates a `Reconciliation` record directly from the input payload, tying a payment or transaction intent to whoever reconciled it. Called by other services over the internal JWT, not by any app.",
        "models": [
          {
            "model": "Reconciliation",
            "service": "payment-service"
          }
        ]
      }
    },
    {
      "id": "payment-service:reconciliation.get",
      "api": "payment-service",
      "origin": "payment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "paymentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "reconciliation.get",
      "module": "reconciliation",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "getReconciliationInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/payment-service/src/reconciliation/procedures/getReconciliation.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/reconciliation/procedures/getReconciliation.query.ts#L8"
      },
      "router": {
        "file": "services/payment-service/src/reconciliation/router.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/reconciliation/router.ts#L7"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "12cc9912",
      "interpretation": {
        "sig": "12cc9912",
        "summary": "Looks up a single `Reconciliation` by id and returns it, or throws `NOT_FOUND` if it doesn't exist.",
        "models": [
          {
            "model": "Reconciliation",
            "service": "payment-service"
          }
        ]
      }
    },
    {
      "id": "payment-service:reconciliation.list",
      "api": "payment-service",
      "origin": "payment-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "paymentRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "reconciliation.list",
      "module": "reconciliation",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "listReconciliationsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/payment-service/src/reconciliation/procedures/listReconciliations.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/reconciliation/procedures/listReconciliations.query.ts#L8"
      },
      "router": {
        "file": "services/payment-service/src/reconciliation/router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/reconciliation/router.ts#L8"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4fdcc925",
      "interpretation": {
        "sig": "4fdcc925",
        "summary": "Lists `Reconciliations` with pagination, sorting, and filters (by id, payment, transaction intent, reconciler, or created-date range), returning items plus a total count.",
        "models": [
          {
            "model": "Reconciliation",
            "service": "payment-service"
          }
        ]
      }
    },
    {
      "id": "product-service:categories.listCategoriesWithHierarchy",
      "api": "product-service",
      "origin": "product-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "productRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "categories.listCategoriesWithHierarchy",
      "module": "categories",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/product-service/src/procedures/listCategoriesWithHierarchy.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listCategoriesWithHierarchy.query.ts#L6"
      },
      "router": {
        "file": "services/product-service/src/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/router.ts#L11"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b558507d",
      "interpretation": {
        "sig": "b558507d",
        "summary": "Returns the full category and product tree for a market (GB or US), building it from Contentful for GB with categories, products, and variants nested three levels deep. Read-only, used by other services to render product/category pickers.",
        "flags": [
          "read-only"
        ]
      }
    },
    {
      "id": "product-service:products.listProducts",
      "api": "product-service",
      "origin": "product-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "productRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "products.listProducts",
      "module": "products",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "listProductsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/product-service/src/procedures/listProducts.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listProducts.query.ts#L5"
      },
      "router": {
        "file": "services/product-service/src/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/router.ts#L14"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "69d91645",
      "interpretation": {
        "sig": "69d91645",
        "summary": "Returns the catalogue of legal products (with line items and prices) for a given market, optionally filtered by search query, category, product IDs, or jurisdiction: GB reads from Contentful fee guide variants, US queries Sanity directly.",
        "models": [
          {
            "model": "LegalProduct",
            "service": "product-service"
          }
        ]
      }
    },
    {
      "id": "product-service:jurisdictions.listJurisdictions",
      "api": "product-service",
      "origin": "product-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "productRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "jurisdictions.listJurisdictions",
      "module": "jurisdictions",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/product-service/src/procedures/listJurisdictions.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listJurisdictions.query.ts#L6"
      },
      "router": {
        "file": "services/product-service/src/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/router.ts#L17"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4b2d7ce3",
      "interpretation": {
        "sig": "4b2d7ce3",
        "summary": "Returns the list of legal jurisdictions for a market: hardcoded England & Wales for GB, or the full list read from Sanity for US.",
        "models": [
          {
            "model": "jurisdiction",
            "service": "Sanity CMS"
          }
        ]
      }
    },
    {
      "id": "product-service:jurisdictions.getJurisdiction",
      "api": "product-service",
      "origin": "product-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "productRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "jurisdictions.getJurisdiction",
      "module": "jurisdictions",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetJurisdictionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/product-service/src/procedures/getJurisdiction.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/getJurisdiction.query.ts#L9"
      },
      "router": {
        "file": "services/product-service/src/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/router.ts#L18"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3649a089",
      "interpretation": {
        "sig": "3649a089",
        "summary": "Looks up a single jurisdiction by its reporting ID, checking the GB hardcoded list first and falling back to a Sanity query for US jurisdictions; throws `NOT_FOUND` if no match exists.",
        "models": [
          {
            "model": "jurisdiction",
            "service": "Sanity CMS"
          }
        ]
      }
    },
    {
      "id": "product-service:jurisdictions.listJurisdictionsForProducts",
      "api": "product-service",
      "origin": "product-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "productRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "jurisdictions.listJurisdictionsForProducts",
      "module": "jurisdictions",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "services/product-service/src/procedures/listJurisdictionsForProducts.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listJurisdictionsForProducts.query.ts#L6"
      },
      "router": {
        "file": "services/product-service/src/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/router.ts#L19"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "74850e9",
      "interpretation": {
        "sig": "74850e9",
        "summary": "Given a list of legal product IDs and a market, returns the distinct jurisdictions those products are tagged with in Sanity (GB always returns the fixed England & Wales entry).",
        "models": [
          {
            "model": "legalProduct",
            "service": "Sanity CMS"
          },
          {
            "model": "jurisdiction",
            "service": "Sanity CMS"
          }
        ]
      }
    },
    {
      "id": "search-service:adminSearch.searchEverything",
      "api": "search-service",
      "origin": "search-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "searchRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "adminSearch.searchEverything",
      "module": "adminSearch",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "AdminSearchEverythingInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/search-service/src/admin-search/admin-search-router.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/search-service/src/admin-search/admin-search-router.ts#L6"
      },
      "router": {
        "file": "services/search-service/src/admin-search/admin-search-router.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/search-service/src/admin-search/admin-search-router.ts#L6"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f3372d6c",
      "interpretation": {
        "sig": "f3372d6c",
        "summary": "Runs one Typesense query across matters, identities, firms, quotes, and fee agreements for a given market and search term, returning up to `perCollection` hits per type. Used for the admin global search bar: it recognizes ID prefixes (`mat_`, `pers_`, `cus_`, `firm_`, `quot_`, `feeagr_`) for exact lookups and falls back to text matching on title/name/email/phone fields otherwise.",
        "models": [
          {
            "model": "Matter",
            "service": "search-service"
          },
          {
            "model": "Identity",
            "service": "search-service"
          },
          {
            "model": "Firm",
            "service": "search-service"
          },
          {
            "model": "Quote",
            "service": "search-service"
          },
          {
            "model": "FeeAgreement",
            "service": "search-service"
          }
        ]
      }
    },
    {
      "id": "search-service:aiMessages.searchAiMessagesByThread",
      "api": "search-service",
      "origin": "search-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "searchRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "aiMessages.searchAiMessagesByThread",
      "module": "aiMessages",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "SearchAiMessagesByThreadInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/search-service/src/ai-messages/ai-messages-router.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/search-service/src/ai-messages/ai-messages-router.ts#L6"
      },
      "router": {
        "file": "services/search-service/src/ai-messages/ai-messages-router.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/search-service/src/ai-messages/ai-messages-router.ts#L6"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d737d409",
      "interpretation": {
        "sig": "d737d409",
        "summary": "Searches AI message content within a matter's threads via Typesense, grouping hits by `threadId` and returning the top matches per thread with highlighted snippets. Read-only: it queries the `ai_messages` search index and does not write anything.",
        "flags": []
      }
    },
    {
      "id": "telephony-service:firms.provision",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firms.provision",
      "module": "firms",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "FirmProvisionedEvent",
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/firm/firm-controller.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/firm/firm-controller.ts#L7"
      },
      "router": {
        "file": "services/telephony-service/src/domains/firm/firm-controller.ts",
        "line": 46,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/firm/firm-controller.ts#L46"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "19aeb79e",
      "interpretation": {
        "sig": "19aeb79e",
        "summary": "Publishes a `firms.provisioned` event so telephony can set up voice/calling for a firm; the mutation itself does not write to the database, it delegates to the event pipeline.",
        "flags": [
          "mutation only publishes, no direct write"
        ]
      }
    },
    {
      "id": "telephony-service:firms.get",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firms.get",
      "module": "firms",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/firm/firm-controller.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/firm/firm-controller.ts#L11"
      },
      "router": {
        "file": "services/telephony-service/src/domains/firm/firm-controller.ts",
        "line": 47,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/firm/firm-controller.ts#L47"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4e75433a",
      "interpretation": {
        "sig": "4e75433a",
        "summary": "Looks up a firm's telephony record and returns it with its `VoiceConfig` and counts of phone numbers and voice agents; throws `NOT_FOUND` if telephony is not enabled for the firm."
      }
    },
    {
      "id": "telephony-service:firms.list",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firms.list",
      "module": "firms",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/firm/firm-controller.ts",
        "line": 32,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/firm/firm-controller.ts#L32"
      },
      "router": {
        "file": "services/telephony-service/src/domains/firm/firm-controller.ts",
        "line": 48,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/firm/firm-controller.ts#L48"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "597aa7ce",
      "interpretation": {
        "sig": "597aa7ce",
        "summary": "Lists every `TelephonyFirm` ordered by creation date, each with its phone number and voice agent counts.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "telephony-service:firms.update",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "firms.update",
      "module": "firms",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "FirmUpdatedEvent",
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/firm/firm-controller.ts",
        "line": 41,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/firm/firm-controller.ts#L41"
      },
      "router": {
        "file": "services/telephony-service/src/domains/firm/firm-controller.ts",
        "line": 49,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/firm/firm-controller.ts#L49"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d2ecc48c",
      "interpretation": {
        "sig": "d2ecc48c",
        "summary": "Confirms the firm has telephony enabled, then publishes a `firms.updated` event to apply the change; the mutation itself reads before delegating the write to the event pipeline.",
        "flags": [
          "mutation only publishes, no direct write"
        ]
      }
    },
    {
      "id": "telephony-service:agents.list",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "agents.list",
      "module": "agents",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/agent/agent-controller.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/agent/agent-controller.ts#L11"
      },
      "router": {
        "file": "services/telephony-service/src/domains/agent/agent-controller.ts",
        "line": 34,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/agent/agent-controller.ts#L34"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "336a5a95",
      "interpretation": {
        "sig": "336a5a95",
        "summary": "Lists the voice agents configured for a firm, ordered by creation date, with a count of phone numbers each agent is assigned to.",
        "models": [
          {
            "model": "voiceAgent",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "telephony-service:agents.create",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "agents.create",
      "module": "agents",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "AgentCreatedEvent",
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/agent/agent-controller.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/agent/agent-controller.ts#L21"
      },
      "router": {
        "file": "services/telephony-service/src/domains/agent/agent-controller.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/agent/agent-controller.ts#L35"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2f465e98",
      "interpretation": {
        "sig": "2f465e98",
        "summary": "Checks the firm exists, then publishes an `agents.created` event so a voice agent record gets set up downstream; it does not write the agent itself.",
        "flags": [
          "read-that-writes"
        ]
      }
    },
    {
      "id": "telephony-service:agents.update",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "agents.update",
      "module": "agents",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "AgentUpdatedEvent",
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/agent/agent-controller.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/agent/agent-controller.ts#L25"
      },
      "router": {
        "file": "services/telephony-service/src/domains/agent/agent-controller.ts",
        "line": 36,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/agent/agent-controller.ts#L36"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ced172dd",
      "interpretation": {
        "sig": "ced172dd",
        "summary": "Publishes an `agents.updated` event to change a voice agent's settings, returning `NOT_FOUND` if the agent doesn't exist; the update itself happens in the downstream handler, not here.",
        "flags": [
          "read-that-writes"
        ]
      }
    },
    {
      "id": "telephony-service:agents.remove",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "agents.remove",
      "module": "agents",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "AgentRemovedEvent",
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/agent/agent-controller.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/agent/agent-controller.ts#L29"
      },
      "router": {
        "file": "services/telephony-service/src/domains/agent/agent-controller.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/agent/agent-controller.ts#L37"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b7b00b54",
      "interpretation": {
        "sig": "b7b00b54",
        "summary": "Publishes an `agents.removed` event to delete a voice agent, blocking with `PRECONDITION_FAILED` if the agent is still assigned to any phone number.",
        "flags": [
          "read-that-writes"
        ]
      }
    },
    {
      "id": "telephony-service:numbers.list",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "numbers.list",
      "module": "numbers",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/number/number-controller.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/number/number-controller.ts#L11"
      },
      "router": {
        "file": "services/telephony-service/src/domains/number/number-controller.ts",
        "line": 34,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/number/number-controller.ts#L34"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "8ba5f747",
      "interpretation": {
        "sig": "8ba5f747",
        "summary": "Lists a firm's phone numbers, ordered by number, including each number's linked voice agent. Read-only query direct against the `PhoneNumber` table.",
        "models": [
          {
            "model": "PhoneNumber",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "telephony-service:numbers.add",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "numbers.add",
      "module": "numbers",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "NumberAddedEvent",
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/number/number-controller.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/number/number-controller.ts#L21"
      },
      "router": {
        "file": "services/telephony-service/src/domains/number/number-controller.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/number/number-controller.ts#L35"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1203454b",
      "interpretation": {
        "sig": "1203454b",
        "summary": "Registers a new phone number for a firm (validating the firm and, if given, the voice agent belong together), then publishes a `numbers.added` event whose effect handler creates the `PhoneNumber` row. Returns `CONFLICT` if the number is already registered.",
        "models": [
          {
            "model": "PhoneNumber",
            "service": "telephony-service"
          }
        ],
        "flags": [
          "write-via-framework-publish"
        ]
      }
    },
    {
      "id": "telephony-service:numbers.update",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "numbers.update",
      "module": "numbers",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "NumberUpdatedEvent",
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/number/number-controller.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/number/number-controller.ts#L25"
      },
      "router": {
        "file": "services/telephony-service/src/domains/number/number-controller.ts",
        "line": 36,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/number/number-controller.ts#L36"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4e01404b",
      "interpretation": {
        "sig": "4e01404b",
        "summary": "Updates a phone number's fields (e.g. reassigning its voice agent) by publishing a `numbers.updated` event; the effect handler applies the change scoped to the number's own firm, so a `numberId` from another firm comes back as `NOT_FOUND` rather than writing across firms.",
        "models": [
          {
            "model": "PhoneNumber",
            "service": "telephony-service"
          }
        ],
        "flags": [
          "write-via-framework-publish"
        ]
      }
    },
    {
      "id": "telephony-service:numbers.remove",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "numbers.remove",
      "module": "numbers",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "NumberRemovedEvent",
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/number/number-controller.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/number/number-controller.ts#L29"
      },
      "router": {
        "file": "services/telephony-service/src/domains/number/number-controller.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/number/number-controller.ts#L37"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "af588df6",
      "interpretation": {
        "sig": "af588df6",
        "summary": "Deletes a firm's phone number by publishing a `numbers.removed` event; the effect handler deletes the `PhoneNumber` row scoped to that firm, returning `NOT_FOUND` if it doesn't belong there.",
        "models": [
          {
            "model": "PhoneNumber",
            "service": "telephony-service"
          }
        ],
        "flags": [
          "write-via-framework-publish"
        ]
      }
    },
    {
      "id": "telephony-service:hours.get",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "hours.get",
      "module": "hours",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/hours/hours-controller.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/hours/hours-controller.ts#L11"
      },
      "router": {
        "file": "services/telephony-service/src/domains/hours/hours-controller.ts",
        "line": 40,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/hours/hours-controller.ts#L40"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9bb6fe42",
      "interpretation": {
        "sig": "9bb6fe42",
        "summary": "Returns a firm's business hours intervals and holiday list, ordered by day/time and by date.",
        "models": [
          {
            "model": "businessHoursInterval",
            "service": "telephony-service"
          },
          {
            "model": "holiday",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "telephony-service:hours.replace",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "hours.replace",
      "module": "hours",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "BusinessHoursReplacedEvent",
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/hours/hours-controller.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/hours/hours-controller.ts#L27"
      },
      "router": {
        "file": "services/telephony-service/src/domains/hours/hours-controller.ts",
        "line": 41,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/hours/hours-controller.ts#L41"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a30c37a5",
      "interpretation": {
        "sig": "a30c37a5",
        "summary": "Replaces a firm's whole business-hours schedule: deletes its existing intervals and inserts the new set in one transaction, driven by a framework event whose effect does the write.",
        "models": [
          {
            "model": "businessHoursInterval",
            "service": "telephony-service"
          }
        ],
        "flags": [
          "mutation-publishes-event"
        ]
      }
    },
    {
      "id": "telephony-service:hours.addHoliday",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "hours.addHoliday",
      "module": "hours",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "HolidayAddedEvent",
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/hours/hours-controller.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/hours/hours-controller.ts#L31"
      },
      "router": {
        "file": "services/telephony-service/src/domains/hours/hours-controller.ts",
        "line": 42,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/hours/hours-controller.ts#L42"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1fa4cca8",
      "interpretation": {
        "sig": "1fa4cca8",
        "summary": "Adds a holiday closure (date, name, open/close time) for a firm; publishes a framework event whose effect creates the `Holiday` row, and returns `CONFLICT` if one already exists for that date.",
        "models": [
          {
            "model": "holiday",
            "service": "telephony-service"
          }
        ],
        "flags": [
          "mutation-publishes-event"
        ]
      }
    },
    {
      "id": "telephony-service:hours.removeHoliday",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "hours.removeHoliday",
      "module": "hours",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "HolidayRemovedEvent",
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/hours/hours-controller.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/hours/hours-controller.ts#L35"
      },
      "router": {
        "file": "services/telephony-service/src/domains/hours/hours-controller.ts",
        "line": 43,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/hours/hours-controller.ts#L43"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b4193b29",
      "interpretation": {
        "sig": "b4193b29",
        "summary": "Removes a holiday from a firm's schedule; publishes a framework event whose effect deletes the `Holiday` row scoped to that firm, returning `NOT_FOUND` if the holiday belongs to another firm or doesn't exist.",
        "models": [
          {
            "model": "holiday",
            "service": "telephony-service"
          }
        ],
        "flags": [
          "mutation-publishes-event"
        ]
      }
    },
    {
      "id": "telephony-service:routing.list",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "routing.list",
      "module": "routing",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/routing/routing-controller.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/routing/routing-controller.ts#L7"
      },
      "router": {
        "file": "services/telephony-service/src/domains/routing/routing-controller.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/routing/routing-controller.ts#L21"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "c2ba198b",
      "interpretation": {
        "sig": "c2ba198b",
        "summary": "Lists a firm's call routing destinations (queue targets and priority order) straight from the `RoutingDestination` table, sorted by kind and priority.",
        "models": [
          {
            "model": "RoutingDestination",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "telephony-service:routing.replace",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "routing.replace",
      "module": "routing",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RoutingDestinationsReplacedEvent",
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/routing/routing-controller.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/routing/routing-controller.ts#L16"
      },
      "router": {
        "file": "services/telephony-service/src/domains/routing/routing-controller.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/routing/routing-controller.ts#L22"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6c008a84",
      "interpretation": {
        "sig": "6c008a84",
        "summary": "Swaps out a firm's entire call routing setup: the caller submits the full new list of destinations, the procedure publishes a `destinationsReplaced` event, and the event effect deletes all existing `RoutingDestination` rows for the firm and recreates them from the input in one transaction.",
        "flags": [
          "framework-publish write path"
        ],
        "models": [
          {
            "model": "RoutingDestination",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "telephony-service:voiceConfig.get",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "voiceConfig.get",
      "module": "voiceConfig",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/voice-config/voice-config-controller.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/voice-config/voice-config-controller.ts#L8"
      },
      "router": {
        "file": "services/telephony-service/src/domains/voice-config/voice-config-controller.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/voice-config/voice-config-controller.ts#L20"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "5bdf2207",
      "interpretation": {
        "sig": "5bdf2207",
        "summary": "Looks up a firm's `VoiceConfig` row by `firmId` after confirming the firm exists. Nothing in the codebase calls it.",
        "models": [
          {
            "model": "VoiceConfig",
            "service": "telephony-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "telephony-service:voiceConfig.update",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "voiceConfig.update",
      "module": "voiceConfig",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "VoiceConfigUpdatedEvent",
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/voice-config/voice-config-controller.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/voice-config/voice-config-controller.ts#L15"
      },
      "router": {
        "file": "services/telephony-service/src/domains/voice-config/voice-config-controller.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/voice-config/voice-config-controller.ts#L21"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2b7ca5a5",
      "interpretation": {
        "sig": "2b7ca5a5",
        "summary": "Checks the firm exists, then publishes a `voiceConfig.updated` event carrying the new settings (locale, etc); the durable effect handler updates the firm's `VoiceConfig` row. If the row is missing (telephony not enabled for the firm), the caller gets a `NOT_FOUND` error instead of a write.",
        "models": [
          {
            "model": "VoiceConfig",
            "service": "telephony-service"
          }
        ],
        "flags": [
          "read-that-writes-via-event"
        ]
      }
    },
    {
      "id": "telephony-service:calls.list",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "calls.list",
      "module": "calls",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/call/call-controller.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/call/call-controller.ts#L10"
      },
      "router": {
        "file": "services/telephony-service/src/domains/call/call-controller.ts",
        "line": 183,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/call/call-controller.ts#L183"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "c1461236",
      "interpretation": {
        "sig": "c1461236",
        "summary": "Returns a page of a firm's `Call` records (with recordings and AI/human call legs included), newest first. Nothing in the codebase calls it.",
        "models": [
          {
            "model": "Call",
            "service": "telephony-service"
          }
        ],
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "telephony-service:calls.analytics",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "calls.analytics",
      "module": "calls",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/call/call-controller.ts",
        "line": 106,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/call/call-controller.ts#L106"
      },
      "router": {
        "file": "services/telephony-service/src/domains/call/call-controller.ts",
        "line": 184,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/call/call-controller.ts#L184"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b2d70b26",
      "interpretation": {
        "sig": "b2d70b26",
        "summary": "Builds the call analytics view for one firm and reporting window: current vs. prior-window call totals for the trend arrow, call volume bucketed on the firm's local calendar, and the recent call log with recording durations summed per call.",
        "models": [
          {
            "model": "Call",
            "service": "telephony-service"
          },
          {
            "model": "TelephonyFirm",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "telephony-service:calls.get",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "calls.get",
      "module": "calls",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/call/call-controller.ts",
        "line": 34,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/call/call-controller.ts#L34"
      },
      "router": {
        "file": "services/telephony-service/src/domains/call/call-controller.ts",
        "line": 185,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/call/call-controller.ts#L185"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "4144d182",
      "interpretation": {
        "sig": "4144d182",
        "summary": "Fetches one `Call` by id with its recordings, AI/human call legs, and phone number. Nothing in the codebase calls it.",
        "models": [
          {
            "model": "Call",
            "service": "telephony-service"
          }
        ],
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "telephony-service:calls.recordingPlaybackUrl",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "calls.recordingPlaybackUrl",
      "module": "calls",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/call/call-controller.ts",
        "line": 53,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/call/call-controller.ts#L53"
      },
      "router": {
        "file": "services/telephony-service/src/domains/call/call-controller.ts",
        "line": 186,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/call/call-controller.ts#L186"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "f3996927",
      "interpretation": {
        "sig": "f3996927",
        "summary": "Presigns a short-lived S3 GET URL so a recording can stream straight to the browser. Nothing in the codebase calls it.",
        "models": [
          {
            "model": "Recording",
            "service": "telephony-service"
          }
        ],
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "telephony-service:calls.postCallUrl",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "calls.postCallUrl",
      "module": "calls",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/domains/call/call-controller.ts",
        "line": 74,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/call/call-controller.ts#L74"
      },
      "router": {
        "file": "services/telephony-service/src/domains/call/call-controller.ts",
        "line": 187,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/call/call-controller.ts#L187"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "238003f7",
      "interpretation": {
        "sig": "238003f7",
        "summary": "Presigns a short-lived S3 GET URL for an AI call leg's post-call object (the stored turns, state, and analysis). Nothing in the codebase calls it.",
        "models": [
          {
            "model": "AiCallLeg",
            "service": "telephony-service"
          }
        ],
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "telephony-service:voice.incoming",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "voice.incoming",
      "module": "voice",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/voice/voice-controller.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L26"
      },
      "router": {
        "file": "services/telephony-service/src/voice/voice-controller.ts",
        "line": 132,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L132"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "c19a1115",
      "interpretation": {
        "sig": "c19a1115",
        "summary": "Handles the inbound call webhook: loads the firm's routing config, decides whether to dial a human hunt group, AMD-screen a single human line, connect straight to the AI agent, or reject/miss, publishes `calls.received` to create the `Call` record, and returns the TwiML Twilio should play.",
        "models": [
          {
            "model": "Call",
            "service": "telephony-service"
          },
          {
            "model": "PhoneNumber",
            "service": "telephony-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "telephony-service:voice.dialStatus",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "voice.dialStatus",
      "module": "voice",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/voice/voice-controller.ts",
        "line": 38,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L38"
      },
      "router": {
        "file": "services/telephony-service/src/voice/voice-controller.ts",
        "line": 133,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L133"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1f88a8e9",
      "interpretation": {
        "sig": "1f88a8e9",
        "summary": "Handles the Dial action callback after a human hunt-group attempt: if a leg answered, ends the flow; otherwise falls back to connecting the AI agent (or ends with a message if the firm opted out of AI fallback), and publishes `calls.handlingUpdated` to correct `handledBy` to `NONE` or `AI` as appropriate.",
        "models": [
          {
            "model": "Call",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "telephony-service:voice.humanAnswer",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "voice.humanAnswer",
      "module": "voice",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/voice/voice-controller.ts",
        "line": 49,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L49"
      },
      "router": {
        "file": "services/telephony-service/src/voice/voice-controller.ts",
        "line": 134,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L134"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "92b82ea0",
      "interpretation": {
        "sig": "92b82ea0",
        "summary": "Handles the AMD screening leg's answer callback: records the `answeredBy` verdict, and if a real human picked up joins them into the parked conference with the caller, otherwise redirects the caller to the AI agent and drops the screening leg.",
        "models": [
          {
            "model": "Call",
            "service": "telephony-service"
          },
          {
            "model": "HumanCallLeg",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "telephony-service:voice.humanStatus",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "voice.humanStatus",
      "module": "voice",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/voice/voice-controller.ts",
        "line": 60,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L60"
      },
      "router": {
        "file": "services/telephony-service/src/voice/voice-controller.ts",
        "line": 135,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L135"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "77cc8d98",
      "interpretation": {
        "sig": "77cc8d98",
        "summary": "Handles the AMD screening leg's terminal status callback: records the leg's end, and if the leg was canceled corrects `handledBy` back to `NONE`, or if it went unanswered/busy/failed redirects the caller to the AI agent.",
        "models": [
          {
            "model": "Call",
            "service": "telephony-service"
          },
          {
            "model": "HumanCallLeg",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "telephony-service:voice.escalationAnswer",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "voice.escalationAnswer",
      "module": "voice",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/voice/voice-controller.ts",
        "line": 74,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L74"
      },
      "router": {
        "file": "services/telephony-service/src/voice/voice-controller.ts",
        "line": 136,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L136"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "10c8ece6",
      "interpretation": {
        "sig": "10c8ece6",
        "summary": "Handles the warm-transfer escalation leg's answer callback while the caller is still on the AI: if a real human answered, redirects the caller into a shared conference and marks `handledBy` `HUMAN`; if it was voicemail/unknown or the redirect fails, the leg is dropped and the caller stays with the AI.",
        "models": [
          {
            "model": "Call",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "telephony-service:voice.escalationLegStatus",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "voice.escalationLegStatus",
      "module": "voice",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/voice/voice-controller.ts",
        "line": 84,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L84"
      },
      "router": {
        "file": "services/telephony-service/src/voice/voice-controller.ts",
        "line": 137,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L137"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ff35730a",
      "interpretation": {
        "sig": "ff35730a",
        "summary": "Records the warm-transfer escalation leg's terminal status (answered duration or failure) by publishing `calls.humanLegEnded`; the caller is never touched here since they never left the AI conversation during this leg's ring.",
        "models": []
      }
    },
    {
      "id": "telephony-service:voice.escalationFallback",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "voice.escalationFallback",
      "module": "voice",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/voice/voice-controller.ts",
        "line": 98,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L98"
      },
      "router": {
        "file": "services/telephony-service/src/voice/voice-controller.ts",
        "line": 138,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L138"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "84ecc263",
      "interpretation": {
        "sig": "84ecc263",
        "summary": "Fallback TwiML for the escalation leg if the answer webhook itself errored: just hangs the leg up, with no database read or write.",
        "flags": [
          "read-that-writes: actually neither, pure static response despite mutation kind"
        ]
      }
    },
    {
      "id": "telephony-service:voice.conferenceStatus",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "voice.conferenceStatus",
      "module": "voice",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/voice/voice-controller.ts",
        "line": 102,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L102"
      },
      "router": {
        "file": "services/telephony-service/src/voice/voice-controller.ts",
        "line": 139,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L139"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "dd19b430",
      "interpretation": {
        "sig": "dd19b430",
        "summary": "Handles conference lifecycle events for the AMD park: when the caller leaves before a human joins, or the conference ends, cancels the still-ringing human leg so it stops ringing a fee-earner for a caller who already left.",
        "models": [
          {
            "model": "Call",
            "service": "telephony-service"
          },
          {
            "model": "HumanCallLeg",
            "service": "telephony-service"
          }
        ],
        "flags": [
          "mutation only reads/cancels a Twilio leg via REST, no direct DB write in this handler"
        ]
      }
    },
    {
      "id": "telephony-service:voice.humanFallback",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "voice.humanFallback",
      "module": "voice",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/voice/voice-controller.ts",
        "line": 114,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L114"
      },
      "router": {
        "file": "services/telephony-service/src/voice/voice-controller.ts",
        "line": 140,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L140"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f704b14",
      "interpretation": {
        "sig": "f704b14",
        "summary": "Fallback for the AMD screening leg if the answer webhook errored: redirects the caller to the AI agent and hangs up this leg, so the caller degrades gracefully instead of being left in dead air.",
        "models": []
      }
    },
    {
      "id": "telephony-service:voice.tools.escalateToHuman",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "voice.tools.escalateToHuman",
      "module": "voice",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": true,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "toolInput",
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/voice/voice-controller.ts",
        "line": 123,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L123"
      },
      "router": {
        "file": "services/telephony-service/src/voice/voice-controller.ts",
        "line": 142,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L142"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f2074324",
      "interpretation": {
        "sig": "f2074324",
        "summary": "The `escalate_to_human` tool the AI agent calls for a warm transfer: originates a ring to the firm's top-priority escalation number, publishes `calls.humanLegOriginated`, then blocks polling the database until the leg is bridged (returns connected and publishes `calls.escalated`), goes to voicemail/unknown, ends, or the ring window (20s) expires, at which point it cancels the leg and reports `no_answer`.",
        "models": [
          {
            "model": "Call",
            "service": "telephony-service"
          },
          {
            "model": "HumanCallLeg",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "telephony-service:voice.tools.endCall",
      "api": "telephony-service",
      "origin": "telephony-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "telephonyRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "voice.tools.endCall",
      "module": "voice",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "internalPreAuthProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "toolInput",
      "hasOutput": false,
      "location": {
        "file": "services/telephony-service/src/voice/voice-controller.ts",
        "line": 127,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L127"
      },
      "router": {
        "file": "services/telephony-service/src/voice/voice-controller.ts",
        "line": 143,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L143"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6d6dc18a",
      "interpretation": {
        "sig": "6d6dc18a",
        "summary": "The `end_call` tool the AI agent calls once the caller's request is handled: redirects the live call to a goodbye TwiML and hangs it up. No database write happens here beyond the read used to fetch the firm's locale.",
        "models": [
          {
            "model": "Call",
            "service": "telephony-service"
          }
        ],
        "flags": [
          "mutation only reads: writes go through Twilio REST redirect, not Prisma"
        ]
      }
    },
    {
      "id": "transaction-service:tax.calculateItemsTax",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "tax.calculateItemsTax",
      "module": "tax",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "services/transaction-service/src/tax/procedures/calculateItemsTax.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/tax/procedures/calculateItemsTax.query.ts#L8"
      },
      "router": {
        "file": "services/transaction-service/src/tax/router.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/tax/router.ts#L4"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "fafd6c6b",
      "interpretation": {
        "sig": "fafd6c6b",
        "summary": "Given a list of `FEE` and `DISBURSEMENT` line items and a market (US or GB), returns the pre-tax amount, tax amount, and tax metadata for each item, applying a flat 20% UK VAT to GB fees and zero tax everywhere else (disbursements are always tax-free, and US fees are untaxed until the business registers to collect sales tax). Pure calculation, no persistence.",
        "flags": [
          "stub-tax-rate: hardcoded 20% UK VAT, no Stripe Tax integration yet (TODO UST-1119)"
        ]
      }
    },
    {
      "id": "transaction-service:invoice.cancelMany",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "invoice.cancelMany",
      "module": "invoice",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CancelManyInvoicesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/invoice/procedures/cancelManyInvoices.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/cancelManyInvoices.mutation.ts#L5"
      },
      "router": {
        "file": "services/transaction-service/src/invoice/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/router.ts#L10"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "dc0d4581",
      "interpretation": {
        "sig": "dc0d4581",
        "summary": "Cancels a batch of invoices in one transaction: sets each invoice and its linked transaction intents to `CANCELLED`, after checking every invoice and intent is currently `DRAFT`, `PENDING_APPROVAL`, or `PENDING`. Rejects the whole batch if any invoice ID is missing or any invoice/intent is in a status that can't be cancelled.",
        "models": [
          {
            "model": "Invoice",
            "service": "transaction-service"
          },
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:invoice.get",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "invoice.get",
      "module": "invoice",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetInvoiceInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/transaction-service/src/invoice/procedures/getInvoice.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/getInvoice.query.ts#L8"
      },
      "router": {
        "file": "services/transaction-service/src/invoice/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/router.ts#L11"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "197af79a",
      "interpretation": {
        "sig": "197af79a",
        "summary": "Fetches a single invoice by ID with its items, sender, and receiver (including bank account), and computes subtotal/tax/total from the stored item amounts. Throws `NOT_FOUND` if the invoice doesn't exist.",
        "models": [
          {
            "model": "Invoice",
            "service": "transaction-service"
          },
          {
            "model": "InvoiceItem",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:invoice.list",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "invoice.list",
      "module": "invoice",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListInvoicesInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/transaction-service/src/invoice/procedures/listInvoices.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/listInvoices.query.ts#L8"
      },
      "router": {
        "file": "services/transaction-service/src/invoice/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/router.ts#L12"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ba279879",
      "interpretation": {
        "sig": "ba279879",
        "summary": "Lists invoices with pagination, sorting, and filters (fee agreement, quote, matter, payable IDs, status, type, firm, created-date range), returning each with its computed subtotal/tax/total plus a total count.",
        "models": [
          {
            "model": "Invoice",
            "service": "transaction-service"
          },
          {
            "model": "InvoiceItem",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:invoice.create",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "invoice.create",
      "module": "invoice",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateInvoiceInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/transaction-service/src/invoice/procedures/createInvoice.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/createInvoice.mutation.ts#L8"
      },
      "router": {
        "file": "services/transaction-service/src/invoice/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/router.ts#L13"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "76647860",
      "interpretation": {
        "sig": "76647860",
        "summary": "Creates one invoice with its line items, calculating tax per item first (20% UK VAT on fees, none on disbursements or US market, none for `BILL`-type invoices) and persisting the invoice plus items in a single write. Returns the created invoice with computed subtotal/tax/total.",
        "models": [
          {
            "model": "Invoice",
            "service": "transaction-service"
          },
          {
            "model": "InvoiceItem",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:invoice.createMany",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "invoice.createMany",
      "module": "invoice",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateManyInvoicesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/invoice/procedures/createManyInvoices.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/createManyInvoices.mutation.ts#L5"
      },
      "router": {
        "file": "services/transaction-service/src/invoice/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/router.ts#L14"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "995d6261",
      "interpretation": {
        "sig": "995d6261",
        "summary": "Creates several invoices and their line items in one transaction, applying the same per-item tax calculation as `invoice.create` to each invoice's items before insert. Returns all created invoices with their items; returns an empty array if given no invoices.",
        "models": [
          {
            "model": "Invoice",
            "service": "transaction-service"
          },
          {
            "model": "InvoiceItem",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:invoice.set",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "invoice.set",
      "module": "invoice",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "SetInvoiceInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/transaction-service/src/invoice/procedures/setInvoice.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/setInvoice.mutation.ts#L8"
      },
      "router": {
        "file": "services/transaction-service/src/invoice/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/router.ts#L15"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "956f60e0",
      "interpretation": {
        "sig": "956f60e0",
        "summary": "Replaces an existing invoice's data and line items wholesale: deletes all current invoice items and recreates them with freshly calculated tax, then updates the invoice's own fields. Throws `NOT_FOUND` if the invoice doesn't exist; returns the result with recomputed subtotal/tax/total.",
        "models": [
          {
            "model": "Invoice",
            "service": "transaction-service"
          },
          {
            "model": "InvoiceItem",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:invoice.update",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "invoice.update",
      "module": "invoice",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateInvoiceInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/transaction-service/src/invoice/procedures/updateInvoice.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/updateInvoice.mutation.ts#L8"
      },
      "router": {
        "file": "services/transaction-service/src/invoice/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/router.ts#L16"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ee410d70",
      "interpretation": {
        "sig": "ee410d70",
        "summary": "Patches an existing invoice's own fields (not its line items) and returns it with recomputed subtotal/tax/total. Throws `NOT_FOUND` if the invoice doesn't exist.",
        "models": [
          {
            "model": "Invoice",
            "service": "transaction-service"
          },
          {
            "model": "InvoiceItem",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:transactionIntent.get",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "transactionIntent.get",
      "module": "transactionIntent",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetTransactionIntentInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/transaction-service/src/transactionIntent/procedures/getTransactionIntent.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/getTransactionIntent.query.ts#L8"
      },
      "router": {
        "file": "services/transaction-service/src/transactionIntent/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/router.ts#L10"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6f92bad7",
      "interpretation": {
        "sig": "6f92bad7",
        "summary": "Fetches a single `TransactionIntent` by id, including sender/receiver party details, for display or downstream checks. Throws `NOT_FOUND` if the id doesn't exist.",
        "models": [
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:transactionIntent.list",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "transactionIntent.list",
      "module": "transactionIntent",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListTransactionIntentsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5"
      },
      "router": {
        "file": "services/transaction-service/src/transactionIntent/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/router.ts#L11"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "bdc382c8",
      "interpretation": {
        "sig": "bdc382c8",
        "summary": "Lists `TransactionIntent`s with pagination, sorting, and filters (matter, invoice, status, firm, sender/receiver, amount range, type: `INCOMING`/`OUTGOING_DISBURSEMENT`/`OUTGOING_BILL`/`INTERNAL`), returning items plus a total count.",
        "models": [
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:transactionIntent.listPendingForMatter",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "transactionIntent.listPendingForMatter",
      "module": "transactionIntent",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "services/transaction-service/src/transactionIntent/procedures/listPendingForMatter.query.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listPendingForMatter.query.ts#L25"
      },
      "router": {
        "file": "services/transaction-service/src/transactionIntent/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/router.ts#L12"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "78562f97",
      "interpretation": {
        "sig": "78562f97",
        "summary": "Returns per-firm-bank-account pending in/out cash flow rows for a matter: one entry per real (non-`@world`) FBA leg of each `PENDING` `TransactionIntent`, capped at 100 intents, used to compute expected pending balances.",
        "models": [
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:transactionIntent.create",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "transactionIntent.create",
      "module": "transactionIntent",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateTransactionIntentInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/transaction-service/src/transactionIntent/procedures/createTransactionIntent.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/createTransactionIntent.mutation.ts#L8"
      },
      "router": {
        "file": "services/transaction-service/src/transactionIntent/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/router.ts#L13"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f0027ce5",
      "interpretation": {
        "sig": "f0027ce5",
        "summary": "Creates a new `TransactionIntent` record directly in the DB with the given amount, parties, and metadata, recording who created it.",
        "models": [
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:transactionIntent.createRefund",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "transactionIntent.createRefund",
      "module": "transactionIntent",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateRefundInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/transaction-service/src/transactionIntent/procedures/createStripeRefundTransactionIntent.mutation.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/createStripeRefundTransactionIntent.mutation.ts#L24"
      },
      "router": {
        "file": "services/transaction-service/src/transactionIntent/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/router.ts#L14"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7c5f4eec",
      "interpretation": {
        "sig": "7c5f4eec",
        "summary": "Creates a refund `TransactionIntent` that reverses an existing one: swaps sender/receiver and their firm bank account tags, links back via `originalTransactionIntentId`, and sets the given status and amount.",
        "models": [
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          }
        ],
        "flags": [
          "swaps FBA tags without enforcing non-null contract, to allow refunding legacy intents"
        ]
      }
    },
    {
      "id": "transaction-service:transactionIntent.update",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "transactionIntent.update",
      "module": "transactionIntent",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateTransactionIntentInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/transaction-service/src/transactionIntent/procedures/updateTransactionIntent.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/updateTransactionIntent.mutation.ts#L8"
      },
      "router": {
        "file": "services/transaction-service/src/transactionIntent/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/router.ts#L15"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "53a2c54d",
      "interpretation": {
        "sig": "53a2c54d",
        "summary": "Updates an existing `TransactionIntent`'s fields by id (e.g. status, amount, description); throws `NOT_FOUND` if the intent doesn't exist.",
        "models": [
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:transactionIntent.set",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "transactionIntent.set",
      "module": "transactionIntent",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "SetTransactionIntentInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/transaction-service/src/transactionIntent/procedures/setTransactionIntent.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/setTransactionIntent.mutation.ts#L8"
      },
      "router": {
        "file": "services/transaction-service/src/transactionIntent/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/router.ts#L16"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2d26de83",
      "interpretation": {
        "sig": "2d26de83",
        "summary": "Overwrites a `TransactionIntent`'s fields by id, including reassigning who created it (`createdByIdentityId`); throws `NOT_FOUND` if the intent doesn't exist.",
        "models": [
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:createBankTransferTransaction",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "createBankTransferTransaction",
      "module": "createBankTransferTransaction",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "createTransactionSchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/createBankTransferTransaction.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/createBankTransferTransaction.mutation.ts#L7"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 42,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L42"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "25f8202",
      "interpretation": {
        "sig": "25f8202",
        "summary": "Creates a bank transfer `TRANSACTION` record with its `BANK_TRANSFER` details, connecting an existing counterparty or creating a one-off external bank account for the sender and receiver. Called by other internal services (via internal JWT), not by client apps directly.",
        "models": [
          {
            "model": "Transaction",
            "service": "transaction-service"
          },
          {
            "model": "BankTransfer",
            "service": "transaction-service"
          },
          {
            "model": "Counterparty",
            "service": "transaction-service"
          },
          {
            "model": "BankAccount",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:createStripeTransaction",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "createStripeTransaction",
      "module": "createStripeTransaction",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "createTransactionSchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/createStripeTransaction.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/createStripeTransaction.mutation.ts#L7"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 43,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L43"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4fa12e7e",
      "interpretation": {
        "sig": "4fa12e7e",
        "summary": "Creates a `Transaction` record for a Stripe transfer (status `PENDING`) between a sender and receiver `Counterparty`, resolving each side by static ID, static firm mapping, or a one-off `Counterparty` that it creates in Stripe and Postgres if none exists yet.",
        "models": [
          {
            "model": "Transaction",
            "service": "transaction-service"
          },
          {
            "model": "Counterparty",
            "service": "transaction-service"
          },
          {
            "model": "FirmTransactionTypeCounterparty",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:createMOTOPayment",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "createMOTOPayment",
      "module": "createMOTOPayment",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "createMOTOPaymentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/createMOTOPayment.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/createMOTOPayment.mutation.ts#L5"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 44,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L44"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2b6c53e",
      "interpretation": {
        "sig": "2b6c53e",
        "summary": "Charges a card by phone (`MOTO`) for an existing `STRIPE_PAYMENT` transaction: creates and confirms a Stripe `PaymentIntent` for the sender's saved card, then upserts the `StripePayment` record to `COMPLETED` or `PENDING` based on the result. Rejects transactions that are already `COMPLETED` or `CANCELLED`, or whose sender has no Stripe customer ID.",
        "models": [
          {
            "model": "Transaction",
            "service": "transaction-service"
          },
          {
            "model": "StripePayment",
            "service": "transaction-service"
          },
          {
            "model": "Invoice",
            "service": "transaction-service"
          },
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:createStripeRefundTransaction",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "createStripeRefundTransaction",
      "module": "createStripeRefundTransaction",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateStripeRefundTransactionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/createStripeRefundTransaction.mutation.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/createStripeRefundTransaction.mutation.ts#L15"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 45,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L45"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4c0d8ebe",
      "interpretation": {
        "sig": "4c0d8ebe",
        "summary": "Creates a `REFUND` transaction against a completed original transaction, capped at its amount, and calls Stripe to issue the refund. The new transaction starts `PENDING` and its linked `stripeRefund` record flips to `FAILED` (with the transaction itself marked `FAILED`) if the Stripe call throws.",
        "models": [
          {
            "model": "Transaction",
            "service": "transaction-service"
          },
          {
            "model": "StripeRefund",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:backfillStripeRefundTransactionStripe",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "backfillStripeRefundTransactionStripe",
      "module": "backfillStripeRefundTransactionStripe",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/backfillStripeRefundTransaction.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/backfillStripeRefundTransaction.mutation.ts#L8"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 46,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L46"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ff2dabcb",
      "interpretation": {
        "sig": "ff2dabcb",
        "summary": "Backfills a `REFUND` transaction record for a Stripe payment that was already refunded outside this flow: finds the original `COMPLETED` transaction, and if no matching refund exists yet, creates a new `REFUND` transaction (`PENDING`) linked to it via a `StripeRefund` record. It does not call the Stripe API, it only reconciles the database to match a refund that already happened in Stripe.",
        "flags": [
          "deprecated (marked for removal with US payments flow)"
        ],
        "models": [
          {
            "model": "Transaction",
            "service": "transaction-service"
          },
          {
            "model": "StripeRefund",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:upsertFirmCounterparty",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "upsertFirmCounterparty",
      "module": "upsertFirmCounterparty",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "upsertFirmCounterpartySchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/upsertFirmCounterpartyInvoice.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/upsertFirmCounterpartyInvoice.mutation.ts#L7"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 47,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L47"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ade5bd8f",
      "interpretation": {
        "sig": "ade5bd8f",
        "summary": "Registers a firm's bank account for invoicing or bill payments: creates a new `BankAccount`, marks any prior `FirmTransactionTypeCounterparty` for that firm and transaction type `INACTIVE`, then creates the new `ACTIVE` `FirmTransactionTypeCounterparty` and a `Counterparty` record linked to the bank account. Determines `INTERNAL` vs `EXTERNAL` counterparty type by checking the firm ID against the configured Lawhive firm allowlist.",
        "models": [
          {
            "model": "BankAccount",
            "service": "transaction-service"
          },
          {
            "model": "FirmTransactionTypeCounterparty",
            "service": "transaction-service"
          },
          {
            "model": "Counterparty",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:getOrCreateFirmTransactionTypeCounterparty",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "getOrCreateFirmTransactionTypeCounterparty",
      "module": "getOrCreateFirmTransactionTypeCounterparty",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/getOrCreateFirmTransactionTypeCounterparty.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getOrCreateFirmTransactionTypeCounterparty.mutation.ts#L14"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 48,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L48"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "96602218",
      "interpretation": {
        "sig": "96602218",
        "summary": "Looks up the `ACTIVE` `FirmTransactionTypeCounterparty` for a firm and transaction type, and creates it (plus a `BankAccount` and a `Counterparty` row) if none exists yet, linking it to the given firm bank account. Concurrent calls for the same firm/transaction type are serialized with a Postgres advisory lock so only one pair gets created.",
        "models": [
          {
            "model": "FirmTransactionTypeCounterparty",
            "service": "transaction-service"
          },
          {
            "model": "Counterparty",
            "service": "transaction-service"
          },
          {
            "model": "BankAccount",
            "service": "transaction-service"
          }
        ],
        "flags": [
          "temporary-bridge"
        ]
      }
    },
    {
      "id": "transaction-service:deactivateFirmCounterparty",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "deactivateFirmCounterparty",
      "module": "deactivateFirmCounterparty",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "deactivateFirmCounterpartySchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/deactivateFirmCounterparty.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/deactivateFirmCounterparty.mutation.ts#L7"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 50,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L50"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "48bf2c38",
      "interpretation": {
        "sig": "48bf2c38",
        "summary": "Marks a firm's counterparty record for a given transaction type (`INVOICE` or `BILL`) as `INACTIVE`, directly in the database. Used internally to stop a firm from being used as a counterparty for that transaction type going forward.",
        "models": [
          {
            "model": "FirmTransactionTypeCounterparty",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:getFirmCounterparty",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "getFirmCounterparty",
      "module": "getFirmCounterparty",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/getFirmCounterparty.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 51,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L51"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1b35470a",
      "interpretation": {
        "sig": "1b35470a",
        "summary": "Looks up the active bank counterparty a firm uses for a given transaction type (e.g. legal fee, disbursement), including the counterparty's bank account details. Throws `NOT_FOUND` if no `ACTIVE` `FirmTransactionTypeCounterparty` record matches.",
        "models": [
          {
            "model": "FirmTransactionTypeCounterparty",
            "service": "transaction-service"
          },
          {
            "model": "Counterparty",
            "service": "transaction-service"
          },
          {
            "model": "BankAccount",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:getFirmCounterparties",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "getFirmCounterparties",
      "module": "getFirmCounterparties",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetFirmCounterpartiesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/getFirmCounterparties.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparties.query.ts#L5"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 52,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L52"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "af9df2fe",
      "interpretation": {
        "sig": "af9df2fe",
        "summary": "Looks up a firm's `ACTIVE` counterparties for a given transaction type, paginated, and returns each with its bank account details and the total count. Read-only.",
        "models": [
          {
            "model": "FirmTransactionTypeCounterparty",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:listFirmInvoiceCounterparties",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "listFirmInvoiceCounterparties",
      "module": "listFirmInvoiceCounterparties",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/listFirmInvoiceCounterparties.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/listFirmInvoiceCounterparties.query.ts#L6"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 53,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L53"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f7016e00",
      "interpretation": {
        "sig": "f7016e00",
        "summary": "For a list of firm IDs, returns each firm's active invoice counterparty (with its bank account details), the entity firm invoices get paid to or from. Read-only, no data changes.",
        "models": [
          {
            "model": "FirmTransactionTypeCounterparty",
            "service": "transaction-service"
          },
          {
            "model": "Counterparty",
            "service": "transaction-service"
          },
          {
            "model": "BankAccount",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:getTransaction",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "getTransaction",
      "module": "getTransaction",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetTransactionQueryInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/getTransaction.query.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getTransaction.query.ts#L31"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 54,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L54"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "45d550f6",
      "interpretation": {
        "sig": "45d550f6",
        "summary": "Looks up a single `Transaction` by id or by Stripe payment intent id, optionally filtered by transaction type, and returns it with its sender, receiver, bank transfer, and Stripe payment details.",
        "models": [
          {
            "model": "Transaction",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:listTransactions",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "listTransactions",
      "module": "listTransactions",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/listTransactions.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/listTransactions.query.ts#L7"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 55,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L55"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "74be05b6",
      "interpretation": {
        "sig": "74be05b6",
        "summary": "Looks up `Transaction` records by any combination of transaction IDs, original transaction IDs, transaction types, or Stripe payment intent IDs, returning each transaction with its Stripe payment, Stripe refund, sender bank account, and receiver details attached.",
        "models": [
          {
            "model": "Transaction",
            "service": "transaction-service"
          },
          {
            "model": "StripePayment",
            "service": "transaction-service"
          },
          {
            "model": "StripeRefund",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:updateTransaction",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "updateTransaction",
      "module": "updateTransaction",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateTransactionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/updateTransaction.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/updateTransaction.mutation.ts#L14"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 56,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L56"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "bfbabb52",
      "interpretation": {
        "sig": "bfbabb52",
        "summary": "Updates any subset of fields on an existing `Transaction` record by id, writing directly to the database, and 404s if the transaction doesn't exist. Called service-to-service, not from client apps.",
        "models": [
          {
            "model": "Transaction",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:listCounterparties",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "listCounterparties",
      "module": "listCounterparties",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListCounterpartiesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/listCounterparties.query.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/listCounterparties.query.ts#L13"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 57,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L57"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "90b5165e",
      "interpretation": {
        "sig": "90b5165e",
        "summary": "Looks up `Counterparty` records by a list of IDs and returns them, for other services fetching counterparty details in bulk. Read-only, no product state changes.",
        "models": [
          {
            "model": "Counterparty",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:updateCounterparty",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "updateCounterparty",
      "module": "updateCounterparty",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateCounterpartyInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/updateCounterparty.mutation.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/updateCounterparty.mutation.ts#L20"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 58,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L58"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "60a30074",
      "interpretation": {
        "sig": "60a30074",
        "summary": "Updates a `Counterparty` record's contact and ownership fields (name, email, company, owner id/type) directly in the database, given its id. Called service-to-service, not from client apps.",
        "models": [
          {
            "model": "Counterparty",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:getStripeCharge",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "getStripeCharge",
      "module": "getStripeCharge",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetStripeChargeInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/getStripeCharge.query.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getStripeCharge.query.ts#L13"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 59,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L59"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "58fe6bf0",
      "interpretation": {
        "sig": "58fe6bf0",
        "summary": "Looks up a Stripe charge by payment intent ID and market, and returns it as-is. Nothing calls this procedure right now.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "transaction-service:createClientStripeCheckoutURL",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "createClientStripeCheckoutURL",
      "module": "createClientStripeCheckoutURL",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "createStripeCheckoutURLInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/createClientStripeCheckoutURL.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/createClientStripeCheckoutURL.mutation.ts#L5"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 60,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L60"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5bd503a2",
      "interpretation": {
        "sig": "5bd503a2",
        "summary": "Creates a Stripe Checkout session for a pending `STRIPE_PAYMENT` transaction and returns the checkout URL, storing the session ID, URL, and payment intent on the transaction's `StripePayment` record (creating one if it does not exist yet).",
        "models": [
          {
            "model": "Transaction",
            "service": "transaction-service"
          },
          {
            "model": "StripePayment",
            "service": "transaction-service"
          },
          {
            "model": "Invoice",
            "service": "transaction-service"
          },
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:listInvoiceReceipts",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "listInvoiceReceipts",
      "module": "listInvoiceReceipts",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListInvoiceReceiptsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/listInvoiceReceipts.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/listInvoiceReceipts.query.ts#L5"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 61,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L61"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e561b4e6",
      "interpretation": {
        "sig": "e561b4e6",
        "summary": "Lists invoice-type `Transaction`s with pagination, letting callers filter by firm, transaction ID, bank reference, amount range, or transaction status. Returns the matching transactions (with bank transfer and receiver details) plus a total count for pagination.",
        "models": [
          {
            "model": "Transaction",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:cancelStripeTransaction",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "cancelStripeTransaction",
      "module": "cancelStripeTransaction",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/cancelStripeTransaction.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/cancelStripeTransaction.mutation.ts#L5"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 62,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L62"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "83748366",
      "interpretation": {
        "sig": "83748366",
        "summary": "Cancels a transaction's Stripe payment: expires the Stripe checkout session (skipped for `MOTO` payments with no session), then sets the `Transaction` to `CANCELLED` and its `StripePayment` to `CANCELLED`.",
        "models": [
          {
            "model": "Transaction",
            "service": "transaction-service"
          },
          {
            "model": "StripePayment",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:updateStripePayment",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "updateStripePayment",
      "module": "updateStripePayment",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateStripePaymentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/updateStripePayment.mutation.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/updateStripePayment.mutation.ts#L17"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 63,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L63"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "d0d025d4",
      "interpretation": {
        "sig": "d0d025d4",
        "summary": "Updates a `StripePayment` record's status and checkout session details directly in the DB, given its `id` (404s if not found). No other service or app calls this procedure.",
        "models": [
          {
            "model": "StripePayment",
            "service": "transaction-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "transaction-service:updateStripeTransaction",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "updateStripeTransaction",
      "module": "updateStripeTransaction",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateStripeTransactionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/updateStripeTransaction.mutation.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/updateStripeTransaction.mutation.ts#L20"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 64,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L64"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4e13c688",
      "interpretation": {
        "sig": "4e13c688",
        "summary": "Updates an existing `Transaction`'s amount, description, currency, sender and/or receiver. If the transaction still has an open Stripe checkout session, it expires that session first, then resolves or creates the sender/receiver `Counterparty` records via Stripe (creating a new Stripe customer for one-off counterparties) before saving the changes.",
        "models": [
          {
            "model": "Transaction",
            "service": "transaction-service"
          },
          {
            "model": "StripePayment",
            "service": "transaction-service"
          },
          {
            "model": "Counterparty",
            "service": "transaction-service"
          },
          {
            "model": "FirmTransactionTypeCounterparty",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:recordStripeRefundForTransaction",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "recordStripeRefundForTransaction",
      "module": "recordStripeRefundForTransaction",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "RecordStripeRefundForTransactionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/recordStripeRefundForTransaction.mutation.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/recordStripeRefundForTransaction.mutation.ts#L17"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 65,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L65"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "8c6338c",
      "interpretation": {
        "sig": "8c6338c",
        "summary": "Marks a `Transaction` and its linked `StripeRefund` as `COMPLETED` after confirming the Stripe charge exists, and records the refund's card last4 and receipt URL. Called internally to close out a transaction once its Stripe refund has actually gone through.",
        "models": [
          {
            "model": "Transaction",
            "service": "transaction-service"
          },
          {
            "model": "StripeRefund",
            "service": "transaction-service"
          }
        ],
        "flags": [
          "marked for removal in source comment"
        ]
      }
    },
    {
      "id": "transaction-service:getIdentityCounterparty",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "getIdentityCounterparty",
      "module": "getIdentityCounterparty",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/getIdentityCounterparty.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getIdentityCounterparty.query.ts#L7"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 66,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L66"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "c3cd00f6",
      "interpretation": {
        "sig": "c3cd00f6",
        "summary": "Looks up the `Counterparty` record for a given identity and account type (`BANK` or `STRIPE`), returning that person's existing payment counterparty or a `NOT_FOUND` error if none is set up.",
        "models": [
          {
            "model": "Counterparty",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:getStripeCounterparty",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "getStripeCounterparty",
      "module": "getStripeCounterparty",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/getStripeCounterparty.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getStripeCounterparty.query.ts#L6"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 67,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L67"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "866046f8",
      "interpretation": {
        "sig": "866046f8",
        "summary": "Looks up the most recent `Counterparty` record linked to a given Stripe customer ID. Throws if none exists, so callers use it to resolve which counterparty (payer/payee) a Stripe customer maps to.",
        "models": [
          {
            "model": "Counterparty",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:updateStripePaymentByIntentId",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "updateStripePaymentByIntentId",
      "module": "updateStripePaymentByIntentId",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateStripePaymentByIntentIdInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/updateStripePaymentByIntentId.mutation.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/updateStripePaymentByIntentId.mutation.ts#L17"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 68,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L68"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "c8640cb0",
      "interpretation": {
        "sig": "c8640cb0",
        "summary": "Looks up a `StripePayment` record, fetches the matching charge from Stripe by payment intent ID, and updates the record's payment status, intent ID, checkout session ID, last 4 digits, and receipt URL. Nothing in the codebase currently calls it.",
        "models": [
          {
            "model": "StripePayment",
            "service": "transaction-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "transaction-service:getStripeCustomer",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "getStripeCustomer",
      "module": "getStripeCustomer",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetStripeCustomerInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/getStripeCustomer.query.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getStripeCustomer.query.ts#L15"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 69,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L69"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "fe153e64",
      "interpretation": {
        "sig": "fe153e64",
        "summary": "Looks up a customer's Stripe record by `customerId` and `market`, and returns the raw Stripe customer object. Read-only: no data is changed in Lawhive or Stripe.",
        "models": [],
        "flags": []
      }
    },
    {
      "id": "transaction-service:getOrCreateExternalCounterparty",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "getOrCreateExternalCounterparty",
      "module": "getOrCreateExternalCounterparty",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetOrCreateExternalCounterpartyInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/getOrCreateExternalCounterparty.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getOrCreateExternalCounterparty.mutation.ts#L5"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 70,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L70"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9ee427c4",
      "interpretation": {
        "sig": "9ee427c4",
        "summary": "Looks up an external `Counterparty` by owner, market, and bank account details, and returns it if found; otherwise creates a new `BankAccount` and `Counterparty` (marked `EXTERNAL`) and returns that instead.",
        "models": [
          {
            "model": "Counterparty",
            "service": "transaction-service"
          },
          {
            "model": "BankAccount",
            "service": "transaction-service"
          }
        ],
        "flags": [
          "get-or-create"
        ]
      }
    },
    {
      "id": "transaction-service:getOrCreateStripeCounterparty",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "getOrCreateStripeCounterparty",
      "module": "getOrCreateStripeCounterparty",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "stripeCounterpartySchema",
      "hasOutput": false,
      "location": {
        "file": "services/transaction-service/src/procedures/getOrCreateStripeCounterparty.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getOrCreateStripeCounterparty.mutation.ts#L5"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 71,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L71"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ec176110",
      "interpretation": {
        "sig": "ec176110",
        "summary": "Resolves a Stripe counterparty for a payment: looks up an existing `Counterparty` by static ID, by firm's active `FirmTransactionTypeCounterparty`, or by owner for one-off cases, and only creates a new Stripe customer and `Counterparty` row (`accountType` `STRIPE`) when no match exists for the one-off case.",
        "flags": [
          "read-that-writes"
        ],
        "models": [
          {
            "model": "Counterparty",
            "service": "transaction-service"
          },
          {
            "model": "FirmTransactionTypeCounterparty",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:getCounterparty",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "getCounterparty",
      "module": "getCounterparty",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "services/transaction-service/src/procedures/getCounterparty.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getCounterparty.query.ts#L9"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 72,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L72"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6b888542",
      "interpretation": {
        "sig": "6b888542",
        "summary": "Looks up a single `Counterparty` by ID and returns it with its `staticOwner` relation, used to resolve the firm bank account (FBA) tag for a counterparty. Read-only, called by other services over the internal JWT, not by client apps.",
        "models": [
          {
            "model": "Counterparty",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "transaction-service:calculateTotal",
      "api": "transaction-service",
      "origin": "transaction-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "transactionRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "calculateTotal",
      "module": "calculateTotal",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "priceInstructionSchema",
      "hasOutput": true,
      "location": {
        "file": "services/transaction-service/src/procedures/calculateTotal.query.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/calculateTotal.query.ts#L10"
      },
      "router": {
        "file": "services/transaction-service/src/router.ts",
        "line": 73,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/router.ts#L73"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "fd31622a",
      "interpretation": {
        "sig": "fd31622a",
        "summary": "Given a list of fee and disbursement line items, returns the computed subtotal, tax and total for a quote or invoice, without saving anything. UK items get a flat 20% VAT on fees (disbursements are tax-free); US items are tax-free until Lawhive registers to collect state tax.",
        "flags": [
          "read-only",
          "pure calculation, no persistence"
        ]
      }
    },
    {
      "id": "work-service:quote.getQuote",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "quote.getQuote",
      "module": "quote",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/quote/procedures/getQuote.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuote.query.ts#L6"
      },
      "router": {
        "file": "services/work-service/src/quote/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/router.ts#L21"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4c842162",
      "interpretation": {
        "sig": "4c842162",
        "summary": "Fetches a quote by id with its fee agreements, scopes, signatures and payables/bills, and derives its status (`DRAFT`/`PENDING`/`ACTIVE`/`EXPIRED`/`COMPLETED`/`CANCELLED`), whether it's a marketplace quote, and whether it's in a terminal state. Only cancelled fee agreements are filtered out of the response unless the quote itself is cancelled.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:quote.getQuoteLSA",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "quote.getQuoteLSA",
      "module": "quote",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetQuoteLSAInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/quote/procedures/getQuoteLSA.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuoteLSA.query.ts#L5"
      },
      "router": {
        "file": "services/work-service/src/quote/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/router.ts#L22"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "332a0e3e",
      "interpretation": {
        "sig": "332a0e3e",
        "summary": "Loads a quote's fee agreements plus the given assignment, firm and signer data, then builds the Limited Scope Representation Agreement (LSA) legal document content for each firm on the quote (throws if a firm or signer can't be matched to a fee agreement).",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:quote.generateLsaContent",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "quote.generateLsaContent",
      "module": "quote",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GenerateLsaContentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/quote/procedures/generateLsaContent.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/generateLsaContent.query.ts#L5"
      },
      "router": {
        "file": "services/work-service/src/quote/router.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/router.ts#L23"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "735ec75e",
      "interpretation": {
        "sig": "735ec75e",
        "summary": "Takes already-assembled fee agreement data (with firm and signature info) and generates the structured LSA document content per firm: title, fee split text, included/excluded services lists, and signature blocks. Pure content generation, no DB access despite being registered as a query."
      }
    },
    {
      "id": "work-service:quote.getClientQuote",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "quote.getClientQuote",
      "module": "quote",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/quote/procedures/getClientQuote.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getClientQuote.query.ts#L6"
      },
      "router": {
        "file": "services/work-service/src/quote/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/router.ts#L24"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2887bc20",
      "interpretation": {
        "sig": "2887bc20",
        "summary": "Returns a client-facing view of a quote: status, combined product description, grouped fee agreements, and the single bill (with its line items and currency) tied to it. Throws if the quote has no active fee agreements, no payables, no bill, or more than one bill.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          },
          {
            "model": "Bill",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:quote.getQuotesByLeadId",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "quote.getQuotesByLeadId",
      "module": "quote",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/quote/procedures/getQuotesByLeadId.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuotesByLeadId.query.ts#L6"
      },
      "router": {
        "file": "services/work-service/src/quote/router.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/router.ts#L25"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ae23e006",
      "interpretation": {
        "sig": "ae23e006",
        "summary": "Lists all quotes for a given lead, newest first, with their fee agreements, payables and scopes attached.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:quote.create",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "quote.create",
      "module": "quote",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateQuoteInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/quote/procedures/createQuote.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/createQuote.mutation.ts#L5"
      },
      "router": {
        "file": "services/work-service/src/quote/router.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/router.ts#L26"
      },
      "hops": {
        "direct": 3,
        "services": [
          "assignment-service",
          "product-service",
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "assignment-service",
            "path": "feePlan.getCurrent",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:feePlan.getCurrent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/feePlan/procedures/getCurrentFeePlan.query.ts#L13",
            "domain": "deal"
          },
          {
            "service": "product-service",
            "path": "products.listProducts",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:products.listProducts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listProducts.query.ts#L5",
            "domain": null
          },
          {
            "service": "transaction-service",
            "path": "tax.calculateItemsTax",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:tax.calculateItemsTax",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/tax/procedures/calculateItemsTax.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "assignment-service",
            "path": "createAssignments",
            "kind": "write",
            "inferred": false,
            "targetId": "assignment-service:createAssignments",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/createAssignments.mutation.ts#L8",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "getOrCreateStripeCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:getOrCreateStripeCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getOrCreateStripeCounterparty.mutation.ts#L5",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "createStripeTransaction",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:createStripeTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/createStripeTransaction.mutation.ts#L7",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "invoice.create",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:invoice.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/createInvoice.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.create",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/createTransactionIntent.mutation.ts#L8",
            "domain": "money"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e2d4ede1",
      "interpretation": {
        "sig": "e2d4ede1",
        "summary": "Creates a new quote and its fee agreements in `ACTIVE` status, then wires up the financial side: assigns the lawyer/firm to the fee agreements, creates a Stripe counterparty and transaction, and creates the invoice and transaction intent for payment. Fee shares are enriched from the `assignment-service` and `product-service` before the write.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:quote.createDraft",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "quote.createDraft",
      "module": "quote",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateDraftQuoteInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/quote/procedures/createDraftQuote.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/createDraftQuote.mutation.ts#L5"
      },
      "router": {
        "file": "services/work-service/src/quote/router.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/router.ts#L27"
      },
      "hops": {
        "direct": 3,
        "services": [
          "assignment-service",
          "product-service",
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "assignment-service",
            "path": "feePlan.getCurrent",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:feePlan.getCurrent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/feePlan/procedures/getCurrentFeePlan.query.ts#L13",
            "domain": "deal"
          },
          {
            "service": "product-service",
            "path": "products.listProducts",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:products.listProducts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listProducts.query.ts#L5",
            "domain": null
          },
          {
            "service": "transaction-service",
            "path": "tax.calculateItemsTax",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:tax.calculateItemsTax",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/tax/procedures/calculateItemsTax.query.ts#L8",
            "domain": "money"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4c2ddf04",
      "interpretation": {
        "sig": "4c2ddf04",
        "summary": "Creates a quote in `DRAFT` status with its fee agreements, storing the assigned lawyer/firm in quote metadata rather than creating real assignments. No payment or invoice is created at this stage.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:quote.updateDraft",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "quote.updateDraft",
      "module": "quote",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateDraftQuoteInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/quote/procedures/updateDraftQuote.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/updateDraftQuote.mutation.ts#L5"
      },
      "router": {
        "file": "services/work-service/src/quote/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/router.ts#L28"
      },
      "hops": {
        "direct": 2,
        "services": [
          "assignment-service",
          "product-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "assignment-service",
            "path": "feePlan.getCurrent",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:feePlan.getCurrent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/feePlan/procedures/getCurrentFeePlan.query.ts#L13",
            "domain": "deal"
          },
          {
            "service": "product-service",
            "path": "products.listProducts",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:products.listProducts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listProducts.query.ts#L5",
            "domain": null
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "98103cbe",
      "interpretation": {
        "sig": "98103cbe",
        "summary": "Updates a `DRAFT` quote's fields and, if fee agreements are supplied, replaces its fee agreements, scopes and payables. Rejects the call if the quote is no longer a draft.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:quote.sendDraft",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "quote.sendDraft",
      "module": "quote",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal auth)",
        "kind": "internal",
        "builder": "protectedIdentityProcedure",
        "base": "protectedIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "SendDraftQuoteInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/quote/procedures/sendDraftQuote.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/sendDraftQuote.mutation.ts#L5"
      },
      "router": {
        "file": "services/work-service/src/quote/router.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/router.ts#L29"
      },
      "hops": {
        "direct": 2,
        "services": [
          "assignment-service",
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "assignment-service",
            "path": "createAssignments",
            "kind": "write",
            "inferred": false,
            "targetId": "assignment-service:createAssignments",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/createAssignments.mutation.ts#L8",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "getOrCreateStripeCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:getOrCreateStripeCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getOrCreateStripeCounterparty.mutation.ts#L5",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "createStripeTransaction",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:createStripeTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/createStripeTransaction.mutation.ts#L7",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "invoice.create",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:invoice.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/createInvoice.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.create",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/createTransactionIntent.mutation.ts#L8",
            "domain": "money"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1c6a555b",
      "interpretation": {
        "sig": "1c6a555b",
        "summary": "Sends a `DRAFT` quote to the client: verifies it has active fee agreements, computes total amount and currency, then creates the Stripe counterparty, transaction, invoice and transaction intent and moves the quote to `ACTIVE`.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:quote.update",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "quote.update",
      "module": "quote",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateQuoteMutationInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/quote/procedures/updateQuote.mutation.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/updateQuote.mutation.ts#L15"
      },
      "router": {
        "file": "services/work-service/src/quote/router.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/router.ts#L30"
      },
      "hops": {
        "direct": 3,
        "services": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "getOrCreateStripeCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:getOrCreateStripeCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getOrCreateStripeCounterparty.mutation.ts#L5",
            "domain": "money"
          },
          {
            "service": "assignment-service",
            "path": "feePlan.getCurrent",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:feePlan.getCurrent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/feePlan/procedures/getCurrentFeePlan.query.ts#L13",
            "domain": "deal"
          },
          {
            "service": "product-service",
            "path": "products.listProducts",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:products.listProducts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listProducts.query.ts#L5",
            "domain": null
          },
          {
            "service": "assignment-service",
            "path": "createAssignments",
            "kind": "write",
            "inferred": false,
            "targetId": "assignment-service:createAssignments",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/createAssignments.mutation.ts#L8",
            "domain": "deal"
          },
          {
            "service": "assignment-service",
            "path": "deleteAssignments",
            "kind": "write",
            "inferred": false,
            "targetId": "assignment-service:deleteAssignments",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/deleteAssignments.mutation.ts#L24",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "updateStripeTransaction",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:updateStripeTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/updateStripeTransaction.mutation.ts#L20",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "invoice.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:invoice.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/listInvoices.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "invoice.set",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:invoice.set",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/setInvoice.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.set",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.set",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/setTransactionIntent.mutation.ts#L8",
            "domain": "money"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "8e8a6e95",
      "interpretation": {
        "sig": "8e8a6e95",
        "summary": "Updates an existing quote's fee agreements, bill and bill items, then propagates the changes downstream: re-creates/deletes assignments, updates the Stripe transaction, invoice and transaction intent to match the new total. Blocked for quotes already `COMPLETED` or `CANCELLED`.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          },
          {
            "model": "Bill",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:quote.updateNotes",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "quote.updateNotes",
      "module": "quote",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateQuoteNotesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/quote/procedures/updateQuoteNotes.mutation.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/updateQuoteNotes.mutation.ts#L13"
      },
      "router": {
        "file": "services/work-service/src/quote/router.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/router.ts#L31"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a330ab24",
      "interpretation": {
        "sig": "a330ab24",
        "summary": "Overwrites a quote's description field (used as internal notes) and records who made the change.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:quote.cancelQuote",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "quote.cancelQuote",
      "module": "quote",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/quote/procedures/cancelQuote.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/cancelQuote.mutation.ts#L5"
      },
      "router": {
        "file": "services/work-service/src/quote/router.ts",
        "line": 32,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/router.ts#L32"
      },
      "hops": {
        "direct": 2,
        "services": [
          "transaction-service",
          "assignment-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "cancelStripeTransaction",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:cancelStripeTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/cancelStripeTransaction.mutation.ts#L5",
            "domain": "money"
          },
          {
            "service": "assignment-service",
            "path": "updateAssignments",
            "kind": "write",
            "inferred": false,
            "targetId": "assignment-service:updateAssignments",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/updateAssignments.mutation.ts#L21",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [
        "work-service/quote.cancelled"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6ad2caa4",
      "interpretation": {
        "sig": "6ad2caa4",
        "summary": "Cancels a quote: blocks cancellation if any of its bills are already `PAID`, cancels pending fee agreements and their bills, marks assignments `CANCELLED`, sets the quote to `CANCELLED`, and publishes `work-service/quote.cancelled`. Already-cancelled quotes return true as a no-op.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          },
          {
            "model": "Bill",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:quote.listQuotesByMatterId",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "quote.listQuotesByMatterId",
      "module": "quote",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/quote/procedures/listQuotesByMatterId.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/listQuotesByMatterId.query.ts#L6"
      },
      "router": {
        "file": "services/work-service/src/quote/router.ts",
        "line": 33,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/router.ts#L33"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "fe780376",
      "interpretation": {
        "sig": "fe780376",
        "summary": "Lists a matter's quotes, optionally only those created before a given datetime, with fee agreements, payables and scopes attached.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:quote.createQuoteCheckoutURL",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "quote.createQuoteCheckoutURL",
      "module": "quote",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/quote/procedures/createQuoteCheckoutURL.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/createQuoteCheckoutURL.mutation.ts#L5"
      },
      "router": {
        "file": "services/work-service/src/quote/router.ts",
        "line": 34,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/router.ts#L34"
      },
      "hops": {
        "direct": 1,
        "services": [
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "createClientStripeCheckoutURL",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:createClientStripeCheckoutURL",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/createClientStripeCheckoutURL.mutation.ts#L5",
            "domain": "money"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5ec0a862",
      "interpretation": {
        "sig": "5ec0a862",
        "summary": "For an `ACTIVE` quote, finds the unpaid, still-open fee agreements' payables and requests a Stripe client checkout URL from `transaction-service` for their single associated transaction. Throws if there are no unpaid payables or if they span more than one transaction.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:quote.getFeeAgreementFeeShare",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "quote.getFeeAgreementFeeShare",
      "module": "quote",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetFeeAgreementsFeeShareInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/work-service/src/quote/procedures/getFeeAgreementsFeeShare.query.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getFeeAgreementsFeeShare.query.ts#L29"
      },
      "router": {
        "file": "services/work-service/src/quote/router.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/router.ts#L35"
      },
      "hops": {
        "direct": 2,
        "services": [
          "assignment-service",
          "product-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "assignment-service",
            "path": "feePlan.getCurrent",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:feePlan.getCurrent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/feePlan/procedures/getCurrentFeePlan.query.ts#L13",
            "domain": "deal"
          },
          {
            "service": "product-service",
            "path": "products.listProducts",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:products.listProducts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listProducts.query.ts#L5",
            "domain": null
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "7f0fe58d",
      "interpretation": {
        "sig": "7f0fe58d",
        "summary": "Looks up the Lawhive/firm fee split percentage for a firm and optional product, sourced from either the firm's fee plan or the product config. Nothing in the codebase calls it, so it looks unused despite being wired up.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "work-service:quote.admin.search",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "quote.admin.search",
      "module": "quote",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "SearchQuoteInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/quote/procedures/searchQuotes.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/searchQuotes.query.ts#L4"
      },
      "router": {
        "file": "services/work-service/src/quote/router.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/router.ts#L37"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "6436d6e2",
      "interpretation": {
        "sig": "6436d6e2",
        "summary": "Admin search for quotes: only matches when the query string looks like a quote id (starts with `quot_`), returning matching quote records. Any other query returns nothing.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:quote.admin.list",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "quote.admin.list",
      "module": "quote",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListQuotesSchema",
      "hasOutput": true,
      "location": {
        "file": "services/work-service/src/quote/procedures/listQuotes.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/listQuotes.query.ts#L8"
      },
      "router": {
        "file": "services/work-service/src/quote/router.ts",
        "line": 38,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/router.ts#L38"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b54e316a",
      "interpretation": {
        "sig": "b54e316a",
        "summary": "Lists quotes with filters (by matter, lead, status, jurisdiction, market) and pagination, returning each quote with its visible fee agreements, total cost, and currency computed from those fee agreements.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:quote.admin.validateIntegrity",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "quote.admin.validateIntegrity",
      "module": "quote",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "services/work-service/src/quote/procedures/validateIntegrity.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/validateIntegrity.query.ts#L6"
      },
      "router": {
        "file": "services/work-service/src/quote/router.ts",
        "line": 39,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/router.ts#L39"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "dfc7d9e3",
      "interpretation": {
        "sig": "dfc7d9e3",
        "summary": "Finds quotes created since a given date that are marked `COMPLETED` but have no `matterId`, i.e. an integrity check surfacing quotes that should have converted to a matter and didn't.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:invoice.cancelMany",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "invoice.cancelMany",
      "module": "invoice",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CancelManyInvoicesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/invoice/procedures/cancelManyInvoices.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/cancelManyInvoices.mutation.ts#L5"
      },
      "router": {
        "file": "services/work-service/src/invoice/router.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/router.ts#L9"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e1979a2e",
      "interpretation": {
        "sig": "e1979a2e",
        "summary": "Cancels a batch of invoices by ID, marking each `CANCELLED`, but only if every invoice exists and is currently `DRAFT` or `UNPAID`; otherwise it rejects the whole batch with no changes made.",
        "models": [
          {
            "model": "Invoice",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:invoice.getInvoice",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "invoice.getInvoice",
      "module": "invoice",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/invoice/procedures/getInvoice.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/getInvoice.query.ts#L6"
      },
      "router": {
        "file": "services/work-service/src/invoice/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/router.ts#L10"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "78fb7854",
      "interpretation": {
        "sig": "78fb7854",
        "summary": "Looks up a single invoice by ID with its line items and each item's payable, and throws if the invoice does not exist.",
        "models": [
          {
            "model": "Invoice",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:invoice.list",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "invoice.list",
      "module": "invoice",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListInvoicesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/invoice/procedures/listInvoices.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/listInvoices.query.ts#L5"
      },
      "router": {
        "file": "services/work-service/src/invoice/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/router.ts#L11"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5e55f072",
      "interpretation": {
        "sig": "5e55f072",
        "summary": "Lists invoices with pagination and sorting, filterable by status, amount range, matter, invoice ID, firm, transaction, or created-date range, and returns the matching page plus the total count.",
        "models": [
          {
            "model": "Invoice",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:invoice.updateInvoice",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "invoice.updateInvoice",
      "module": "invoice",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateInvoiceInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/invoice/procedures/updateInvoice.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/updateInvoice.mutation.ts#L5"
      },
      "router": {
        "file": "services/work-service/src/invoice/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/router.ts#L12"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "eae067de",
      "interpretation": {
        "sig": "eae067de",
        "summary": "Updates an invoice's fields directly (including its status) with no validation on the transition, so a caller can move an invoice into any state.",
        "models": [
          {
            "model": "Invoice",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:invoice.updateManyInvoicesAsPaid",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "invoice.updateManyInvoicesAsPaid",
      "module": "invoice",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/invoice/procedures/updateManyInvoicesAsPaid.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/updateManyInvoicesAsPaid.mutation.ts#L6"
      },
      "router": {
        "file": "services/work-service/src/invoice/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/router.ts#L13"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "13a43e0",
      "interpretation": {
        "sig": "13a43e0",
        "summary": "Marks a batch of invoices `PAID` and stamps them with the given `transactionId`, regardless of their prior status.",
        "models": [
          {
            "model": "Invoice",
            "service": "work-service"
          }
        ],
        "flags": [
          "no-status-guard"
        ]
      }
    },
    {
      "id": "work-service:invoice.updateManyInvoices",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "invoice.updateManyInvoices",
      "module": "invoice",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateManyInvoicesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/invoice/procedures/updateManyInvoices.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/updateManyInvoices.mutation.ts#L5"
      },
      "router": {
        "file": "services/work-service/src/invoice/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/router.ts#L14"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2a2253b8",
      "interpretation": {
        "sig": "2a2253b8",
        "summary": "Applies the same field update to a batch of invoices by ID (a generic bulk edit, e.g. changing status or due date across all of them at once).",
        "models": [
          {
            "model": "Invoice",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:scope.listScopesForFeeAgreement",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "scope.listScopesForFeeAgreement",
      "module": "scope",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/scope/router.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/scope/router.ts#L5"
      },
      "router": {
        "file": "services/work-service/src/scope/router.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/scope/router.ts#L5"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "111f9b88",
      "interpretation": {
        "sig": "111f9b88",
        "summary": "Returns the `Scope` records (inclusions and exclusions) attached to a given fee agreement, for showing what work is in or out of scope on a quote or deal.",
        "models": [
          {
            "model": "Scope",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:scope.listScopes",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "scope.listScopes",
      "module": "scope",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/scope/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/scope/router.ts#L14"
      },
      "router": {
        "file": "services/work-service/src/scope/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/scope/router.ts#L14"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "3f660efb",
      "interpretation": {
        "sig": "3f660efb",
        "summary": "Looks up `Scope` records by a list of scope IDs, optionally filtered to `INCLUSION` or `EXCLUSION` type.",
        "models": [
          {
            "model": "Scope",
            "service": "work-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "work-service:feeAgreement.getFeeAgreement",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "feeAgreement.getFeeAgreement",
      "module": "feeAgreement",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/feeAgreement/procedures/getFeeAgreement.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/getFeeAgreement.query.ts#L5"
      },
      "router": {
        "file": "services/work-service/src/feeAgreement/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/router.ts#L17"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "57619576",
      "interpretation": {
        "sig": "57619576",
        "summary": "Fetches a single fee agreement by ID with its scopes, payables, and signatures, or throws `NOT_FOUND` if it does not exist.",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:feeAgreement.listMatterFeeAgreements",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "feeAgreement.listMatterFeeAgreements",
      "module": "feeAgreement",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/feeAgreement/procedures/listMatterFeeAgreements.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterFeeAgreements.query.ts#L6"
      },
      "router": {
        "file": "services/work-service/src/feeAgreement/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/router.ts#L18"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3ab9917a",
      "interpretation": {
        "sig": "3ab9917a",
        "summary": "Lists all fee agreements on a matter (with scopes and payables/bill items), optionally filtered to only the active ones (`IN_PROGRESS`, `PENDING`, `PROPOSED`).",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:feeAgreement.listMatterQuotes",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "feeAgreement.listMatterQuotes",
      "module": "feeAgreement",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/feeAgreement/procedures/listMatterQuotes.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterQuotes.query.ts#L6"
      },
      "router": {
        "file": "services/work-service/src/feeAgreement/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/router.ts#L19"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "fd7296fa",
      "interpretation": {
        "sig": "fd7296fa",
        "summary": "Lists quotes for a matter, each with its fee agreements, filtering the fee agreements shown so cancelled ones are hidden unless a quote has no other active fee agreement or is itself `CANCELLED`.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:feeAgreement.listMatterIncompleteFeeAgreements",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "feeAgreement.listMatterIncompleteFeeAgreements",
      "module": "feeAgreement",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/feeAgreement/procedures/listMatterIncompleteFeeAgreements.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterIncompleteFeeAgreements.query.ts#L6"
      },
      "router": {
        "file": "services/work-service/src/feeAgreement/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/router.ts#L20"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "eafb177a",
      "interpretation": {
        "sig": "eafb177a",
        "summary": "Lists a matter's fee agreements still in `PENDING`, `IN_PROGRESS`, or `PROPOSED` status, i.e. the ones not yet completed or cancelled.",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:feeAgreement.listBillFeeAgreements",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "feeAgreement.listBillFeeAgreements",
      "module": "feeAgreement",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListBillFeeAgreementsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/feeAgreement/procedures/listBillFeeAgreements.query.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listBillFeeAgreements.query.ts#L19"
      },
      "router": {
        "file": "services/work-service/src/feeAgreement/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/router.ts#L21"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f880a2a2",
      "interpretation": {
        "sig": "f880a2a2",
        "summary": "Given bill item IDs or a bill ID, finds the linked payables and returns the fee agreements those payables belong to, with quote, scopes, and payables included.",
        "models": [
          {
            "model": "BillItem",
            "service": "work-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:feeAgreement.listFeeAgreements",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "feeAgreement.listFeeAgreements",
      "module": "feeAgreement",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/feeAgreement/procedures/listFeeAgreements.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listFeeAgreements.query.ts#L5"
      },
      "router": {
        "file": "services/work-service/src/feeAgreement/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/router.ts#L22"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "8a6c82d4",
      "interpretation": {
        "sig": "8a6c82d4",
        "summary": "Fetches fee agreements by ID and adds a computed total and currency to each, derived from their payables.",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:feeAgreement.completeFeeAgreements",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "feeAgreement.completeFeeAgreements",
      "module": "feeAgreement",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CompleteFeeAgreementsInput",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/feeAgreement/procedures/completeFeeAgreements.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/completeFeeAgreements.mutation.ts#L5"
      },
      "router": {
        "file": "services/work-service/src/feeAgreement/router.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/router.ts#L23"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "74b5ad7c",
      "interpretation": {
        "sig": "74b5ad7c",
        "summary": "Marks matching `IN_PROGRESS` fee agreements `COMPLETED` and, in the same transaction, creates a `DRAFT` invoice per fee agreement built from its payables (amount net of the Lawhive percent).",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          },
          {
            "model": "Invoice",
            "service": "work-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "work-service:feeAgreement.completeMatterFeeAgreements",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "feeAgreement.completeMatterFeeAgreements",
      "module": "feeAgreement",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CompleteMatterFeeAgreementsInput",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/feeAgreement/procedures/completeMatterFeeAgreements.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/completeMatterFeeAgreements.mutation.ts#L5"
      },
      "router": {
        "file": "services/work-service/src/feeAgreement/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/router.ts#L24"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "eea936de",
      "interpretation": {
        "sig": "eea936de",
        "summary": "For a set of matters, completes their `PENDING`/`IN_PROGRESS` fee agreements (rejecting the whole batch if any is still `PENDING`) by delegating to `completeFeeAgreements`, which sets them `COMPLETED` and creates draft invoices.",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          },
          {
            "model": "Invoice",
            "service": "work-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "work-service:feeAgreement.cancelProposedFeeAgreement",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "feeAgreement.cancelProposedFeeAgreement",
      "module": "feeAgreement",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/feeAgreement/procedures/cancelProposedFeeAgreement.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/cancelProposedFeeAgreement.mutation.ts#L5"
      },
      "router": {
        "file": "services/work-service/src/feeAgreement/router.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/router.ts#L25"
      },
      "hops": {
        "direct": 2,
        "services": [
          "assignment-service",
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "assignment-service",
            "path": "updateAssignments",
            "kind": "write",
            "inferred": false,
            "targetId": "assignment-service:updateAssignments",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/updateAssignments.mutation.ts#L21",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "cancelStripeTransaction",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:cancelStripeTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/cancelStripeTransaction.mutation.ts#L5",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "updateStripeTransaction",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:updateStripeTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/updateStripeTransaction.mutation.ts#L20",
            "domain": "money"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "20de9a1",
      "interpretation": {
        "sig": "20de9a1",
        "summary": "Cancels a fee agreement (thin wrapper around the same cancel logic as `cancelFeeAgreement`): cancels its assignment via `assignment-service`, cancels or shrinks the linked Stripe transaction/bill, and sets the fee agreement (and its quote, if it was the last active one) to `CANCELLED`.",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          },
          {
            "model": "Bill",
            "service": "work-service"
          },
          {
            "model": "Quote",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:feeAgreement.cancelFeeAgreement",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "feeAgreement.cancelFeeAgreement",
      "module": "feeAgreement",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/feeAgreement/procedures/cancelFeeAgreement.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/cancelFeeAgreement.mutation.ts#L5"
      },
      "router": {
        "file": "services/work-service/src/feeAgreement/router.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/router.ts#L26"
      },
      "hops": {
        "direct": 2,
        "services": [
          "assignment-service",
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "assignment-service",
            "path": "updateAssignments",
            "kind": "write",
            "inferred": false,
            "targetId": "assignment-service:updateAssignments",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/updateAssignments.mutation.ts#L21",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "cancelStripeTransaction",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:cancelStripeTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/cancelStripeTransaction.mutation.ts#L5",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "updateStripeTransaction",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:updateStripeTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/updateStripeTransaction.mutation.ts#L20",
            "domain": "money"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "60a181c1",
      "interpretation": {
        "sig": "60a181c1",
        "summary": "Cancels a fee agreement: cancels its assignment via `assignment-service`, then either cancels the quote and bill (and any Stripe transaction) if this was the only active fee agreement, or shrinks the bill/transaction to drop this one's items if others remain, setting the fee agreement `CANCELLED` either way.",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          },
          {
            "model": "Bill",
            "service": "work-service"
          },
          {
            "model": "Quote",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:feeAgreement.updateFeeAgreementLawhivePercent",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "feeAgreement.updateFeeAgreementLawhivePercent",
      "module": "feeAgreement",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateFeeAgreementLawhivePercentInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/work-service/src/feeAgreement/procedures/updateFeeAgreementLawhivePercent.mutation.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/updateFeeAgreementLawhivePercent.mutation.ts#L18"
      },
      "router": {
        "file": "services/work-service/src/feeAgreement/router.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/router.ts#L27"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1f8ad30",
      "interpretation": {
        "sig": "1f8ad30",
        "summary": "Updates a fee agreement's Lawhive fee percentage and the source/source ID that justifies it, after confirming the fee agreement exists.",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:feeAgreement.updateFeeAgreementJurisdiction",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "feeAgreement.updateFeeAgreementJurisdiction",
      "module": "feeAgreement",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateFeeAgreementJurisdictionInputSchema",
      "hasOutput": true,
      "location": {
        "file": "services/work-service/src/feeAgreement/procedures/updateFeeAgreementJurisdiction.mutation.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/updateFeeAgreementJurisdiction.mutation.ts#L18"
      },
      "router": {
        "file": "services/work-service/src/feeAgreement/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/router.ts#L28"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2df765a8",
      "interpretation": {
        "sig": "2df765a8",
        "summary": "Bulk-updates the jurisdiction on a list of fee agreements by ID and returns how many rows were changed.",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:feeAgreement.admin.search",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "feeAgreement.admin.search",
      "module": "feeAgreement",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "SearchFeeAgreementInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/feeAgreement/procedures/searchFeeAgreements.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/searchFeeAgreements.query.ts#L7"
      },
      "router": {
        "file": "services/work-service/src/feeAgreement/router.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/router.ts#L30"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "48aee5b8",
      "interpretation": {
        "sig": "48aee5b8",
        "summary": "Looks up fee agreements by ID for admin search: only matches when the query starts with the \"`feeagr_`\" prefix, otherwise returns nothing.",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:feeAgreement.admin.cancelFeeAgreements",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "feeAgreement.admin.cancelFeeAgreements",
      "module": "feeAgreement",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/feeAgreement/procedures/cancelFeeAgreements.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/cancelFeeAgreements.mutation.ts#L5"
      },
      "router": {
        "file": "services/work-service/src/feeAgreement/router.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/router.ts#L31"
      },
      "hops": {
        "direct": 1,
        "services": [
          "assignment-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "assignment-service",
            "path": "updateAssignments",
            "kind": "write",
            "inferred": false,
            "targetId": "assignment-service:updateAssignments",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/updateAssignments.mutation.ts#L21",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f61e057e",
      "interpretation": {
        "sig": "f61e057e",
        "summary": "Admin bulk-cancel: given fee agreement IDs and/or a matter ID, cancels all matching fee agreements that aren't already `CANCELLED` or `COMPLETED`, reusing the same per-agreement cancel flow (assignment cancellation via `assignment-service`, bill/transaction cleanup, status set to `CANCELLED`) and returns the count cancelled.",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:bill.listBills",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "bill.listBills",
      "module": "bill",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/bill/procedures/listBills.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/bill/procedures/listBills.query.ts#L6"
      },
      "router": {
        "file": "services/work-service/src/bill/router.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/bill/router.ts#L7"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a896e312",
      "interpretation": {
        "sig": "a896e312",
        "summary": "Lists bills, filterable by matter, bill ids, status, or transaction ids, including each bill's line items and fee agreements. Read-only.",
        "models": [
          {
            "model": "Bill",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:bill.updateBill",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "bill.updateBill",
      "module": "bill",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateBillInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/bill/procedures/updateBill.mutation.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/bill/procedures/updateBill.mutation.ts#L24"
      },
      "router": {
        "file": "services/work-service/src/bill/router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/bill/router.ts#L8"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9ba44072",
      "interpretation": {
        "sig": "9ba44072",
        "summary": "Updates a bill's status, amount, currency, due date, description, matter, or transaction link directly in Postgres, blocking the change if the bill is already `CANCELLED` or `PAID`, and rejecting a supplied amount that doesn't match the sum of its bill items.",
        "models": [
          {
            "model": "Bill",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:bill.getBill",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "bill.getBill",
      "module": "bill",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetBillInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/bill/procedures/getBill.query.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/bill/procedures/getBill.query.ts#L11"
      },
      "router": {
        "file": "services/work-service/src/bill/router.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/bill/router.ts#L9"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2544eca0",
      "interpretation": {
        "sig": "2544eca0",
        "summary": "Fetches a single bill by id with its line items, or throws `NOT_FOUND` if it doesn't exist. Read-only.",
        "models": [
          {
            "model": "Bill",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:bill.listBillsFromStripePaymentIntentIds",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "bill.listBillsFromStripePaymentIntentIds",
      "module": "bill",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetBillFromStripePaymentIntentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/bill/procedures/listBillsFromStripePaymentIntentIds.query.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/bill/procedures/listBillsFromStripePaymentIntentIds.query.ts#L13"
      },
      "router": {
        "file": "services/work-service/src/bill/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/bill/router.ts#L10"
      },
      "hops": {
        "direct": 1,
        "services": [
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "listTransactions",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:listTransactions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/listTransactions.query.ts#L7",
            "domain": "money"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d220b951",
      "interpretation": {
        "sig": "d220b951",
        "summary": "Given Stripe payment intent ids, looks up the matching transactions via `transaction-service` and returns the bills tied to those transactions, each bill enriched with its transaction record. Read-only.",
        "models": [
          {
            "model": "Bill",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:agreementSignature.signFeeAgreements",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "agreementSignature.signFeeAgreements",
      "module": "agreementSignature",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "SignFeeAgreementsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/agreementSignature/procedures/signFeeAgreements.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/signFeeAgreements.mutation.ts#L14"
      },
      "router": {
        "file": "services/work-service/src/agreementSignature/router.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/router.ts#L7"
      },
      "hops": {
        "direct": 1,
        "services": [
          "assignment-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "assignment-service",
            "path": "listAssignments",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:listAssignments",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/listAssignments.query.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ac8cdc4f",
      "interpretation": {
        "sig": "ac8cdc4f",
        "summary": "Marks a fee agreement as signed by a person: looks up the firm for each fee agreement via `assignment-service`, then either updates an existing unsigned `AgreementSignature` record to set `signedAt`/`signedByPersonId` or creates a new signed one of type LSA.",
        "models": [
          {
            "model": "AgreementSignature",
            "service": "work-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:agreementSignature.createUnsignedAgreementSignatures",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "agreementSignature.createUnsignedAgreementSignatures",
      "module": "agreementSignature",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateUnsignedAgreementSignaturesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/agreementSignature/procedures/createUnsignedAgreementSignatures.mutation.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/createUnsignedAgreementSignatures.mutation.ts#L15"
      },
      "router": {
        "file": "services/work-service/src/agreementSignature/router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/router.ts#L8"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b61513f8",
      "interpretation": {
        "sig": "b61513f8",
        "summary": "Creates blank (unsigned) `AgreementSignature` rows of type LSA for every combination of the given fee agreements and identities, skipping any combination that already has a signature record for that firm.",
        "models": [
          {
            "model": "AgreementSignature",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:agreementSignature.listUnsignedAgreementSignatures",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "agreementSignature.listUnsignedAgreementSignatures",
      "module": "agreementSignature",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListUnsignedAgreementSignaturesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17"
      },
      "router": {
        "file": "services/work-service/src/agreementSignature/router.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/router.ts#L9"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "599e9dcf",
      "interpretation": {
        "sig": "599e9dcf",
        "summary": "Lists fee agreements still awaiting a given identity's signature: returns `AgreementSignature` rows where that person hasn't signed yet, filtered by matter, firm and fee agreement status (defaults to `IN_PROGRESS` agreements).",
        "models": [
          {
            "model": "AgreementSignature",
            "service": "work-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "work-service:agreementSignature.listAgreementSignatures",
      "api": "work-service",
      "origin": "work-service",
      "surfaceKind": "internal",
      "protocol": "trpc",
      "surface": "workRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "service-to-service"
      ],
      "path": "agreementSignature.listAgreementSignatures",
      "module": "agreementSignature",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "ListAgreementSignaturesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "services/work-service/src/agreementSignature/procedures/listAgreementSignatures.query.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listAgreementSignatures.query.ts#L14"
      },
      "router": {
        "file": "services/work-service/src/agreementSignature/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/router.ts#L10"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "fa3f8400",
      "interpretation": {
        "sig": "fa3f8400",
        "summary": "Fetches `AgreementSignature` records (signed or not) for a set of fee agreement ids or a matter id, including the related fee agreement; requires at least one of those two filters.",
        "models": [
          {
            "model": "AgreementSignature",
            "service": "work-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:agentRetrieval.listSearchEntries",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "agentRetrieval.listSearchEntries",
      "module": "agentRetrieval",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "agentWorkerProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [],
      "inputName": "ListSearchEntriesInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/agent-retrieval/procedures/listSearchEntries.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/agent-retrieval/procedures/listSearchEntries.query.ts#L8"
      },
      "router": {
        "file": "apis/lawrence-api/src/agent-retrieval/router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/agent-retrieval/router.ts#L8"
      },
      "hops": {
        "direct": 8,
        "services": [
          "matter-service",
          "messaging-service",
          "work-service",
          "email-service",
          "assignment-service",
          "ledger-service",
          "identity-service",
          "search-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "matterParticipant.internal.listMatterParticipants",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterParticipant.internal.listMatterParticipants",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/internal/listMatterParticipants.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "matterNote.internal.listMatterNotes",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterNote.internal.listMatterNotes",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/internal/listMatterNotes.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "messaging-service",
            "path": "message.internal.getMessages",
            "kind": "read",
            "inferred": false,
            "targetId": "messaging-service:message.internal.getMessages",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getMessagesInternal.query.ts#L8",
            "domain": "chat"
          },
          {
            "service": "matter-service",
            "path": "matterFile.internal.listMatterFiles",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterFile.internal.listMatterFiles",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/internal/listMatterFiles.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "quote.listQuotesByMatterId",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.listQuotesByMatterId",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/listQuotesByMatterId.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "matter-service",
            "path": "matterArtifact.internal.listMatterArtifacts",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.internal.listMatterArtifacts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/internal/listMatterArtifacts.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "matterArtifact.internal.listFinalisedMatterArtifacts",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.internal.listFinalisedMatterArtifacts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/internal/listFinalisedMatterArtifacts.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "email-service",
            "path": "internal.listMessageDrafts",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:internal.listMessageDrafts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/internal/listMessageDraftsInternal.query.ts#L12",
            "domain": "email"
          },
          {
            "service": "email-service",
            "path": "matter.getThreads",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:matter.getThreads",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/getThreads.query.ts#L13",
            "domain": "email"
          },
          {
            "service": "email-service",
            "path": "internal.getThreadMessages",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:internal.getThreadMessages",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/internal/getThreadMessagesInternal.query.ts#L14",
            "domain": "email"
          },
          {
            "service": "matter-service",
            "path": "calls.internal.listCalls",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:calls.internal.listCalls",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/calls/procedures/internal/listCalls.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "assignment-service",
            "path": "listAssignments",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:listAssignments",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/listAssignments.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "ledger-service",
            "path": "accounts.list",
            "kind": "read",
            "inferred": false,
            "targetId": "ledger-service:accounts.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/procedures/listAccounts.query.ts#L9",
            "domain": "money"
          },
          {
            "service": "matter-service",
            "path": "matterContact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterContact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/list.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "contact.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/get.query.ts#L20",
            "domain": "people"
          },
          {
            "service": "search-service",
            "path": "getContentSummaries",
            "kind": "read",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          },
          {
            "service": "matter-service",
            "path": "matterArtifact.internal.getMatterArtifactVersions",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.internal.getMatterArtifactVersions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/internal/getMatterArtifactVersions.query.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "ai",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b7373db8",
      "interpretation": {
        "sig": "b7373db8",
        "summary": "Pulls together a searchable index of everything on a matter (files, artifacts, messages, notes, quotes, emails, contacts, documents, precedents, threads, calls, fee agreements, key dates, tasks) into a flat list of path-tagged entries for the AI agent to search over. Read-only: it fans out to `matter-service`, `messaging-service`, `email-service`, `work-service`, `ledger-service`, `identity-service` and `search-service` and reshapes their responses, writing nothing.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          },
          {
            "model": "MatterFile",
            "service": "matter-service"
          },
          {
            "model": "MatterNote",
            "service": "matter-service"
          },
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "Message",
            "service": "messaging-service"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:agentRetrieval.vectorSearch",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "agentRetrieval.vectorSearch",
      "module": "agentRetrieval",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "agentWorkerProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [],
      "inputName": "VectorSearchInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/agent-retrieval/procedures/vectorSearch.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/agent-retrieval/procedures/vectorSearch.query.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/agent-retrieval/router.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/agent-retrieval/router.ts#L9"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "search-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "matterParticipant.internal.listMatterParticipants",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterParticipant.internal.listMatterParticipants",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/internal/listMatterParticipants.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "search-service",
            "path": "search",
            "kind": "read",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b2b033a5",
      "interpretation": {
        "sig": "b2b033a5",
        "summary": "Runs a jurisdiction-scoped vector search for the agent, after checking the agent run really belongs to the given matter and looking up that matter's primary jurisdiction. Delegates the actual search to `search-service` and returns raw results; it writes nothing itself.",
        "flags": [
          "read-only despite reading agentRun via prisma for an auth check"
        ]
      }
    },
    {
      "id": "lawrence-api:agentRuns.getScopeGate",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "agentRuns.getScopeGate",
      "module": "agentRuns",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "agentWorkerProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [],
      "inputName": "GetScopeGateInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/agent-runs/procedures/getScopeGate.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/agent-runs/procedures/getScopeGate.query.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/agent-runs/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/agent-runs/router.ts#L10"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "eac90f00",
      "interpretation": {
        "sig": "eac90f00",
        "summary": "Checks whether an agent run is allowed to start for a `MATTER` scope: looks up the matter's firm and `ACTIVE` status via `matter-service` and checks the `BACKGROUND_AGENTS` PostHog flag for that scope, treating any unresolved flag as off so background agents default to disabled.",
        "models": [
          {
            "model": "AgentRun",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:agentRuns.ensureRun",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "agentRuns.ensureRun",
      "module": "agentRuns",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "agentWorkerProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [],
      "inputName": "ReserveRunInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/agent-runs/procedures/ensureRun.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/agent-runs/procedures/ensureRun.mutation.ts#L6"
      },
      "router": {
        "file": "apis/lawrence-api/src/agent-runs/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/agent-runs/router.ts#L11"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d1c896",
      "interpretation": {
        "sig": "d1c896",
        "summary": "Reserves a new `AgentRun` row (status `PENDING_START`) for an agent trigger, deriving `firmId` server-side from the scope so the caller can't set it. Relies on a unique index on (`agentSlug`, `triggerEventId`): if another caller already reserved the same trigger, this returns that existing row instead of erroring, marking `reserved: false`.",
        "models": [
          {
            "model": "AgentRun",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:agentRuns.recordWorkflowStart",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "agentRuns.recordWorkflowStart",
      "module": "agentRuns",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "agentWorkerProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [],
      "inputName": "RecordWorkflowStartInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/agent-runs/procedures/recordWorkflowStart.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/agent-runs/procedures/recordWorkflowStart.mutation.ts#L8"
      },
      "router": {
        "file": "apis/lawrence-api/src/agent-runs/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/agent-runs/router.ts#L12"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "bed405bf",
      "interpretation": {
        "sig": "bed405bf",
        "summary": "Attaches an Inngest `workflowRunId` to an `AgentRun` and flips it to `RUNNING`, using a compare-and-set on `workflowRunId` being null so only one caller wins under contention. Losers get back the winning run's `workflowRunId` and status instead of overwriting it.",
        "models": [
          {
            "model": "AgentRun",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:agentRuns.getActiveRunForScope",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "agentRuns.getActiveRunForScope",
      "module": "agentRuns",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "agentWorkerProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [],
      "inputName": "GetActiveRunForScopeInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/agent-runs/procedures/getActiveRunForScope.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/agent-runs/procedures/getActiveRunForScope.query.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/agent-runs/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/agent-runs/router.ts#L13"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "abc3a293",
      "interpretation": {
        "sig": "abc3a293",
        "summary": "Looks up whether a scope already has a `PENDING_START` or `RUNNING` agent run from a non-UI trigger (excludes `API`/`CHAT`), used as a defer guard so a new background trigger can wait for an in-flight run instead of starting a duplicate.",
        "models": [
          {
            "model": "AgentRun",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:agentRuns.transitionRun",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "agentRuns.transitionRun",
      "module": "agentRuns",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "agentWorkerProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [],
      "inputName": "TransitionRunInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/agent-runs/procedures/transitionRun.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/agent-runs/procedures/transitionRun.mutation.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/agent-runs/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/agent-runs/router.ts#L14"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2df779af",
      "interpretation": {
        "sig": "2df779af",
        "summary": "Updates an `AgentRun`'s status (and optionally its error), refusing transitions out of `SUCCEEDED` or `NO_ACTION` and only allowing `FAILED` to go back to `RUNNING`. If the target run doesn't exist and a `createIfMissing` seed was supplied, it upserts the row instead of failing. A disallowed transition is a silent no-op that returns the run's current status rather than erroring.",
        "models": [
          {
            "model": "AgentRun",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:agentRuns.finaliseRun",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "agentRuns.finaliseRun",
      "module": "agentRuns",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "agentWorkerProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [],
      "inputName": "FinaliseRunInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/agent-runs/procedures/finaliseRun.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/agent-runs/procedures/finaliseRun.mutation.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/agent-runs/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/agent-runs/router.ts#L15"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6db7fd67",
      "interpretation": {
        "sig": "6db7fd67",
        "summary": "Marks an `AgentRun` as finished (status plus optional transcript, error, `threadId`), but only if it isn't already in a terminal status, so a late-arriving finalise can't overwrite a run that already succeeded or failed. Always returns the run's current id and status even when the write was skipped.",
        "models": [
          {
            "model": "AgentRun",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:agentVfs.readResource",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "agentVfs.readResource",
      "module": "agentVfs",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "agentWorkerProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [],
      "inputName": "ReadVfsResourceInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/agent-vfs/procedures/readResource.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/agent-vfs/procedures/readResource.query.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/agent-vfs/router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/agent-vfs/router.ts#L8"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e697c15b",
      "interpretation": {
        "sig": "e697c15b",
        "summary": "Called by an AI agent worker to fetch one resource (a document, note, task, quote, etc.) from a matter's virtual file system by namespace and `resourceId`. Resolves the acting identity from the journaled agent run, checks the run's `matterId` matches the request, then delegates to the matching content adapter, so an agent can only read data its run is scoped to.",
        "models": [
          {
            "model": "AgentRun",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:agentVfs.listResources",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "agentVfs.listResources",
      "module": "agentVfs",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (pre-auth token)",
        "kind": "internal",
        "builder": "agentWorkerProcedure",
        "base": "internalPreAuthProcedure",
        "middlewares": [
          "(inline)"
        ]
      },
      "middleware": [],
      "inputName": "ListVfsResourcesInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/agent-vfs/procedures/listResources.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/agent-vfs/procedures/listResources.query.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/agent-vfs/router.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/agent-vfs/router.ts#L9"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3109515",
      "interpretation": {
        "sig": "3109515",
        "summary": "Called by an AI agent worker to list the resources of one namespace (documents, contacts, tasks, etc.) available on a matter. Resolves the acting identity from the agent run's ledger and `matterId` check, then delegates listing to the matching content adapter for that namespace.",
        "models": [
          {
            "model": "AgentRun",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:chat.getOrCreateThread",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "chat.getOrCreateThread",
      "module": "chat",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "write",
        "discrepancy": true
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/chat/procedures/getOrCreateThread.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/chat/procedures/getOrCreateThread.query.ts#L6"
      },
      "router": {
        "file": "apis/lawrence-api/src/chat/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/chat/router.ts#L17"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "3c36e14a",
      "interpretation": {
        "sig": "3c36e14a",
        "summary": "Fetches the lawyer's singleton AI chat thread for a matter, creating one (with a seeded welcome message from Lawrence) on first visit, and returns it with all messages. Named as a query but it upserts the `AIThread` row, so opening the chat can create data.",
        "models": [
          {
            "model": "AIThread",
            "service": "lawrence-api"
          },
          {
            "model": "AIMessage",
            "service": "lawrence-api"
          }
        ],
        "flags": [
          "read-that-writes"
        ]
      }
    },
    {
      "id": "lawrence-api:chat.persistAssistantMessage",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "chat.persistAssistantMessage",
      "module": "chat",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/chat/procedures/persistAssistantMessage.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/chat/procedures/persistAssistantMessage.mutation.ts#L6"
      },
      "router": {
        "file": "apis/lawrence-api/src/chat/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/chat/router.ts#L18"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "7ade615e",
      "interpretation": {
        "sig": "7ade615e",
        "summary": "Saves (or updates the parts of) one chat message onto a thread, used to persist Lawrence's assistant replies as they're generated.",
        "models": [
          {
            "model": "AIMessage",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:chat.rateAssistantMessage",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "chat.rateAssistantMessage",
      "module": "chat",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/chat/procedures/rateAssistantMessage.mutation.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/chat/procedures/rateAssistantMessage.mutation.ts#L4"
      },
      "router": {
        "file": "apis/lawrence-api/src/chat/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/chat/router.ts#L19"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "8673a804",
      "interpretation": {
        "sig": "8673a804",
        "summary": "Lets a lawyer rate an assistant message `POSITIVE` or `NEGATIVE`, upserting their feedback for that message.",
        "models": [
          {
            "model": "AIFeedback",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:chat.flagCitation",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "chat.flagCitation",
      "module": "chat",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/chat/procedures/flagCitation.mutation.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/chat/procedures/flagCitation.mutation.ts#L4"
      },
      "router": {
        "file": "apis/lawrence-api/src/chat/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/chat/router.ts#L20"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "ae743ab0",
      "interpretation": {
        "sig": "ae743ab0",
        "summary": "Lets a lawyer flag a specific citation on an assistant message as wrong or unhelpful, recording the flag per user.",
        "models": [
          {
            "model": "AICitationFeedback",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:chat.unflagCitation",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "chat.unflagCitation",
      "module": "chat",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/chat/procedures/unflagCitation.mutation.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/chat/procedures/unflagCitation.mutation.ts#L4"
      },
      "router": {
        "file": "apis/lawrence-api/src/chat/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/chat/router.ts#L21"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "cb9ef8b4",
      "interpretation": {
        "sig": "cb9ef8b4",
        "summary": "Removes the calling lawyer's earlier flag on a citation, deleting their `AICitationFeedback` row for that message and citation.",
        "models": [
          {
            "model": "AICitationFeedback",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:chat.listThreadMessages",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "chat.listThreadMessages",
      "module": "chat",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/chat/procedures/listThreadMessages.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/chat/procedures/listThreadMessages.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/chat/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/chat/router.ts#L22"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "7971360a",
      "interpretation": {
        "sig": "7971360a",
        "summary": "Lists a chat thread's messages for the lawyer's view, paginated by cursor, with each message annotated with the caller's own ratings and flagged citations plus the sender's name and photo pulled from `identity-service`.",
        "models": [
          {
            "model": "AIMessage",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:chat.listAgentModeThreads",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "chat.listAgentModeThreads",
      "module": "chat",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/chat/procedures/listAgentModeThreads.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/chat/procedures/listAgentModeThreads.query.ts#L4"
      },
      "router": {
        "file": "apis/lawrence-api/src/chat/router.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/chat/router.ts#L23"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "792bee3e",
      "interpretation": {
        "sig": "792bee3e",
        "summary": "Lists the calling lawyer's `AGENT`-mode chat threads for a matter (the multi-thread agent workspace, not the singleton Lawrence thread), falling back to a truncated ID as the title when a thread has none.",
        "models": [
          {
            "model": "AIThread",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:chat.admin.listThreads",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "chat.admin.listThreads",
      "module": "chat",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/chat/procedures/admin/adminListThreads.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/chat/procedures/admin/adminListThreads.query.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/chat/router.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/chat/router.ts#L25"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "6843a2f0",
      "interpretation": {
        "sig": "6843a2f0",
        "summary": "Admin view listing every AI thread on a matter with each thread's owning user and message count, for support/ops to inspect chat activity.",
        "models": [
          {
            "model": "AIThread",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:chat.admin.listMessages",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "chat.admin.listMessages",
      "module": "chat",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/chat/procedures/admin/adminListMessages.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/chat/procedures/admin/adminListMessages.query.ts#L6"
      },
      "router": {
        "file": "apis/lawrence-api/src/chat/router.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/chat/router.ts#L26"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "d35c4a98",
      "interpretation": {
        "sig": "d35c4a98",
        "summary": "Admin view of a thread's messages, paginated, without per-user rating or flag context (no requesting user to filter by), for support/ops to review conversations.",
        "models": [
          {
            "model": "AIMessage",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:content.generateTitle",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "content.generateTitle",
      "module": "content",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": "generateTitleSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/content/procedures/generateTitle.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/content/procedures/generateTitle.mutation.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/content/router.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/content/router.ts#L6"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "6312670c",
      "interpretation": {
        "sig": "6312670c",
        "summary": "Generates a short title for a piece of matter content by calling the chat agent's title-generation endpoint, falling back to the first six words of the content if that call fails. It's a mutation in name only: nothing is written, the response is just returned to the caller.",
        "flags": [
          "mutation only reads"
        ]
      }
    },
    {
      "id": "lawrence-api:content.generateDocumentDraft",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "content.generateDocumentDraft",
      "module": "content",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": "generateTitleSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/content/procedures/generateDocumentDraft.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/content/procedures/generateDocumentDraft.mutation.ts#L6"
      },
      "router": {
        "file": "apis/lawrence-api/src/content/router.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/content/router.ts#L7"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "aa8a4220",
      "interpretation": {
        "sig": "aa8a4220",
        "summary": "Produces a document draft for a firm lawyer by running two AI calls in parallel: a Gemini prompt that strips conversational preamble/postamble from the supplied content, and the chat agent title generator. Returns the cleaned content plus generated title; nothing is persisted, so like `generateTitle` this mutation only reads/transforms data.",
        "flags": [
          "mutation only reads"
        ]
      }
    },
    {
      "id": "lawrence-api:forms.admin.listForms",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "forms.admin.listForms",
      "module": "forms",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListFormsInput",
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/forms/procedures/admin/listForms.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/procedures/admin/listForms.query.ts#L4"
      },
      "router": {
        "file": "apis/lawrence-api/src/forms/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/router.ts#L22"
      },
      "hops": {
        "direct": 3,
        "services": [
          "matter-service",
          "work-service",
          "artifactGeneration"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "feeAgreement.listMatterFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listMatterFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterFeeAgreements.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "artifactGeneration",
            "path": "listJurisdictions",
            "kind": "read",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          },
          {
            "service": "artifactGeneration",
            "path": "listForms",
            "kind": "read",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "b377e016",
      "interpretation": {
        "sig": "b377e016",
        "summary": "Lists precedent forms from the artifact generation service catalogue, with optional filters by matter, jurisdiction, active status, or search text. When scoped to a matter it also resolves the matter's allowed jurisdictions (via `matter-service` and `work-service`) and filters the form list to only those.",
        "models": [
          {
            "model": "Form",
            "service": "artifactGeneration"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:forms.admin.listJurisdictions",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "forms.admin.listJurisdictions",
      "module": "forms",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/forms/procedures/admin/listJurisdictions.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/procedures/admin/listJurisdictions.query.ts#L6"
      },
      "router": {
        "file": "apis/lawrence-api/src/forms/router.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/router.ts#L23"
      },
      "hops": {
        "direct": 1,
        "services": [
          "artifactGeneration"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "artifactGeneration",
            "path": "listJurisdictions",
            "kind": "read",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "bec4ce09",
      "interpretation": {
        "sig": "bec4ce09",
        "summary": "Lists the jurisdictions available for forms in a given market. For GB it returns a hardcoded single jurisdiction; for US it queries the artifact generation service."
      }
    },
    {
      "id": "lawrence-api:forms.admin.updateFormActive",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "forms.admin.updateFormActive",
      "module": "forms",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateFormActiveInput",
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/forms/procedures/admin/updateFormActive.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/procedures/admin/updateFormActive.mutation.ts#L7"
      },
      "router": {
        "file": "apis/lawrence-api/src/forms/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/router.ts#L24"
      },
      "hops": {
        "direct": 1,
        "services": [
          "artifactGeneration"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "artifactGeneration",
            "path": "activateForm",
            "kind": "write",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          },
          {
            "service": "artifactGeneration",
            "path": "deactivateForm",
            "kind": "write",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "504262f7",
      "interpretation": {
        "sig": "504262f7",
        "summary": "Activates or deactivates a precedent form in the artifact generation service, so it becomes available (or unavailable) for use going forward.",
        "models": [
          {
            "model": "Form",
            "service": "artifactGeneration"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:forms.admin.updateFormAnnotations",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "forms.admin.updateFormAnnotations",
      "module": "forms",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateFormAnnotationsInput",
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/forms/procedures/admin/updateFormAnnotations.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/procedures/admin/updateFormAnnotations.mutation.ts#L7"
      },
      "router": {
        "file": "apis/lawrence-api/src/forms/router.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/router.ts#L26"
      },
      "hops": {
        "direct": 1,
        "services": [
          "artifactGeneration"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "artifactGeneration",
            "path": "updateFormAnnotations",
            "kind": "write",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "b6095551",
      "interpretation": {
        "sig": "b6095551",
        "summary": "Updates a form's field annotations (and optionally activates it) in the artifact generation service. Nothing in the codebase calls this procedure.",
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "lawrence-api:forms.admin.cloneForm",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "forms.admin.cloneForm",
      "module": "forms",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CloneFormInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/forms/procedures/admin/cloneForm.mutation.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/procedures/admin/cloneForm.mutation.ts#L4"
      },
      "router": {
        "file": "apis/lawrence-api/src/forms/router.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/router.ts#L27"
      },
      "hops": {
        "direct": 1,
        "services": [
          "artifactGeneration"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "artifactGeneration",
            "path": "cloneForm",
            "kind": "write",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "69d5d505",
      "interpretation": {
        "sig": "69d5d505",
        "summary": "Clones an existing precedent form with new annotations in the artifact generation service, optionally activating the clone immediately.",
        "models": [
          {
            "model": "Form",
            "service": "artifactGeneration"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:forms.admin.createFormsBulk",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "forms.admin.createFormsBulk",
      "module": "forms",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateFormsBulkInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/forms/procedures/admin/createFormsBulk.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/procedures/admin/createFormsBulk.mutation.ts#L7"
      },
      "router": {
        "file": "apis/lawrence-api/src/forms/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/router.ts#L28"
      },
      "hops": {
        "direct": 1,
        "services": [
          "artifactGeneration"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "artifactGeneration",
            "path": "createFormsBulk",
            "kind": "write",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "633daa11",
      "interpretation": {
        "sig": "633daa11",
        "summary": "Creates a batch of precedent forms in the artifact generation service in one call, optionally activating them, for bulk-loading new form templates.",
        "models": [
          {
            "model": "Form",
            "service": "artifactGeneration"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:forms.admin.getPresignedUploadUrl",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "forms.admin.getPresignedUploadUrl",
      "module": "forms",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetPresignedUploadUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/forms/procedures/admin/getPresignedUploadUrl.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/procedures/admin/getPresignedUploadUrl.mutation.ts#L7"
      },
      "router": {
        "file": "apis/lawrence-api/src/forms/router.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/router.ts#L29"
      },
      "hops": {
        "direct": 1,
        "services": [
          "artifactGeneration"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "artifactGeneration",
            "path": "getPresignedUploadUrl",
            "kind": "read",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "426f35c6",
      "interpretation": {
        "sig": "426f35c6",
        "summary": "Gets a presigned S3 upload URL and fields from the artifact generation service so an admin can upload a new form file. It only reads a URL from the upstream service, it does not itself write anything (the upload happens client-side after).",
        "flags": [
          "mutation only reads"
        ]
      }
    },
    {
      "id": "lawrence-api:forms.admin.getFormPresignedUrl",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "forms.admin.getFormPresignedUrl",
      "module": "forms",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetFormPresignedUrlInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/forms/procedures/admin/getFormPresignedUrl.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/procedures/admin/getFormPresignedUrl.query.ts#L8"
      },
      "router": {
        "file": "apis/lawrence-api/src/forms/router.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/router.ts#L30"
      },
      "hops": {
        "direct": 1,
        "services": [
          "artifactGeneration"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "artifactGeneration",
            "path": "getFormPresignedUrl",
            "kind": "read",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "1b4222a7",
      "interpretation": {
        "sig": "1b4222a7",
        "summary": "Gets a presigned download/view URL for a specific form file (empty or annotated) from the artifact generation service."
      }
    },
    {
      "id": "lawrence-api:forms.admin.generateFormDefinition",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "forms.admin.generateFormDefinition",
      "module": "forms",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GenerateFormDefinitionPayloadSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/forms/procedures/admin/generateFormDefinition.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/procedures/admin/generateFormDefinition.mutation.ts#L7"
      },
      "router": {
        "file": "apis/lawrence-api/src/forms/router.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/router.ts#L31"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [
        "app/form_definition/generate.requested",
        "app/form_definition/process_fields.requested"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "9ab501c5",
      "interpretation": {
        "sig": "9ab501c5",
        "summary": "Kicks off the form-definition generation workflow by publishing an `app/form_definition/generate.requested` Inngest event with the form's file name, slug, jurisdiction, and any guidance file paths. The durable function that actually parses and builds the form definition runs separately.",
        "flags": [
          "read-that-writes"
        ]
      }
    },
    {
      "id": "lawrence-api:forms.admin.processFieldGroupingAndCollections",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "forms.admin.processFieldGroupingAndCollections",
      "module": "forms",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ProcessFieldsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/forms/procedures/admin/processFieldGroupingAndCollections.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/procedures/admin/processFieldGroupingAndCollections.mutation.ts#L7"
      },
      "router": {
        "file": "apis/lawrence-api/src/forms/router.ts",
        "line": 32,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/router.ts#L32"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [
        "app/form_definition/generate.requested",
        "app/form_definition/process_fields.requested"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "2131cfd",
      "interpretation": {
        "sig": "2131cfd",
        "summary": "Kicks off field-grouping and collection-detection for a generated form by publishing an `app/form_definition/process_fields.requested` Inngest event with the parsed fields and an activate flag. The processing itself runs in a separate durable function.",
        "flags": [
          "read-that-writes"
        ]
      }
    },
    {
      "id": "lawrence-api:forms.lawyer.getFormPresignedUrl",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "forms.lawyer.getFormPresignedUrl",
      "module": "forms",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": "GetFormPresignedUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/forms/procedures/lawyer/getFormPresignedUrl.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/procedures/lawyer/getFormPresignedUrl.query.ts#L7"
      },
      "router": {
        "file": "apis/lawrence-api/src/forms/router.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/router.ts#L35"
      },
      "hops": {
        "direct": 1,
        "services": [
          "artifactGeneration"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "artifactGeneration",
            "path": "getFormPresignedUrl",
            "kind": "read",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "23cea4b9",
      "interpretation": {
        "sig": "23cea4b9",
        "summary": "Gets a presigned download/view URL for a form file within a matter, for a firm member filling in or reviewing a precedent."
      }
    },
    {
      "id": "lawrence-api:forms.lawyer.getBlankFormPreviewUrl",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "forms.lawyer.getBlankFormPreviewUrl",
      "module": "forms",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "GetBlankFormPreviewUrlInput",
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/forms/procedures/lawyer/getBlankFormPreviewUrl.query.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/procedures/lawyer/getBlankFormPreviewUrl.query.ts#L12"
      },
      "router": {
        "file": "apis/lawrence-api/src/forms/router.ts",
        "line": 36,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/router.ts#L36"
      },
      "hops": {
        "direct": 1,
        "services": [
          "artifactGeneration"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "artifactGeneration",
            "path": "getFormPresignedUrl",
            "kind": "read",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "9cc27071",
      "interpretation": {
        "sig": "9cc27071",
        "summary": "Gets a presigned URL to preview a blank (empty) form outside any matter context, for browsing the Precedents library."
      }
    },
    {
      "id": "lawrence-api:forms.lawyer.listForms",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "forms.lawyer.listForms",
      "module": "forms",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/forms/procedures/lawyer/listForms.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/procedures/lawyer/listForms.query.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/forms/router.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/router.ts#L37"
      },
      "hops": {
        "direct": 3,
        "services": [
          "matter-service",
          "work-service",
          "artifactGeneration"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "feeAgreement.listMatterFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listMatterFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterFeeAgreements.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "artifactGeneration",
            "path": "listJurisdictions",
            "kind": "read",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          },
          {
            "service": "artifactGeneration",
            "path": "listForms",
            "kind": "read",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "e475e456",
      "interpretation": {
        "sig": "e475e456",
        "summary": "Lists precedent forms for a firm member within a specific matter, filtered to the jurisdictions allowed for that matter (resolved via `matter-service` and `work-service`).",
        "models": [
          {
            "model": "Form",
            "service": "artifactGeneration"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:forms.lawyer.listJurisdictionForms",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "forms.lawyer.listJurisdictionForms",
      "module": "forms",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ListJurisdictionFormsInput",
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/forms/procedures/lawyer/listJurisdictionForms.query.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/procedures/lawyer/listJurisdictionForms.query.ts#L12"
      },
      "router": {
        "file": "apis/lawrence-api/src/forms/router.ts",
        "line": 38,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/router.ts#L38"
      },
      "hops": {
        "direct": 3,
        "services": [
          "matter-service",
          "work-service",
          "artifactGeneration"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "feeAgreement.listMatterFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listMatterFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterFeeAgreements.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "artifactGeneration",
            "path": "listJurisdictions",
            "kind": "read",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          },
          {
            "service": "artifactGeneration",
            "path": "listForms",
            "kind": "read",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "ac79b404",
      "interpretation": {
        "sig": "ac79b404",
        "summary": "Lists active precedent forms for a given jurisdiction, for browsing the Precedents library outside a matter. Nothing in the codebase calls this procedure.",
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "lawrence-api:forms.lawyer.listJurisdictions",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "forms.lawyer.listJurisdictions",
      "module": "forms",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": "ListJurisdictionsInput",
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/forms/procedures/lawyer/listJurisdictions.query.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/procedures/lawyer/listJurisdictions.query.ts#L11"
      },
      "router": {
        "file": "apis/lawrence-api/src/forms/router.ts",
        "line": 39,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/router.ts#L39"
      },
      "hops": {
        "direct": 1,
        "services": [
          "artifactGeneration"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "artifactGeneration",
            "path": "listJurisdictions",
            "kind": "read",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "96139ce3",
      "interpretation": {
        "sig": "96139ce3",
        "summary": "Lists the jurisdictions available for forms in a given market, for a firm member (GB returns a hardcoded jurisdiction, US queries the artifact generation service)."
      }
    },
    {
      "id": "lawrence-api:forms.lawyer.listMatterJurisdictions",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "forms.lawyer.listMatterJurisdictions",
      "module": "forms",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/forms/procedures/lawyer/listMatterJurisdictions.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/procedures/lawyer/listMatterJurisdictions.query.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/forms/router.ts",
        "line": 40,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/router.ts#L40"
      },
      "hops": {
        "direct": 3,
        "services": [
          "matter-service",
          "work-service",
          "artifactGeneration"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "feeAgreement.listMatterFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listMatterFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterFeeAgreements.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "artifactGeneration",
            "path": "listJurisdictions",
            "kind": "read",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "e269078f",
      "interpretation": {
        "sig": "e269078f",
        "summary": "Resolves which form jurisdictions are allowed for a specific matter, combining the matter's primary jurisdiction, its fee agreements' jurisdictions, and market defaults, filtered to jurisdictions the artifact generation service actually has forms for."
      }
    },
    {
      "id": "lawrence-api:forms.lawyer.submitFieldFeedback",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "forms.lawyer.submitFieldFeedback",
      "module": "forms",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": "SubmitFieldFeedbackInput",
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/forms/procedures/lawyer/submitFieldFeedback.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/procedures/lawyer/submitFieldFeedback.mutation.ts#L7"
      },
      "router": {
        "file": "apis/lawrence-api/src/forms/router.ts",
        "line": 41,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/forms/router.ts#L41"
      },
      "hops": {
        "direct": 1,
        "services": [
          "artifactGeneration"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "artifactGeneration",
            "path": "submitFieldFeedback",
            "kind": "write",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "f0c6ab69",
      "interpretation": {
        "sig": "f0c6ab69",
        "summary": "Lets a firm lawyer thumbs-up or thumbs-down a Lawrence form field's AI-filled value (with optional reasons or a custom comment), forwards it to the artifact generation service to record against the Langfuse trace, and posts a Slack notification with the rating and comment to the draft-feedback channel.",
        "models": []
      }
    },
    {
      "id": "lawrence-api:nextSteps.internal.getNextStepsSuggestions",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "nextSteps.internal.getNextStepsSuggestions",
      "module": "nextSteps",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "internalProcedure",
        "base": "internalProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "GetNextStepsSuggestionsInput",
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/nextSteps/procedures/getNextStepsSuggestions.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/nextSteps/procedures/getNextStepsSuggestions.query.ts#L7"
      },
      "router": {
        "file": "apis/lawrence-api/src/nextSteps/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/nextSteps/router.ts#L10"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "nextStepPrediction"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "internal.getMatterPermissions",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatterPermissions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatterPermissions.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "nextStepPrediction",
            "path": "retrieveSuggestions",
            "kind": "call",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "9b52494d",
      "interpretation": {
        "sig": "9b52494d",
        "summary": "Internal service-to-service call that fetches AI-suggested next steps for a set of matters, after checking the caller has view access to each one via `matter-service`. Nothing in the codebase calls this route.",
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "lawrence-api:nextSteps.lawyer.getNextStepsSuggestions",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "nextSteps.lawyer.getNextStepsSuggestions",
      "module": "nextSteps",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/nextSteps/procedures/getNextStepsSuggestionsLawyer.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/nextSteps/procedures/getNextStepsSuggestionsLawyer.query.ts#L4"
      },
      "router": {
        "file": "apis/lawrence-api/src/nextSteps/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/nextSteps/router.ts#L13"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "nextStepPrediction"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "internal.getMatterPermissions",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatterPermissions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatterPermissions.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "nextStepPrediction",
            "path": "retrieveSuggestions",
            "kind": "call",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "ca0fe7f6",
      "interpretation": {
        "sig": "ca0fe7f6",
        "summary": "Lets a firm lawyer pull Lawrence's AI-suggested next steps for their matters, checking view permission on each matter first and forwarding to the next-step prediction service.",
        "flags": []
      }
    },
    {
      "id": "lawrence-api:nextSteps.lawyer.submitNextStepFeedback",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "nextSteps.lawyer.submitNextStepFeedback",
      "module": "nextSteps",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": "SubmitNextStepFeedbackInput",
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/nextSteps/procedures/submitNextStepFeedback.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/nextSteps/procedures/submitNextStepFeedback.mutation.ts#L8"
      },
      "router": {
        "file": "apis/lawrence-api/src/nextSteps/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/nextSteps/router.ts#L14"
      },
      "hops": {
        "direct": 1,
        "services": [
          "nextStepPrediction"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "nextStepPrediction",
            "path": "submitNextStepFeedback",
            "kind": "write",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "f204d8b",
      "interpretation": {
        "sig": "f204d8b",
        "summary": "Lets a lawyer thumbs-up or thumbs-down a suggested next step, with optional reasons or free text. Forwards the feedback to the next-step prediction service and posts a Slack message with the rating, matter, and a Langfuse trace link so the AI team can review it.",
        "flags": []
      }
    },
    {
      "id": "lawrence-api:nextSteps.admin.getNextStepsSuggestions",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "nextSteps.admin.getNextStepsSuggestions",
      "module": "nextSteps",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/nextSteps/procedures/getNextStepsSuggestionsAdmin.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/nextSteps/procedures/getNextStepsSuggestionsAdmin.query.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/nextSteps/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/nextSteps/router.ts#L17"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "nextStepPrediction"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "internal.getMatterPermissions",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatterPermissions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatterPermissions.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "nextStepPrediction",
            "path": "retrieveSuggestions",
            "kind": "call",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "62207848",
      "interpretation": {
        "sig": "62207848",
        "summary": "Admin/ops equivalent of the lawyer suggestions query: fetches AI-suggested next steps for a set of matters after checking view permission, via the next-step prediction service.",
        "flags": []
      }
    },
    {
      "id": "lawrence-api:nextSteps.addNextStepSuggestionFeedback",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "nextSteps.addNextStepSuggestionFeedback",
      "module": "nextSteps",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/nextSteps/procedures/addNextStepSuggestionFeedback.mutation.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/nextSteps/procedures/addNextStepSuggestionFeedback.mutation.ts#L9"
      },
      "router": {
        "file": "apis/lawrence-api/src/nextSteps/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/nextSteps/router.ts#L19"
      },
      "hops": {
        "direct": 1,
        "services": [
          "nextStepPrediction"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "nextStepPrediction",
            "path": "addSuggestionFeedback",
            "kind": "write",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c1a4b191",
      "interpretation": {
        "sig": "c1a4b191",
        "summary": "Legacy feedback path for a lawyer marking individual suggested steps as accurate or not, plus optional free-text feedback, forwarded to the next-step prediction service. Marked in code as used only by the old feedback UI and slated for removal once the new UX ships.",
        "flags": [
          "legacy"
        ]
      }
    },
    {
      "id": "lawrence-api:workflows.getWorkflowStatuses",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "workflows.getWorkflowStatuses",
      "module": "workflows",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/workflows/procedures/getWorkflowStatuses.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/workflows/procedures/getWorkflowStatuses.query.ts#L4"
      },
      "router": {
        "file": "apis/lawrence-api/src/workflows/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/workflows/router.ts#L10"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "e5c3884a",
      "interpretation": {
        "sig": "e5c3884a",
        "summary": "Lists the AI workflow statuses (briefing note, advice note, letter, form filling/edit) recorded for a matter, with each one rolled up to a top-level `inProgress`, `complete`, or `error` state from its step statuses. Pure read against the KV-backed status store, nothing is written.",
        "flags": []
      }
    },
    {
      "id": "lawrence-api:workflows.deleteWorkflowStatus",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "workflows.deleteWorkflowStatus",
      "module": "workflows",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/workflows/procedures/deleteWorkflowStatus.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/workflows/procedures/deleteWorkflowStatus.mutation.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/workflows/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/workflows/router.ts#L11"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "6bdde772",
      "interpretation": {
        "sig": "6bdde772",
        "summary": "Named as a mutation but only deletes a workflow status record (by `workflowId` and matter) from the KV store, clearing a stale entry from the status list. No matter/case data changes.",
        "flags": [
          "mutation only deletes a status record"
        ]
      }
    },
    {
      "id": "lawrence-api:workflows.requestBriefingNoteGeneration",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "workflows.requestBriefingNoteGeneration",
      "module": "workflows",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/workflows/procedures/requestBriefingNoteGeneration.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/workflows/procedures/requestBriefingNoteGeneration.mutation.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/workflows/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/workflows/router.ts#L12"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "messaging-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "messaging-service",
            "path": "message.internal.getMessages",
            "kind": "read",
            "inferred": false,
            "targetId": "messaging-service:message.internal.getMessages",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getMessagesInternal.query.ts#L8",
            "domain": "chat"
          },
          {
            "service": "matter-service",
            "path": "matterNote.internal.listMatterNotes",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterNote.internal.listMatterNotes",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/internal/listMatterNotes.query.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "ai",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c0228ef4",
      "interpretation": {
        "sig": "c0228ef4",
        "summary": "Kicks off briefing note generation for a matter: reads the matter, its last 20 messages, and its matter notes, writes a new in-progress workflow status entry to KV, then publishes the `app/case/artifact_generation.requested` Inngest event so a durable function does the actual AI generation and persistence.",
        "flags": [
          "write mechanism is KV status write plus Inngest publish, not a direct DB write"
        ],
        "models": [
          {
            "model": "MatterNote",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:workflows.requestAdviceNoteGeneration",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "workflows.requestAdviceNoteGeneration",
      "module": "workflows",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/workflows/procedures/requestAdviceNoteGeneration.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/workflows/procedures/requestAdviceNoteGeneration.mutation.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/workflows/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/workflows/router.ts#L13"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "messaging-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "messaging-service",
            "path": "message.internal.getMessages",
            "kind": "read",
            "inferred": false,
            "targetId": "messaging-service:message.internal.getMessages",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getMessagesInternal.query.ts#L8",
            "domain": "chat"
          },
          {
            "service": "matter-service",
            "path": "matterNote.internal.listMatterNotes",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterNote.internal.listMatterNotes",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/internal/listMatterNotes.query.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "ai",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "d2c51be8",
      "interpretation": {
        "sig": "d2c51be8",
        "summary": "Kicks off advice note generation for a matter: reads the matter, its last 20 messages, and its matter notes, writes a new in-progress workflow status entry to KV, then publishes the `app/case/artifact_generation.requested` Inngest event so a durable function generates and persists the actual advice note.",
        "flags": [
          "write mechanism is KV status write plus Inngest publish, not a direct DB write"
        ],
        "models": [
          {
            "model": "MatterNote",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:workflows.requestFillFormGeneration",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "workflows.requestFillFormGeneration",
      "module": "workflows",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/workflows/procedures/requestFillFormGeneration.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/workflows/procedures/requestFillFormGeneration.mutation.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/workflows/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/workflows/router.ts#L14"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "messaging-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "messaging-service",
            "path": "message.internal.getMessages",
            "kind": "read",
            "inferred": false,
            "targetId": "messaging-service:message.internal.getMessages",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getMessagesInternal.query.ts#L8",
            "domain": "chat"
          },
          {
            "service": "matter-service",
            "path": "matterNote.internal.listMatterNotes",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterNote.internal.listMatterNotes",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/internal/listMatterNotes.query.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "ai",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "50526244",
      "interpretation": {
        "sig": "50526244",
        "summary": "Kicks off form-filling for a given `formSlug` on a matter: reads the matter, its last 20 messages, and its matter notes, writes a new in-progress workflow status entry to KV, then publishes `app/form_filling/fill.requested` so a durable function fills the form and persists the artifact.",
        "flags": [
          "write mechanism is KV status write plus Inngest publish, not a direct DB write"
        ],
        "models": [
          {
            "model": "MatterNote",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:workflows.requestLetterGeneration",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "workflows.requestLetterGeneration",
      "module": "workflows",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/workflows/procedures/requestLetterGeneration.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/workflows/procedures/requestLetterGeneration.mutation.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/workflows/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/workflows/router.ts#L15"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "messaging-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "messaging-service",
            "path": "message.internal.getMessages",
            "kind": "read",
            "inferred": false,
            "targetId": "messaging-service:message.internal.getMessages",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getMessagesInternal.query.ts#L8",
            "domain": "chat"
          },
          {
            "service": "matter-service",
            "path": "matterNote.internal.listMatterNotes",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterNote.internal.listMatterNotes",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/internal/listMatterNotes.query.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "ai",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "8762af44",
      "interpretation": {
        "sig": "8762af44",
        "summary": "Kicks off letter generation for a matter from a caller-supplied description: reads the matter, its last 20 messages, and its matter notes, writes a new in-progress workflow status entry to KV, then publishes `app/case/artifact_generation.requested` for a durable function to generate and persist the letter. No app code calls this procedure.",
        "flags": [
          "usage.dead: no known caller",
          "write mechanism is KV status write plus Inngest publish, not a direct DB write"
        ],
        "models": [
          {
            "model": "MatterNote",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:retrieval.getMatterSummary",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "retrieval.getMatterSummary",
      "module": "retrieval",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/retrieval/procedures/getMatterSummary.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/retrieval/procedures/getMatterSummary.query.ts#L4"
      },
      "router": {
        "file": "apis/lawrence-api/src/retrieval/router.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/retrieval/router.ts#L27"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "4bfe28dc",
      "interpretation": {
        "sig": "4bfe28dc",
        "summary": "Lets a firm lawyer fetch the AI-generated summary of their matter. Signs a request with a KMS key and calls the Case Context Service (CCS) over HTTP, returning the parsed `MatterSummary`.",
        "flags": [
          "read-that-calls-out"
        ]
      }
    },
    {
      "id": "lawrence-api:retrieval.getCaseContext",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "retrieval.getCaseContext",
      "module": "retrieval",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/retrieval/procedures/getCaseContext.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/retrieval/procedures/getCaseContext.query.ts#L4"
      },
      "router": {
        "file": "apis/lawrence-api/src/retrieval/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/retrieval/router.ts#L28"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "2385ae78",
      "interpretation": {
        "sig": "2385ae78",
        "summary": "Fetches the full statement-based case context object for a matter from the Case Context Service, signed with KMS. Nothing in the codebase calls this procedure.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "lawrence-api:retrieval.admin.getMatterSummary",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "retrieval.admin.getMatterSummary",
      "module": "retrieval",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/retrieval/procedures/admin/getMatterSummary.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/retrieval/procedures/admin/getMatterSummary.query.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/retrieval/router.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/retrieval/router.ts#L30"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "af72c77d",
      "interpretation": {
        "sig": "af72c77d",
        "summary": "Admin/ops equivalent of `retrieval.getMatterSummary`: lets Lawhive staff pull the AI matter summary for any matter by calling the same CCS-backed service.",
        "flags": [
          "read-that-calls-out"
        ]
      }
    },
    {
      "id": "lawrence-api:retrieval.admin.getCaseContext",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "retrieval.admin.getCaseContext",
      "module": "retrieval",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/retrieval/procedures/admin/getCaseContext.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/retrieval/procedures/admin/getCaseContext.query.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/retrieval/router.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/retrieval/router.ts#L31"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "41739fa1",
      "interpretation": {
        "sig": "41739fa1",
        "summary": "Admin/ops equivalent of `retrieval.getCaseContext`: lets Lawhive staff pull the full case context object for any matter via the CCS.",
        "flags": [
          "read-that-calls-out"
        ]
      }
    },
    {
      "id": "lawrence-api:retrieval.searchCaseContextSummaries",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "retrieval.searchCaseContextSummaries",
      "module": "retrieval",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "internalProcedure",
        "base": "internalProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/retrieval/procedures/searchCaseContextSummary.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/retrieval/procedures/searchCaseContextSummary.query.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/retrieval/router.ts",
        "line": 33,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/retrieval/router.ts#L33"
      },
      "hops": {
        "direct": 1,
        "services": [
          "search-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "search-service",
            "path": "searchCaseContextSummary",
            "kind": "read",
            "inferred": true,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9e4136f9",
      "interpretation": {
        "sig": "9e4136f9",
        "summary": "Internal service-to-service search: takes a list of query strings and returns matching case context summaries via the search service's `searchCaseContextSummary`.",
        "models": [
          {
            "model": "CaseContextSummary",
            "service": "search-service"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:messageDrafting.generateMessageDraft",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "messageDrafting.generateMessageDraft",
      "module": "messageDrafting",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/messageDrafting/procedures/generateMessageDraft.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/messageDrafting/procedures/generateMessageDraft.query.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/messageDrafting/router.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/messageDrafting/router.ts#L7"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c5fcab3c",
      "interpretation": {
        "sig": "c5fcab3c",
        "summary": "Generates an AI-written message or email draft for a matter, calling the Message Drafting Agent with the lawyer's prompt, current draft text, and optional email threads, gated behind PostHog flags for matter notes, query expansion, and document summaries. Returns the draft text and a `messageDraftId` used later for feedback, but writes nothing itself.",
        "flags": [
          "read-that-writes-nothing",
          "delegates-to-agent"
        ]
      }
    },
    {
      "id": "lawrence-api:messageDrafting.submitMessageDraftFeedback",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "messageDrafting.submitMessageDraftFeedback",
      "module": "messageDrafting",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/messageDrafting/procedures/submitMessageDraftFeedback.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/messageDrafting/procedures/submitMessageDraftFeedback.mutation.ts#L6"
      },
      "router": {
        "file": "apis/lawrence-api/src/messageDrafting/router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/messageDrafting/router.ts#L8"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "ae7d2a50",
      "interpretation": {
        "sig": "ae7d2a50",
        "summary": "Records a lawyer's upvote or downvote (or note that a draft was sent) against one or more message/email drafts by forwarding it to the Message Drafting Agent, and posts a Slack notification with the rating, matter ID, and a Langfuse trace link when feedback wasn't just \"sent\".",
        "flags": [
          "mutation-writes-via-external-agent-not-db"
        ]
      }
    },
    {
      "id": "lawrence-api:messageDrafting.getProactiveMessageDraft",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "messageDrafting.getProactiveMessageDraft",
      "module": "messageDrafting",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/messageDrafting/procedures/getProactiveMessageDraft.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/messageDrafting/procedures/getProactiveMessageDraft.query.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/messageDrafting/router.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/messageDrafting/router.ts#L9"
      },
      "hops": {
        "direct": 1,
        "services": [
          "messaging-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "messaging-service",
            "path": "message.getMessages",
            "kind": "read",
            "inferred": false,
            "targetId": "messaging-service:message.getMessages",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getMessages.query.ts#L8",
            "domain": "chat"
          }
        ]
      },
      "domain": "ai",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "94d4f641",
      "interpretation": {
        "sig": "94d4f641",
        "summary": "Looks up the newest AI-generated proactive message draft for a matter that was created after the most recent message on that channel, reading from the messaging service and the `ProactiveMessageDraft` table. Returns null if no such draft exists.",
        "models": [
          {
            "model": "ProactiveMessageDraft",
            "service": "lawrence-api"
          }
        ],
        "flags": [
          "looks-unused"
        ]
      }
    },
    {
      "id": "lawrence-api:customInstructions.get",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "customInstructions.get",
      "module": "customInstructions",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/customInstructions/procedures/getCustomInstructions.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/customInstructions/procedures/getCustomInstructions.query.ts#L4"
      },
      "router": {
        "file": "apis/lawrence-api/src/customInstructions/router.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/customInstructions/router.ts#L6"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "14aa70b4",
      "interpretation": {
        "sig": "14aa70b4",
        "summary": "Looks up the logged-in lawyer's default AI custom instructions (`AICustomInstructions` row keyed by `userId` and key \"default\") and returns them, or null if none have been saved yet.",
        "models": [
          {
            "model": "AICustomInstructions",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:customInstructions.upsert",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "customInstructions.upsert",
      "module": "customInstructions",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "UpsertCustomInstructionsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lawrence-api/src/customInstructions/procedures/upsertCustomInstructions.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/customInstructions/procedures/upsertCustomInstructions.mutation.ts#L5"
      },
      "router": {
        "file": "apis/lawrence-api/src/customInstructions/router.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/customInstructions/router.ts#L7"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c530222",
      "interpretation": {
        "sig": "c530222",
        "summary": "Saves the lawyer's custom AI instructions text, creating the default `AICustomInstructions` record if none exists or overwriting the existing one, so passing null clears the saved instructions.",
        "mechanism": "direct-prisma",
        "models": [
          {
            "model": "AICustomInstructions",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:skills.list",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "skills.list",
      "module": "skills",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 61,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L61"
      },
      "router": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 61,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L61"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "ed73de81",
      "interpretation": {
        "sig": "ed73de81",
        "summary": "Lists the Skills a lawyer can see (per-firm reusable AI prompt templates for Lawrence), with per-row role and permission flags (`canRun`, `canEdit`, `canDelete`, `canManageAccess`) computed from ownership, firm-admin status, team ownership, and any explicit access grant.",
        "models": [
          {
            "model": "Skill",
            "service": "lawrence-api"
          },
          {
            "model": "SkillAccess",
            "service": "lawrence-api"
          },
          {
            "model": "SkillOwnerTeam",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:skills.creatableScopes",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "skills.creatableScopes",
      "module": "skills",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 65,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L65"
      },
      "router": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 65,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L65"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firm.listFirmMemberships",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.listFirmMemberships",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "6138e2c8",
      "interpretation": {
        "sig": "6138e2c8",
        "summary": "Returns the scopes (the firm, if the caller is a firm admin, plus any teams they own) a lawyer can pick when creating a new Skill, with display labels resolved from `identity-service`.",
        "flags": [
          "personal scope withheld during beta"
        ]
      }
    },
    {
      "id": "lawrence-api:skills.grantBounds",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "skills.grantBounds",
      "module": "skills",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 77,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L77"
      },
      "router": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 77,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L77"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "65bc8c7e",
      "interpretation": {
        "sig": "65bc8c7e",
        "summary": "Returns which access-grant subjects the caller is allowed to assign to (whole firm if firm admin, plus their assignable team ids) so the UI can build the access-grant matrix before the caller submits it.",
        "flags": [
          "read-only gate, no db write"
        ]
      }
    },
    {
      "id": "lawrence-api:skills.get",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "skills.get",
      "module": "skills",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "GetSkillInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 87,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L87"
      },
      "router": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 87,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L87"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "f48e781f",
      "interpretation": {
        "sig": "f48e781f",
        "summary": "Fetches one Skill's full detail including its body text, gated so `DRAFT` skills stay hidden from anyone without edit rights and the caller's role/permission flags come back alongside it.",
        "models": [
          {
            "model": "Skill",
            "service": "lawrence-api"
          },
          {
            "model": "SkillOwnerTeam",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:skills.create",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "skills.create",
      "module": "skills",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CreateSkillInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 94,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L94"
      },
      "router": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 94,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L94"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "bdb6faea",
      "interpretation": {
        "sig": "bdb6faea",
        "summary": "Creates a new `Skill` (name, description, body, status) scoped to the caller's own firm, with owner teams limited to teams the caller administers; the creator becomes its implicit admin without a stored access row.",
        "models": [
          {
            "model": "Skill",
            "service": "lawrence-api"
          },
          {
            "model": "SkillOwnerTeam",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:skills.refineSkill",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "skills.refineSkill",
      "module": "skills",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 101,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L101"
      },
      "router": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 101,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L101"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "cca355a5",
      "interpretation": {
        "sig": "cca355a5",
        "summary": "Sends a Skill's draft fields (what it does, when to use it, steps, legal knowledge, example) to Gemini via a Langfuse-managed prompt and returns AI-improved and gap-filled versions of those fields; despite being a mutation, it writes nothing to the database.",
        "flags": [
          "mutation only reads/generates, no db write"
        ]
      }
    },
    {
      "id": "lawrence-api:skills.update",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "skills.update",
      "module": "skills",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "UpdateSkillInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 127,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L127"
      },
      "router": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 127,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L127"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "be6f9761",
      "interpretation": {
        "sig": "be6f9761",
        "summary": "Updates a Skill's name, description, body, and/or status, after confirming the caller has edit rights on it (author, firm admin of its firm, or owner of one of its owner teams).",
        "models": [
          {
            "model": "Skill",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:skills.delete",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "skills.delete",
      "module": "skills",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "DeleteSkillInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 134,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L134"
      },
      "router": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 134,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L134"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "573773cb",
      "interpretation": {
        "sig": "573773cb",
        "summary": "Soft-deletes a Skill by setting `deletedAt`, after checking the caller holds delete rights on it.",
        "models": [
          {
            "model": "Skill",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:skills.incrementUsage",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "skills.incrementUsage",
      "module": "skills",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "IncrementSkillUsageInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 141,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L141"
      },
      "router": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 141,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L141"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "c36e647e",
      "interpretation": {
        "sig": "c36e647e",
        "summary": "Bumps a Skill's `usageCount` by one after confirming it's visible and runnable (`PUBLISHED`) for the caller; nothing in the codebase currently calls this endpoint, so no usage is actually being recorded yet.",
        "flags": [
          "looks unused",
          "soft counter, can over-count on retries"
        ],
        "models": [
          {
            "model": "Skill",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:skills.listAccess",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "skills.listAccess",
      "module": "skills",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ListSkillAccessInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 148,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L148"
      },
      "router": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 148,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L148"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "d3b822f3",
      "interpretation": {
        "sig": "d3b822f3",
        "summary": "Lists the explicit access grants (which users, teams, or the firm hold `EDITOR` or `USER` access) on a Skill, gated to callers who can manage that skill's access.",
        "models": [
          {
            "model": "SkillAccess",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:skills.setAccess",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "skills.setAccess",
      "module": "skills",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "SetSkillAccessInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 163,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L163"
      },
      "router": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 163,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L163"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.listFirmMembers",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.listFirmMembers",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/listFirmMembers.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "6c38f1f5",
      "interpretation": {
        "sig": "6c38f1f5",
        "summary": "Replaces the full set of access grants on a Skill in one transaction (deletes all existing rows, then recreates from the submitted list), after checking the caller can manage access and that every target (firm, team, or individual firm member) is within bounds they're allowed to grant.",
        "models": [
          {
            "model": "SkillAccess",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:skills.listOwnerTeams",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "skills.listOwnerTeams",
      "module": "skills",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ListSkillOwnerTeamsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 170,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L170"
      },
      "router": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 170,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L170"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "de37ba28",
      "interpretation": {
        "sig": "de37ba28",
        "summary": "Lists the team ids that administer a given Skill; nothing in the codebase currently calls this endpoint.",
        "flags": [
          "looks unused"
        ],
        "models": [
          {
            "model": "SkillOwnerTeam",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lawrence-api:skills.setOwnerTeams",
      "api": "lawrence-api",
      "origin": "lawrence-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "lawrenceApiTRPCRouter",
      "mounts": [
        "/trpc/"
      ],
      "callers": [
        "legal-os"
      ],
      "path": "skills.setOwnerTeams",
      "module": "skills",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "SetSkillOwnerTeamsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 177,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L177"
      },
      "router": {
        "file": "apis/lawrence-api/src/skills/router.ts",
        "line": 177,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/skills/router.ts#L177"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "ai",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "45f76885",
      "interpretation": {
        "sig": "45f76885",
        "summary": "Replaces the owner-team list on a Skill in one transaction, restricted to teams the caller administers; nothing in the codebase currently calls this endpoint.",
        "flags": [
          "looks unused"
        ],
        "models": [
          {
            "model": "SkillOwnerTeam",
            "service": "lawrence-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:lead.admin.getLead",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lead.admin.getLead",
      "module": "lead",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/lead/procedure/getLead.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/procedure/getLead.query.ts#L7"
      },
      "router": {
        "file": "apis/lead-api/src/lead/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/router.ts#L28"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "work-service",
            "path": "quote.getQuotesByLeadId",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuotesByLeadId",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuotesByLeadId.query.ts#L6",
            "domain": "deal"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "b81ab46d",
      "interpretation": {
        "sig": "b81ab46d",
        "summary": "Loads one lead for the admin console with its originating and completing prospects and meetings, then adds the lead's quotes fetched from `work-service`. Read-only.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          },
          {
            "model": "Prospect",
            "service": "lead-api"
          },
          {
            "model": "Meeting",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:lead.admin.listLeadsWithProspects",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lead.admin.listLeadsWithProspects",
      "module": "lead",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListLeadsWithProspectsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/lead/procedure/listLeadsWithProspects.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/procedure/listLeadsWithProspects.query.ts#L8"
      },
      "router": {
        "file": "apis/lead-api/src/lead/router.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/router.ts#L29"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "945e02d9",
      "interpretation": {
        "sig": "945e02d9",
        "summary": "Lists leads for the admin console with filtering (status, id, name, email, phone, market), sorting, and pagination, including each lead's originating and completing prospect. Read-only.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          },
          {
            "model": "Prospect",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:lead.admin.rejectLead",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lead.admin.rejectLead",
      "module": "lead",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/lead/procedure/rejectLead.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/procedure/rejectLead.mutation.ts#L8"
      },
      "router": {
        "file": "apis/lead-api/src/lead/router.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/router.ts#L30"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [
        "lead-api/lead.turned-away"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "42e8b2fe",
      "interpretation": {
        "sig": "42e8b2fe",
        "summary": "Marks a lead `TURNED_AWAY` with the given reason, publishes `lead-api/lead.turned-away`, and cancels any pending call slots still booked for that lead.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          },
          {
            "model": "Meeting",
            "service": "lead-api"
          }
        ],
        "flags": [
          "direct-prisma write despite facts flagging a read/write mismatch"
        ]
      }
    },
    {
      "id": "lead-api:lead.admin.createLeadsWithProspects",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lead.admin.createLeadsWithProspects",
      "module": "lead",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateLeadsWithProspectMutationInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/lead/procedure/createLeadsWithProspects.mutation.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/procedure/createLeadsWithProspects.mutation.ts#L11"
      },
      "router": {
        "file": "apis/lead-api/src/lead/router.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/router.ts#L31"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "8151c101",
      "interpretation": {
        "sig": "8151c101",
        "summary": "Bulk-creates prospects and their leads in one transaction, for admin backfill or import of multiple leads at once.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          },
          {
            "model": "Prospect",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:lead.admin.createLeadWithProspectAndCall",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lead.admin.createLeadWithProspectAndCall",
      "module": "lead",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateLeadWithProspectAndCallInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/lead/procedure/createLeadWithProspectAndCall.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/procedure/createLeadWithProspectAndCall.mutation.ts#L6"
      },
      "router": {
        "file": "apis/lead-api/src/lead/router.ts",
        "line": 32,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/router.ts#L32"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "sales",
      "triggers": [
        "lead-api/call.recordingUpdated",
        "lead-api/call.transcriptUpdated"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "31557cbc",
      "interpretation": {
        "sig": "31557cbc",
        "summary": "Creates a prospect and lead (plus initial session tracking data if provided), optionally records an associated call, then registers the deal as a new opportunity in Close CRM using the creating admin's identity.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          },
          {
            "model": "Prospect",
            "service": "lead-api"
          },
          {
            "model": "TrackingData",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:lead.admin.updateLeadJurisdiction",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lead.admin.updateLeadJurisdiction",
      "module": "lead",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/lead/procedure/updateLeadJurisdiction.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/procedure/updateLeadJurisdiction.mutation.ts#L6"
      },
      "router": {
        "file": "apis/lead-api/src/lead/router.ts",
        "line": 33,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/router.ts#L33"
      },
      "hops": {
        "direct": 1,
        "services": [
          "product-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "product-service",
            "path": "jurisdictions.listJurisdictions",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:jurisdictions.listJurisdictions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listJurisdictions.query.ts#L6",
            "domain": null
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "a8e0856a",
      "interpretation": {
        "sig": "a8e0856a",
        "summary": "Validates the jurisdiction against `product-service`, then sets the lead's `jurisdictionId`.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          }
        ],
        "flags": [
          "direct-prisma write despite facts flagging a read/write mismatch"
        ]
      }
    },
    {
      "id": "lead-api:lead.admin.updateLeadMarket",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lead.admin.updateLeadMarket",
      "module": "lead",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/lead/procedure/updateLeadMarket.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/procedure/updateLeadMarket.mutation.ts#L7"
      },
      "router": {
        "file": "apis/lead-api/src/lead/router.ts",
        "line": 34,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/router.ts#L34"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "297a960f",
      "interpretation": {
        "sig": "297a960f",
        "summary": "Changes which market a lead belongs to.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          }
        ],
        "flags": [
          "direct-prisma write despite facts flagging a read/write mismatch"
        ]
      }
    },
    {
      "id": "lead-api:lead.getFeeAgreementScopes",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lead.getFeeAgreementScopes",
      "module": "lead",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/lead/procedure/getFeeAgreementScopes.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/procedure/getFeeAgreementScopes.query.ts#L6"
      },
      "router": {
        "file": "apis/lead-api/src/lead/router.ts",
        "line": 36,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/router.ts#L36"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "scope.listScopesForFeeAgreement",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:scope.listScopesForFeeAgreement",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/scope/router.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "aabe5433",
      "interpretation": {
        "sig": "aabe5433",
        "summary": "Returns the `work-service` scopes attached to a fee agreement. Pure passthrough read, no app calls it.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "lead-api:lead.getLeadStatus",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lead.getLeadStatus",
      "module": "lead",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicProcedure",
        "base": "publicProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "getLeadStatusInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/lead/procedure/getLeadStatus.query.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/procedure/getLeadStatus.query.ts#L14"
      },
      "router": {
        "file": "apis/lead-api/src/lead/router.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/router.ts#L37"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "quote.getQuote",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuote.query.ts#L6",
            "domain": "deal"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "61d46221",
      "interpretation": {
        "sig": "b1ac0a19",
        "summary": "Looks up a lead by `leadId` or by its `quoteId` and returns its status, prospect, and meetings, plus the linked quote's status from `work-service` if a `quoteId` is given. Exposed as both a tRPC query and a public GET /lead REST route; nothing appears to call either.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "lead-api:lead.setLeadProblemDescription",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lead.setLeadProblemDescription",
      "module": "lead",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicProcedure",
        "base": "publicProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "inputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/lead/procedure/setLeadProblemDescription.mutation.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/procedure/setLeadProblemDescription.mutation.ts#L17"
      },
      "router": {
        "file": "apis/lead-api/src/lead/router.ts",
        "line": 38,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/router.ts#L38"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "99603488",
      "interpretation": {
        "sig": "e7786181",
        "summary": "Sets the problem description text on a lead. Public, unauthenticated, exposed as both a tRPC mutation and POST /lead/problem-description.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          }
        ],
        "flags": [
          "direct-prisma write despite facts flagging a read/write mismatch"
        ]
      }
    },
    {
      "id": "lead-api:lead.setLeadLocation",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lead.setLeadLocation",
      "module": "lead",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicProcedure",
        "base": "publicProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "inputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/lead/procedure/setLeadLocation.mutation.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/procedure/setLeadLocation.mutation.ts#L31"
      },
      "router": {
        "file": "apis/lead-api/src/lead/router.ts",
        "line": 39,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/router.ts#L39"
      },
      "hops": {
        "direct": 1,
        "services": [
          "product-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "product-service",
            "path": "jurisdictions.listJurisdictions",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:jurisdictions.listJurisdictions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listJurisdictions.query.ts#L6",
            "domain": null
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "a7118881",
      "interpretation": {
        "sig": "eb305eda",
        "summary": "Sets a lead's jurisdiction (accepts a legacy 'state' field or `jurisdictionId`). Public, unauthenticated, exposed as both a tRPC mutation and POST /lead/location; nothing appears to call either.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          }
        ],
        "flags": [
          "direct-prisma write despite facts flagging a read/write mismatch",
          "looks unused"
        ]
      }
    },
    {
      "id": "lead-api:lead.createLead",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lead.createLead",
      "module": "lead",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicProcedure",
        "base": "publicProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CreateLeadInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/lead/procedure/createLead.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/procedure/createLead.mutation.ts#L14"
      },
      "router": {
        "file": "apis/lead-api/src/lead/router.ts",
        "line": 40,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/router.ts#L40"
      },
      "hops": {
        "direct": 1,
        "services": [
          "product-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "product-service",
            "path": "jurisdictions.listJurisdictions",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:jurisdictions.listJurisdictions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listJurisdictions.query.ts#L6",
            "domain": null
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "faac2ce1",
      "interpretation": {
        "sig": "fb2e06ba",
        "summary": "Validates the jurisdiction against `product-service` then creates a new lead with status `INCOMPLETE` and initial session tracking data. Public, unauthenticated, exposed as both a tRPC mutation and PUT /lead; nothing appears to call either.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          },
          {
            "model": "TrackingData",
            "service": "lead-api"
          }
        ],
        "flags": [
          "direct-prisma write despite facts flagging a read/write mismatch",
          "looks unused"
        ]
      }
    },
    {
      "id": "lead-api:quote.getByLeadId",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "quote.getByLeadId",
      "module": "quote",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/quote/procedures/getQuotesByLeadId.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/procedures/getQuotesByLeadId.query.ts#L6"
      },
      "router": {
        "file": "apis/lead-api/src/quote/router.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/router.ts#L30"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "quote.getQuotesByLeadId",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuotesByLeadId",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuotesByLeadId.query.ts#L6",
            "domain": "deal"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "e4b94596",
      "interpretation": {
        "sig": "e4b94596",
        "summary": "Looks up all quotes tied to a lead ID by forwarding the call to `work-service`. No caller in apps or services reaches this endpoint.",
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "lead-api:quote.getAllData",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "quote.getAllData",
      "module": "quote",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/quote/procedures/getAllQuoteData.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/procedures/getAllQuoteData.query.ts#L6"
      },
      "router": {
        "file": "apis/lead-api/src/quote/router.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/router.ts#L31"
      },
      "hops": {
        "direct": 3,
        "services": [
          "work-service",
          "assignment-service",
          "identity-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "quote.getQuote",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuote.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "assignment-service",
            "path": "getAssignment",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:getAssignment",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/getAssignment.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          },
          {
            "service": "work-service",
            "path": "bill.listBills",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:bill.listBills",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/bill/procedures/listBills.query.ts#L6",
            "domain": "deal"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "a0f33d18",
      "interpretation": {
        "sig": "a0f33d18",
        "summary": "Assembles the full picture of one quote for admin/ops: the quote itself, its lead, the assigned firm, and any bills tied to its fee agreements, plus a marketplace checkout link if the quote came from a lead.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:quote.getEditData",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "quote.getEditData",
      "module": "quote",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/quote/procedures/getEditQuoteData.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/procedures/getEditQuoteData.query.ts#L6"
      },
      "router": {
        "file": "apis/lead-api/src/quote/router.ts",
        "line": 32,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/router.ts#L32"
      },
      "hops": {
        "direct": 3,
        "services": [
          "work-service",
          "assignment-service",
          "identity-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "quote.getQuote",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuote.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "assignment-service",
            "path": "getAssignment",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:getAssignment",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/getAssignment.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          },
          {
            "service": "work-service",
            "path": "bill.listBills",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:bill.listBills",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/bill/procedures/listBills.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "assignment-service",
            "path": "feePlan.getCurrent",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:feePlan.getCurrent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/feePlan/procedures/getCurrentFeePlan.query.ts#L13",
            "domain": "deal"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "ca72ab9",
      "interpretation": {
        "sig": "ca72ab9",
        "summary": "Builds the data an admin quote-edit screen needs: everything from `quote.getAllData` plus which sections (jurisdiction, prospect, lawyer, fee agreement) are still editable, and the assigned lawyer's identity and current fee plan.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:quote.create",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "quote.create",
      "module": "quote",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateQuoteMutationInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/quote/procedures/createQuote.mutation.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/procedures/createQuote.mutation.ts#L18"
      },
      "router": {
        "file": "apis/lead-api/src/quote/router.ts",
        "line": 33,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/router.ts#L33"
      },
      "hops": {
        "direct": 3,
        "services": [
          "identity-service",
          "product-service",
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "product-service",
            "path": "jurisdictions.listJurisdictions",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:jurisdictions.listJurisdictions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listJurisdictions.query.ts#L6",
            "domain": null
          },
          {
            "service": "work-service",
            "path": "quote.create",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/createQuote.mutation.ts#L5",
            "domain": "deal"
          },
          {
            "service": "work-service",
            "path": "quote.getQuote",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuote.query.ts#L6",
            "domain": "deal"
          }
        ]
      },
      "domain": "sales",
      "triggers": [
        "lead-api/lead.event.captured"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4f484acb",
      "interpretation": {
        "sig": "4f484acb",
        "summary": "Creates a marketplace quote for a lead: validates the assigned lawyer, syncs the lead's jurisdiction and prospect details, calls `work-service` to create the quote, and marks the lead `QUOTED` (setting its `quoteId` unless an existing quote is already `COMPLETED`). Sends a Customer.io `quote_created` event and publishes the `lead-api/lead.event.captured` Inngest event.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:quote.createDraft",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "quote.createDraft",
      "module": "quote",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateDraftQuoteMutationInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/quote/procedures/createDraftQuote.mutation.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/procedures/createDraftQuote.mutation.ts#L19"
      },
      "router": {
        "file": "apis/lead-api/src/quote/router.ts",
        "line": 34,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/router.ts#L34"
      },
      "hops": {
        "direct": 2,
        "services": [
          "product-service",
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "product-service",
            "path": "jurisdictions.listJurisdictions",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:jurisdictions.listJurisdictions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listJurisdictions.query.ts#L6",
            "domain": null
          },
          {
            "service": "work-service",
            "path": "quote.createDraft",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.createDraft",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/createDraftQuote.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "78c35c99",
      "interpretation": {
        "sig": "78c35c99",
        "summary": "Creates a `DRAFT` marketplace quote for a lead after syncing the lead's jurisdiction and prospect details, delegating the actual quote write to `work-service`. Draft quotes are not sent to the client and do not touch lead status or fire any event.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:quote.updateDraft",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "quote.updateDraft",
      "module": "quote",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateDraftQuoteMutationInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/quote/procedures/updateDraftQuote.mutation.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/procedures/updateDraftQuote.mutation.ts#L30"
      },
      "router": {
        "file": "apis/lead-api/src/quote/router.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/router.ts#L35"
      },
      "hops": {
        "direct": 2,
        "services": [
          "product-service",
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "product-service",
            "path": "jurisdictions.listJurisdictions",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:jurisdictions.listJurisdictions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listJurisdictions.query.ts#L6",
            "domain": null
          },
          {
            "service": "work-service",
            "path": "quote.updateDraft",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.updateDraft",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/updateDraftQuote.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "450a429e",
      "interpretation": {
        "sig": "450a429e",
        "summary": "Updates an existing `DRAFT` quote's title, description, expiry, jurisdiction, fee agreements and assigned firm/lawyer, syncing lead jurisdiction and prospect details first and stashing the assigned lawyer/firm IDs into the quote's metadata for `work-service`.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:quote.sendDraft",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "quote.sendDraft",
      "module": "quote",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "SendDraftQuoteMutationInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/quote/procedures/sendDraftQuote.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/procedures/sendDraftQuote.mutation.ts#L14"
      },
      "router": {
        "file": "apis/lead-api/src/quote/router.ts",
        "line": 36,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/router.ts#L36"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "work-service",
            "path": "quote.sendDraft",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.sendDraft",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/sendDraftQuote.mutation.ts#L5",
            "domain": "deal"
          },
          {
            "service": "work-service",
            "path": "quote.getQuote",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuote.query.ts#L6",
            "domain": "deal"
          }
        ]
      },
      "domain": "sales",
      "triggers": [
        "lead-api/lead.event.captured"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3139b6e9",
      "interpretation": {
        "sig": "3139b6e9",
        "summary": "Sends a draft quote to the prospect: validates the assigned lawyer, asks `work-service` to send it against the prospect's Stripe billing details, marks the lead `QUOTED` (setting its `quoteId` unless a prior quote is already `COMPLETED`), fires a Customer.io `quote_created` event, and publishes `lead-api/lead.event.captured`.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:quote.edit",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "quote.edit",
      "module": "quote",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "EditQuoteMutationInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/quote/procedures/editQuote.mutation.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/procedures/editQuote.mutation.ts#L24"
      },
      "router": {
        "file": "apis/lead-api/src/quote/router.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/router.ts#L37"
      },
      "hops": {
        "direct": 3,
        "services": [
          "identity-service",
          "product-service",
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "product-service",
            "path": "jurisdictions.listJurisdictions",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:jurisdictions.listJurisdictions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listJurisdictions.query.ts#L6",
            "domain": null
          },
          {
            "service": "work-service",
            "path": "quote.update",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/updateQuote.mutation.ts#L15",
            "domain": "deal"
          }
        ]
      },
      "domain": "sales",
      "triggers": [
        "lead-api/lead.event.captured"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "8ea2218f",
      "interpretation": {
        "sig": "8ea2218f",
        "summary": "Edits a live marketplace quote (title, description, fee agreements, jurisdiction, lawyer, prospect) after validating the new assigned lawyer and syncing jurisdiction/prospect details, delegating the write to `work-service`. Fires `lead-api/lead.event.captured` (`quote_edited`) plus Customer.io `quote_edited` and `quote_created` events."
      }
    },
    {
      "id": "lead-api:quote.createCheckoutURL",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "quote.createCheckoutURL",
      "module": "quote",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicProcedure",
        "base": "publicProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "inputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/quote/procedures/createQuoteCheckoutURL.mutation.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/procedures/createQuoteCheckoutURL.mutation.ts#L19"
      },
      "router": {
        "file": "apis/lead-api/src/quote/router.ts",
        "line": 38,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/router.ts#L38"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "quote.createQuoteCheckoutURL",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.createQuoteCheckoutURL",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/createQuoteCheckoutURL.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "10c54474",
      "interpretation": {
        "sig": "10c54474",
        "summary": "Generates a Stripe checkout URL for a quote by asking `work-service` to create it; exposed as both a tRPC mutation and a public REST route (`POST /quote/checkout-url`) with no auth required."
      }
    },
    {
      "id": "lead-api:quote.getAutoAssignedLawyer",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "quote.getAutoAssignedLawyer",
      "module": "quote",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "listAssignableLawyersInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/quote/procedures/getAutoAssignedLawyer.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/procedures/getAutoAssignedLawyer.query.ts#L5"
      },
      "router": {
        "file": "apis/lead-api/src/quote/router.ts",
        "line": 39,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/router.ts#L39"
      },
      "hops": {
        "direct": 3,
        "services": [
          "assignment-service",
          "identity-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "assignment-service",
            "path": "listAssignableLawyers",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:listAssignableLawyers",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/firmEmployeeToProduct/procedures/listAssignableLawyers.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "matterParticipant.admin.countMattersForPersons",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterParticipant.admin.countMattersForPersons",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/admin/countMattersForPersons.query.ts#L17",
            "domain": "matters"
          },
          {
            "service": "assignment-service",
            "path": "feePlan.list",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:feePlan.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/feePlan/procedures/listFeePlans.query.ts#L14",
            "domain": "deal"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "b4919d86",
      "interpretation": {
        "sig": "b4919d86",
        "summary": "Picks a lawyer at random from the pool of active, assignable lawyers for a product/jurisdiction and returns them together with their firm's active fee plan. Throws if no active lawyer or fee plan is found."
      }
    },
    {
      "id": "lead-api:quote.getFeeAgreementAssignment",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "quote.getFeeAgreementAssignment",
      "module": "quote",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "getFeeAgreementAssignmentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/quote/procedures/getFeeAgreementAssignment.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/procedures/getFeeAgreementAssignment.query.ts#L5"
      },
      "router": {
        "file": "apis/lead-api/src/quote/router.ts",
        "line": 40,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/router.ts#L40"
      },
      "hops": {
        "direct": 2,
        "services": [
          "assignment-service",
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "assignment-service",
            "path": "getAssignment",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:getAssignment",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/getAssignment.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "ca0c7aad",
      "interpretation": {
        "sig": "ca0c7aad",
        "summary": "Looks up the assignment for a fee agreement and returns the assigned firm, the lawyer's identity, and their firm membership ID."
      }
    },
    {
      "id": "lead-api:quote.listAssignableLawyers",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "quote.listAssignableLawyers",
      "module": "quote",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "listAssignableLawyersInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/quote/procedures/listAssignableLawyers.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/procedures/listAssignableLawyers.ts#L5"
      },
      "router": {
        "file": "apis/lead-api/src/quote/router.ts",
        "line": 41,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/router.ts#L41"
      },
      "hops": {
        "direct": 3,
        "services": [
          "assignment-service",
          "identity-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "assignment-service",
            "path": "listAssignableLawyers",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:listAssignableLawyers",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/firmEmployeeToProduct/procedures/listAssignableLawyers.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "matterParticipant.admin.countMattersForPersons",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterParticipant.admin.countMattersForPersons",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/admin/countMattersForPersons.query.ts#L17",
            "domain": "matters"
          },
          {
            "service": "assignment-service",
            "path": "feePlan.list",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:feePlan.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/feePlan/procedures/listFeePlans.query.ts#L14",
            "domain": "deal"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "80395360",
      "interpretation": {
        "sig": "80395360",
        "summary": "Lists lawyers eligible for assignment to a given product/jurisdiction, combining `assignment-service` eligibility with identity records, matter counts per lawyer, and each firm's active fee plan."
      }
    },
    {
      "id": "lead-api:quote.getCustomerQuoteInformation",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "quote.getCustomerQuoteInformation",
      "module": "quote",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicProcedure",
        "base": "publicProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "getCustomerQuoteInformationInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/quote/procedures/getCustomerQuoteInformation.query.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/procedures/getCustomerQuoteInformation.query.ts#L14"
      },
      "router": {
        "file": "apis/lead-api/src/quote/router.ts",
        "line": 42,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/router.ts#L42"
      },
      "hops": {
        "direct": 2,
        "services": [
          "work-service",
          "product-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "quote.getClientQuote",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getClientQuote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getClientQuote.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "product-service",
            "path": "jurisdictions.listJurisdictions",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:jurisdictions.listJurisdictions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listJurisdictions.query.ts#L6",
            "domain": null
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "c068d75c",
      "interpretation": {
        "sig": "96f0910c",
        "summary": "Public, unauthenticated endpoint that returns a client-facing view of a quote: the quote, its bill, jurisdiction name, and the prospect's name and email. Nothing in apps or services currently calls it.",
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "lead-api:quote.getQuoteLsa",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "quote.getQuoteLsa",
      "module": "quote",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "write",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicProcedure",
        "base": "publicProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "inputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/quote/procedures/getQuoteLsa.query.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/procedures/getQuoteLsa.query.ts#L18"
      },
      "router": {
        "file": "apis/lead-api/src/quote/router.ts",
        "line": 43,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/router.ts#L43"
      },
      "hops": {
        "direct": 3,
        "services": [
          "work-service",
          "assignment-service",
          "identity-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "quote.getQuote",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuote.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "assignment-service",
            "path": "listAssignments",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:listAssignments",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/listAssignments.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "firm.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/listFirms.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "work-service",
            "path": "quote.createQuoteCheckoutURL",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.createQuoteCheckoutURL",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/createQuoteCheckoutURL.mutation.ts#L5",
            "domain": "deal"
          },
          {
            "service": "work-service",
            "path": "quote.getQuoteLSA",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuoteLSA",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuoteLSA.query.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "744c48b1",
      "interpretation": {
        "sig": "c71f1021",
        "summary": "Builds the Legal Services Agreement content for a quote's fee agreements (assignments, firms, signers) and, for `ACTIVE` quotes, also creates a new Stripe checkout link as a side effect of an otherwise read-only lookup. Nothing currently calls this public endpoint.",
        "flags": [
          "read-that-writes",
          "usage.dead"
        ]
      }
    },
    {
      "id": "lead-api:quote.updateLawyerAssignment",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "quote.updateLawyerAssignment",
      "module": "quote",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "updateLawyerAssignmentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/quote/procedures/updateLawyerAssignment.mutation.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/procedures/updateLawyerAssignment.mutation.ts#L17"
      },
      "router": {
        "file": "apis/lead-api/src/quote/router.ts",
        "line": 44,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/router.ts#L44"
      },
      "hops": {
        "direct": 3,
        "services": [
          "identity-service",
          "work-service",
          "assignment-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.getFirmMember",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getFirmMember",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getFirmMember.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "work-service",
            "path": "quote.getQuote",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuote.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "assignment-service",
            "path": "isLawyerAssignable",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:isLawyerAssignable",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/firmEmployeeToProduct/procedures/isLawyerAssignable.query.ts#L12",
            "domain": "deal"
          },
          {
            "service": "assignment-service",
            "path": "createReassignment",
            "kind": "write",
            "inferred": false,
            "targetId": "assignment-service:createReassignment",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/createReassignment.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "7802a958",
      "interpretation": {
        "sig": "7802a958",
        "summary": "Reassigns a quote's fee agreements to a new firm member: checks the new lawyer is assignable for the relevant legal products and jurisdiction, then creates a reassignment in `assignment-service` for the quote's matter."
      }
    },
    {
      "id": "lead-api:quote.cancelQuote",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "quote.cancelQuote",
      "module": "quote",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/quote/procedures/cancelQuote.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/procedures/cancelQuote.mutation.ts#L6"
      },
      "router": {
        "file": "apis/lead-api/src/quote/router.ts",
        "line": 45,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/router.ts#L45"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "quote.cancelQuote",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.cancelQuote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/cancelQuote.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "sales",
      "triggers": [
        "work-service/quote.cancelled"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "470015ba",
      "interpretation": {
        "sig": "470015ba",
        "summary": "Cancels a quote by delegating to `work-service`, which marks it `CANCELLED` and publishes `work-service/quote.cancelled`. Called from other services, not directly from apps.",
        "flags": [
          "usage.serviceOnly"
        ]
      }
    },
    {
      "id": "lead-api:quote.list",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "quote.list",
      "module": "quote",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListQuotesSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/quote/procedures/listQuotes.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/procedures/listQuotes.query.ts#L5"
      },
      "router": {
        "file": "apis/lead-api/src/quote/router.ts",
        "line": 46,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/router.ts#L46"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "quote.admin.list",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.admin.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/listQuotes.query.ts#L8",
            "domain": "deal"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "ce47b016",
      "interpretation": {
        "sig": "ce47b016",
        "summary": "Lists quotes for admin/ops, filtered by pagination, sort, and the caller's market, by delegating to `work-service`'s admin quote list. Read-only, nothing changes.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "lead-api:quote.updateNotes",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "quote.updateNotes",
      "module": "quote",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateQuoteNotesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/quote/procedures/updateQuoteNotes.mutation.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/procedures/updateQuoteNotes.mutation.ts#L13"
      },
      "router": {
        "file": "apis/lead-api/src/quote/router.ts",
        "line": 47,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/router.ts#L47"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "quote.updateNotes",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.updateNotes",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/updateQuoteNotes.mutation.ts#L13",
            "domain": "deal"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "16236369",
      "interpretation": {
        "sig": "16236369",
        "summary": "Lets an admin with the `can_manage_marketplace` grant edit a quote's internal description/notes, delegating the write to `work-service`'s `quote.updateNotes`.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "lead-api:lasCall.bookCallSlot",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.bookCallSlot",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicProcedure",
        "base": "publicProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CallSlotInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/call/procedure/bookCallSlot.mutation.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/bookCallSlot.mutation.ts#L17"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L37"
      },
      "hops": {
        "direct": 1,
        "services": [
          "noAuthIdentity"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "noAuthIdentity",
            "path": "identity.getOrCreateFromEmail",
            "kind": "write",
            "inferred": false,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "sales",
      "triggers": [
        "lead-api/meeting.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "eed27c7a",
      "interpretation": {
        "sig": "1f290a9d",
        "summary": "Books a SavvyCal slot for a lead's prospect: creates the event in SavvyCal, finds or creates the identity for the organiser, then creates a `Meeting` record (`PENDING`) in `lead-api`'s DB and fires `meeting.created`.",
        "models": [
          {
            "model": "Meeting",
            "service": "lead-api"
          },
          {
            "model": "Lead",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:lasCall.cancelCallSlot",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.cancelCallSlot",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicProcedure",
        "base": "publicProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "inputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/call/procedure/cancelCallSlot.mutation.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/cancelCallSlot.mutation.ts#L17"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 38,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L38"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "b52b8d0a",
      "interpretation": {
        "sig": "a8719377",
        "summary": "Cancels a booked call: for a `SAVVYCAL` meeting it cancels the SavvyCal event and sets the `Meeting` to `CANCELLED` in the DB; for a `CALLBACK` meeting it delegates to `cancelInstantCall`. Direct Prisma write despite the facts mechanism field showing none.",
        "models": [
          {
            "model": "Meeting",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:lasCall.getCallSlotAvailability",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.getCallSlotAvailability",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicProcedure",
        "base": "publicProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CallSlotAvailabilityInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/call/procedure/getCallSlotAvailability.query.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/getCallSlotAvailability.query.ts#L12"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 39,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L39"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "188f6562",
      "interpretation": {
        "sig": "eeddeb1e",
        "summary": "Returns open SavvyCal slots for the requested window by calling the SavvyCal API directly. Pure read, no local storage touched."
      }
    },
    {
      "id": "lead-api:lasCall.rescheduleCallSlot",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.rescheduleCallSlot",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicProcedure",
        "base": "publicProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "RescheduleCallSlotInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/call/procedure/rescheduleCallSlot.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/rescheduleCallSlot.mutation.ts#L14"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 40,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L40"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [
        "lead-api/meeting.rescheduled"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "9cdd1789",
      "interpretation": {
        "sig": "b1f64e80",
        "summary": "Moves a SavvyCal meeting to a new time: creates a new SavvyCal event, updates the `Meeting` record with the new event id/URL/times, cancels the old SavvyCal event, and fires `meeting.rescheduled`. Nothing in the codebase calls this endpoint.",
        "models": [
          {
            "model": "Meeting",
            "service": "lead-api"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "lead-api:lasCall.listSavvyCalMeetings",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.listSavvyCalMeetings",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/call/procedure/listSavvyCalMeetings.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/listSavvyCalMeetings.query.ts#L6"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 41,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L41"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "f8ba2254",
      "interpretation": {
        "sig": "f8ba2254",
        "summary": "Lists SavvyCal `Meeting` records for admin/ops, optionally filtered by `leadId` and `meetingStatus`.",
        "models": [
          {
            "model": "Meeting",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:lasCall.createCall",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.createCall",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateCallInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/call/procedure/createCall.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/createCall.mutation.ts#L6"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 42,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L42"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [
        "lead-api/call.recordingUpdated",
        "lead-api/call.transcriptUpdated"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "2cad8815",
      "interpretation": {
        "sig": "2cad8815",
        "summary": "Creates a `Call` record for a lead. When the input includes a `source` and `externalId` it also associates the call with the matching Amazon Connect contact: pulls contact details and transcript/recording S3 keys, updates the `Call`, and fires `call.recordingUpdated` / `call.transcriptUpdated` as available.",
        "models": [
          {
            "model": "Call",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:lasCall.createCallDisposition",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.createCallDisposition",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateCallDispositionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/call/procedure/createCallDisposition.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/createCallDisposition.mutation.ts#L6"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 43,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L43"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "ce6c5c96",
      "interpretation": {
        "sig": "ce6c5c96",
        "summary": "Creates a `CallDisposition` record for a call (outcome, notes, whether the caller was turned away), logging with call notes and turn-away reason redacted.",
        "models": [
          {
            "model": "CallDisposition",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:lasCall.createCallFromConnect",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.createCallFromConnect",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateCallFromConnectSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/call/procedure/createCallFromConnect.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/createCallFromConnect.mutation.ts#L6"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 44,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L44"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [
        "lead-api/call.recordingUpdated",
        "lead-api/call.transcriptUpdated"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "a0c2cc91",
      "interpretation": {
        "sig": "a0c2cc91",
        "summary": "Creates a `Call` record for a lead sourced directly from an Amazon Connect contact: pulls contact number/direction/S3 keys from Connect, writes the `Call` as source `CONNECT`, and fires `call.recordingUpdated` / `call.transcriptUpdated` as available.",
        "models": [
          {
            "model": "Call",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:lasCall.listCallsWithNoExternalId",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.listCallsWithNoExternalId",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/call/procedure/listCallsWithNoExternalId.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/listCallsWithNoExternalId.query.ts#L5"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 45,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L45"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "dae3ce30",
      "interpretation": {
        "sig": "dae3ce30",
        "summary": "Lists calls that have no `externalId`, `source`, or dismissal recorded yet (candidates for manual Connect association), paginated, with each call's lead/prospect and the `identity-service` person who handled it attached.",
        "models": [
          {
            "model": "Call",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:lasCall.dismissCallWithNoExternalId",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.dismissCallWithNoExternalId",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "DismissCallWithNoExternalIdInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/call/procedure/dismissCallWithNoExternalId.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/dismissCallWithNoExternalId.mutation.ts#L6"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 46,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L46"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c3340826",
      "interpretation": {
        "sig": "c3340826",
        "summary": "Marks a call with no external id as dismissed by creating an `UnassociatedCallDismissal` record, recording which admin dismissed it."
      }
    },
    {
      "id": "lead-api:lasCall.removeConnectCallAssociation",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.removeConnectCallAssociation",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RemoveConnectContactCallAssociationInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/call/procedure/removeConnectContactCallAssociation.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/removeConnectContactCallAssociation.mutation.ts#L6"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 47,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L47"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "7e76c850",
      "interpretation": {
        "sig": "7e76c850",
        "summary": "Clears a call's Amazon Connect link by nulling out `source`, `externalId`, `transcriptionS3Key`, and `recordingS3Key` on the `Call` record. Nothing in the codebase calls this endpoint.",
        "models": [
          {
            "model": "Call",
            "service": "lead-api"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "lead-api:lasCall.associateConnectContactWithCall",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.associateConnectContactWithCall",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "AssociateConnectCallWithContactCommandSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/call/procedure/associateConnectContactWithCall.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/associateConnectContactWithCall.mutation.ts#L6"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 48,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L48"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [
        "lead-api/call.recordingUpdated",
        "lead-api/call.transcriptUpdated"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "2a89fda1",
      "interpretation": {
        "sig": "2a89fda1",
        "summary": "Links an existing `Call` to an Amazon Connect contact: fetches contact details and S3 transcript/recording keys, updates the `Call` with them, and fires `call.recordingUpdated` / `call.transcriptUpdated` as available.",
        "models": [
          {
            "model": "Call",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:lasCall.getCall",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.getCall",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/call/procedure/getCall.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/getCall.query.ts#L5"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 49,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L49"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "d42add18",
      "interpretation": {
        "sig": "d42add18",
        "summary": "Fetches one `Call` with its disposition, generates signed CloudFront URLs for the transcript/recording if present, and attaches the handling person from `identity-service`."
      }
    },
    {
      "id": "lead-api:lasCall.getCallsForLead",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.getCallsForLead",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/call/procedure/adminGetCallsForLead.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/adminGetCallsForLead.query.ts#L5"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 50,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L50"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "606a8acd",
      "interpretation": {
        "sig": "606a8acd",
        "summary": "Lists all calls for a lead, each with signed transcript/recording URLs and the handling person from `identity-service` attached."
      }
    },
    {
      "id": "lead-api:lasCall.isConnectContactAssociated",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.isConnectContactAssociated",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/call/procedure/isConnectContactAssociated.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/isConnectContactAssociated.query.ts#L5"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 51,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L51"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "d92d7bba",
      "interpretation": {
        "sig": "d92d7bba",
        "summary": "Checks whether an Amazon Connect contact id is already linked to a `Call`, returning the `callId` if so."
      }
    },
    {
      "id": "lead-api:lasCall.call.availability",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.call.availability",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicProcedure",
        "base": "publicProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "CallSlotAvailabilityInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/call/procedure/getCallAvailability.query.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/getCallAvailability.query.ts#L12"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 53,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L53"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "39e4bcd8",
      "interpretation": {
        "sig": "39e4bcd8",
        "summary": "Returns the sales scheduling link's default call duration/increment plus open SavvyCal slots for the requested window. Nothing in the codebase calls this endpoint.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "lead-api:lasCall.protected.getCall",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.protected.getCall",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/call/procedure/getCallProtected.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/getCallProtected.query.ts#L5"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 56,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L56"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3f17354c",
      "interpretation": {
        "sig": "3f17354c",
        "summary": "Fetches one call record by id, including its disposition, generates short-lived signed CloudFront URLs for the recording and transcription if present, and enriches it with the caller's person record from `identity-service`.",
        "models": [
          {
            "model": "Call",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:lasCall.protected.getCallsForLead",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.protected.getCallsForLead",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "internal",
        "member": "service (internal JWT)",
        "kind": "internal",
        "builder": "protectedProcedure",
        "base": "protectedProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/lead-api/src/call/procedure/getCallsForLead.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/getCallsForLead.query.ts#L5"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 57,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L57"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9d06a470",
      "interpretation": {
        "sig": "9d06a470",
        "summary": "Lists all calls for a given lead, each with signed recording/transcription URLs and the associated person record pulled from `identity-service`.",
        "models": [
          {
            "model": "Call",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:instantCall.getAvailabilityForInstantCall",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "instantCall.getAvailabilityForInstantCall",
      "module": "instantCall",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicProcedure",
        "base": "publicProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "inputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/instantCall/procedure/getAvailabilityForInstantCall.query.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/instantCall/procedure/getAvailabilityForInstantCall.query.ts#L37"
      },
      "router": {
        "file": "apis/lead-api/src/instantCall/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/instantCall/router.ts#L11"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "ac7ee906",
      "interpretation": {
        "sig": "90fc712",
        "summary": "Checks AWS Connect queue metrics and hours of operation to report whether the instant-callback queue and the inbound-call queue can take a new call right now, with a reason when they can't (queue disabled, outside hours, no agents, queue full, or wait time over 30 minutes).",
        "flags": []
      }
    },
    {
      "id": "lead-api:instantCall.bookInstantCall",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "instantCall.bookInstantCall",
      "module": "instantCall",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicProcedure",
        "base": "publicProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "InstantCallInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/instantCall/procedure/bookInstantCall.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/instantCall/procedure/bookInstantCall.mutation.ts#L14"
      },
      "router": {
        "file": "apis/lead-api/src/instantCall/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/instantCall/router.ts#L12"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [
        "lead-api/meeting.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "90d9647b",
      "interpretation": {
        "sig": "7c490a7e",
        "summary": "Books an instant callback for a lead: creates a `PENDING` `CALLBACK` meeting, fires the `lead-api/meeting.created` Inngest event, starts a task contact in AWS Connect with the lead's phone/email/quote links, then stores the returned Connect contact ID on the meeting. Returns the existing meeting instead of duplicating one if the lead already has a pending callback.",
        "flags": [
          "looks unused (no callers found)"
        ]
      }
    },
    {
      "id": "lead-api:prospect.setLeadProspectDetails",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "prospect.setLeadProspectDetails",
      "module": "prospect",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicProcedure",
        "base": "publicProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "SetLeadProspectDetailsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/prospect/procedure/setLeadProspectDetails.mutation.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/prospect/procedure/setLeadProspectDetails.mutation.ts#L13"
      },
      "router": {
        "file": "apis/lead-api/src/prospect/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/prospect/router.ts#L13"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [
        "lead-api/lead.event.captured"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "5d1c669c",
      "interpretation": {
        "sig": "4b68192d",
        "summary": "Attaches an originating Prospect (name, email, phone) to an existing Lead and flips the lead to `NEW`, then publishes `lead.event.captured` (`intake_contact_submitted`) for downstream Inngest processing. No auth is required to call it, and nothing in the app or services currently calls it.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          },
          {
            "model": "Prospect",
            "service": "lead-api"
          }
        ],
        "flags": [
          "looks unused",
          "no-auth mutation"
        ]
      }
    },
    {
      "id": "lead-api:prospect.setLeadCompletingProspectDetails",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "prospect.setLeadCompletingProspectDetails",
      "module": "prospect",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "SetLeadProspectDetailsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/prospect/procedure/setLeadCompletingProspectDetails.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/prospect/procedure/setLeadCompletingProspectDetails.mutation.ts#L7"
      },
      "router": {
        "file": "apis/lead-api/src/prospect/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/prospect/router.ts#L14"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "7df34d5c",
      "interpretation": {
        "sig": "7df34d5c",
        "summary": "Admin-only call that creates the completing Prospect record on a lead that already has an originating prospect, then best-effort syncs the new contact details to Close.io and Customer.io (failures there are logged, not thrown).",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          },
          {
            "model": "Prospect",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:prospect.updateProspectDetails",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "prospect.updateProspectDetails",
      "module": "prospect",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicProcedure",
        "base": "publicProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "UpdateProspectDetailsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/prospect/procedure/updateProspectDetails.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/prospect/procedure/updateProspectDetails.mutation.ts#L14"
      },
      "router": {
        "file": "apis/lead-api/src/prospect/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/prospect/router.ts#L15"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "458624cc",
      "interpretation": {
        "sig": "3ed89c0d",
        "summary": "Updates the originating Prospect's contact fields (lower-casing email if changed) on a lead, then best-effort pushes the change to Close.io and Customer.io. Open to any caller, no auth required.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          },
          {
            "model": "Prospect",
            "service": "lead-api"
          }
        ],
        "flags": [
          "no-auth mutation"
        ]
      }
    },
    {
      "id": "lead-api:prospect.updateCompletingProspectDetails",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "prospect.updateCompletingProspectDetails",
      "module": "prospect",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateProspectDetailsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/prospect/procedure/updateCompletingProspectDetails.mutation.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/prospect/procedure/updateCompletingProspectDetails.mutation.ts#L9"
      },
      "router": {
        "file": "apis/lead-api/src/prospect/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/prospect/router.ts#L16"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "bc35bffc",
      "interpretation": {
        "sig": "bc35bffc",
        "summary": "Admin-only call that updates the completing Prospect's contact fields on a lead, then best-effort pushes the change to Close.io and Customer.io.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          },
          {
            "model": "Prospect",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:meeting.reschedule",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "leadApiRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "meeting.reschedule",
      "module": "meeting",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicProcedure",
        "base": "publicProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": "RestAPIRescheduleMeetingInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/meeting/procedures/rescheduleMeeting.mutation.ts",
        "line": 33,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/meeting/procedures/rescheduleMeeting.mutation.ts#L33"
      },
      "router": {
        "file": "apis/lead-api/src/meeting/router.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/meeting/router.ts#L7"
      },
      "hops": {
        "direct": 1,
        "services": [
          "noAuthIdentity"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "noAuthIdentity",
            "path": "identity.getOrCreateFromEmail",
            "kind": "write",
            "inferred": false,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "sales",
      "triggers": [
        "lead-api/meeting.created",
        "lead-api/meeting.rescheduled"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "400f5c7d",
      "interpretation": {
        "sig": "edcb2bc0",
        "summary": "Reschedules a sales meeting: cancels or reschedules the existing SavvyCal call slot or instant callback depending on the old and new meeting type, then books the replacement. For a plain `MEETING` record it marks it `CANCELLED` and books a new call slot or instant call in its place. No route or service in the codebase calls it (usage.dead).",
        "models": [
          {
            "model": "Meeting",
            "service": "lead-api"
          }
        ],
        "flags": [
          "looks unused",
          "no auth required"
        ]
      }
    },
    {
      "id": "lead-api:lead.getLeadStatus",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "orpc",
      "surface": "leadApiOrcpRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lead.getLeadStatus",
      "module": "lead",
      "roleFolder": null,
      "kind": "handler",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": null,
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicOrpc",
        "base": "os",
        "middlewares": [
          "loggingMiddleware",
          "bootstrapMiddleware",
          "tracingMiddleware",
          "externalEffectsMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "getLeadStatusInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/lead/procedure/getLeadStatus.query.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/procedure/getLeadStatus.query.ts#L19"
      },
      "router": {
        "file": "apis/lead-api/src/lead/router.ts",
        "line": 46,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/router.ts#L46"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "quote.getQuote",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuote.query.ts#L6",
            "domain": "deal"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "b1ac0a19",
      "interpretation": {
        "sig": "b1ac0a19",
        "summary": "Looks up a lead by `leadId` or by its `quoteId` and returns its status, prospect, and meetings, plus the linked quote's status from `work-service` if a `quoteId` is given. Exposed as both a tRPC query and a public GET /lead REST route; nothing appears to call either.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "lead-api:lead.setLeadProblemDescription",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "orpc",
      "surface": "leadApiOrcpRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lead.setLeadProblemDescription",
      "module": "lead",
      "roleFolder": null,
      "kind": "handler",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": null,
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicOrpc",
        "base": "os",
        "middlewares": [
          "loggingMiddleware",
          "bootstrapMiddleware",
          "tracingMiddleware",
          "externalEffectsMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "inputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/lead/procedure/setLeadProblemDescription.mutation.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/procedure/setLeadProblemDescription.mutation.ts#L24"
      },
      "router": {
        "file": "apis/lead-api/src/lead/router.ts",
        "line": 47,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/router.ts#L47"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "e7786181",
      "interpretation": {
        "sig": "e7786181",
        "summary": "Sets the problem description text on a lead. Public, unauthenticated, exposed as both a tRPC mutation and POST /lead/problem-description.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          }
        ],
        "flags": [
          "direct-prisma write despite facts flagging a read/write mismatch"
        ]
      }
    },
    {
      "id": "lead-api:lead.setLeadLocation",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "orpc",
      "surface": "leadApiOrcpRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lead.setLeadLocation",
      "module": "lead",
      "roleFolder": null,
      "kind": "handler",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": null,
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicOrpc",
        "base": "os",
        "middlewares": [
          "loggingMiddleware",
          "bootstrapMiddleware",
          "tracingMiddleware",
          "externalEffectsMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "inputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/lead/procedure/setLeadLocation.mutation.ts",
        "line": 38,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/procedure/setLeadLocation.mutation.ts#L38"
      },
      "router": {
        "file": "apis/lead-api/src/lead/router.ts",
        "line": 48,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/router.ts#L48"
      },
      "hops": {
        "direct": 1,
        "services": [
          "product-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "product-service",
            "path": "jurisdictions.listJurisdictions",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:jurisdictions.listJurisdictions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listJurisdictions.query.ts#L6",
            "domain": null
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "eb305eda",
      "interpretation": {
        "sig": "eb305eda",
        "summary": "Sets a lead's jurisdiction (accepts a legacy 'state' field or `jurisdictionId`). Public, unauthenticated, exposed as both a tRPC mutation and POST /lead/location; nothing appears to call either.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          }
        ],
        "flags": [
          "direct-prisma write despite facts flagging a read/write mismatch",
          "looks unused"
        ]
      }
    },
    {
      "id": "lead-api:lead.createLead",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "orpc",
      "surface": "leadApiOrcpRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lead.createLead",
      "module": "lead",
      "roleFolder": null,
      "kind": "handler",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": null,
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicOrpc",
        "base": "os",
        "middlewares": [
          "loggingMiddleware",
          "bootstrapMiddleware",
          "tracingMiddleware",
          "externalEffectsMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "CreateLeadInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/lead/procedure/createLead.mutation.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/procedure/createLead.mutation.ts#L19"
      },
      "router": {
        "file": "apis/lead-api/src/lead/router.ts",
        "line": 49,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/lead/router.ts#L49"
      },
      "hops": {
        "direct": 1,
        "services": [
          "product-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "product-service",
            "path": "jurisdictions.listJurisdictions",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:jurisdictions.listJurisdictions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listJurisdictions.query.ts#L6",
            "domain": null
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "fb2e06ba",
      "interpretation": {
        "sig": "fb2e06ba",
        "summary": "Validates the jurisdiction against `product-service` then creates a new lead with status `INCOMPLETE` and initial session tracking data. Public, unauthenticated, exposed as both a tRPC mutation and PUT /lead; nothing appears to call either.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          },
          {
            "model": "TrackingData",
            "service": "lead-api"
          }
        ],
        "flags": [
          "direct-prisma write despite facts flagging a read/write mismatch",
          "looks unused"
        ]
      }
    },
    {
      "id": "lead-api:quote.getQuoteLsa",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "orpc",
      "surface": "leadApiOrcpRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "quote.getQuoteLsa",
      "module": "quote",
      "roleFolder": null,
      "kind": "handler",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": null,
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicOrpc",
        "base": "os",
        "middlewares": [
          "loggingMiddleware",
          "bootstrapMiddleware",
          "tracingMiddleware",
          "externalEffectsMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "inputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/quote/procedures/getQuoteLsa.query.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/procedures/getQuoteLsa.query.ts#L23"
      },
      "router": {
        "file": "apis/lead-api/src/quote/router.ts",
        "line": 53,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/router.ts#L53"
      },
      "hops": {
        "direct": 3,
        "services": [
          "work-service",
          "assignment-service",
          "identity-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "quote.getQuote",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuote.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "assignment-service",
            "path": "listAssignments",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:listAssignments",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/listAssignments.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "firm.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/listFirms.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "work-service",
            "path": "quote.createQuoteCheckoutURL",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.createQuoteCheckoutURL",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/createQuoteCheckoutURL.mutation.ts#L5",
            "domain": "deal"
          },
          {
            "service": "work-service",
            "path": "quote.getQuoteLSA",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuoteLSA",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuoteLSA.query.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "c71f1021",
      "interpretation": {
        "sig": "c71f1021",
        "summary": "Builds the Legal Services Agreement content for a quote's fee agreements (assignments, firms, signers) and, for `ACTIVE` quotes, also creates a new Stripe checkout link as a side effect of an otherwise read-only lookup. Nothing currently calls this public endpoint.",
        "flags": [
          "read-that-writes",
          "usage.dead"
        ]
      }
    },
    {
      "id": "lead-api:quote.createQuoteCheckoutURL",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "orpc",
      "surface": "leadApiOrcpRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "quote.createQuoteCheckoutURL",
      "module": "quote",
      "roleFolder": null,
      "kind": "handler",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": null,
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicOrpc",
        "base": "os",
        "middlewares": [
          "loggingMiddleware",
          "bootstrapMiddleware",
          "tracingMiddleware",
          "externalEffectsMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "inputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/quote/procedures/createQuoteCheckoutURL.mutation.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/procedures/createQuoteCheckoutURL.mutation.ts#L24"
      },
      "router": {
        "file": "apis/lead-api/src/quote/router.ts",
        "line": 54,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/router.ts#L54"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "quote.createQuoteCheckoutURL",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.createQuoteCheckoutURL",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/createQuoteCheckoutURL.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e608f5fd",
      "interpretation": {
        "sig": "e608f5fd",
        "summary": "Public, unauthenticated endpoint (both tRPC and REST `POST /quote/checkout-url`) that generates a Stripe-style checkout URL for a given quote, delegating the write to `work-service` so a client can redirect the payer there.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "lead-api:quote.getCustomerQuoteInformation",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "orpc",
      "surface": "leadApiOrcpRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "quote.getCustomerQuoteInformation",
      "module": "quote",
      "roleFolder": null,
      "kind": "handler",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": null,
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicOrpc",
        "base": "os",
        "middlewares": [
          "loggingMiddleware",
          "bootstrapMiddleware",
          "tracingMiddleware",
          "externalEffectsMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "getCustomerQuoteInformationInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/quote/procedures/getCustomerQuoteInformation.query.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/procedures/getCustomerQuoteInformation.query.ts#L19"
      },
      "router": {
        "file": "apis/lead-api/src/quote/router.ts",
        "line": 55,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/quote/router.ts#L55"
      },
      "hops": {
        "direct": 2,
        "services": [
          "work-service",
          "product-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "quote.getClientQuote",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getClientQuote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getClientQuote.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "product-service",
            "path": "jurisdictions.listJurisdictions",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:jurisdictions.listJurisdictions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listJurisdictions.query.ts#L6",
            "domain": null
          }
        ]
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "96f0910c",
      "interpretation": {
        "sig": "96f0910c",
        "summary": "Public, unauthenticated endpoint that returns a client-facing view of a quote: the quote, its bill, jurisdiction name, and the prospect's name and email. Nothing in apps or services currently calls it.",
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "lead-api:lasCall.getCallAvailability",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "orpc",
      "surface": "leadApiOrcpRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.getCallAvailability",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "handler",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": null,
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicOrpc",
        "base": "os",
        "middlewares": [
          "loggingMiddleware",
          "bootstrapMiddleware",
          "tracingMiddleware",
          "externalEffectsMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "CallSlotAvailabilityInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/call/procedure/getCallAvailability.query.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/getCallAvailability.query.ts#L17"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 63,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L63"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "57d55ae6",
      "interpretation": {
        "sig": "57d55ae6",
        "summary": "Returns open scheduling slots for booking a call, sourced from SavvyCal's scheduling link and slot listing. Nothing in the codebase calls this endpoint.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "lead-api:lasCall.getCallSlotAvailability",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "orpc",
      "surface": "leadApiOrcpRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.getCallSlotAvailability",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "handler",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": null,
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicOrpc",
        "base": "os",
        "middlewares": [
          "loggingMiddleware",
          "bootstrapMiddleware",
          "tracingMiddleware",
          "externalEffectsMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "CallSlotAvailabilityInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/call/procedure/getCallSlotAvailability.query.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/getCallSlotAvailability.query.ts#L17"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 64,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L64"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "eeddeb1e",
      "interpretation": {
        "sig": "eeddeb1e",
        "summary": "Returns open SavvyCal slots for the requested window by calling the SavvyCal API directly. Pure read, no local storage touched."
      }
    },
    {
      "id": "lead-api:lasCall.getOutgoingPhoneNumber",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "orpc",
      "surface": "leadApiOrcpRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.getOutgoingPhoneNumber",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "handler",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": null,
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicOrpc",
        "base": "os",
        "middlewares": [
          "loggingMiddleware",
          "bootstrapMiddleware",
          "tracingMiddleware",
          "externalEffectsMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "inputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/call/procedure/getOutgoingPhoneNumber.procedure.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/getOutgoingPhoneNumber.procedure.ts#L19"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 65,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L65"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "b1887c4d",
      "interpretation": {
        "sig": "b1887c4d",
        "summary": "Given a lead's phone number and market, picks which outbound number a Legal Advice Specialist should call from: for US it looks up the lead's most recent record by phone, maps its jurisdiction to a state, and returns that state's configured number (falling back to a Texas default). Nothing in the codebase calls this endpoint.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "lead-api:lasCall.bookCallSlot",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "orpc",
      "surface": "leadApiOrcpRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.bookCallSlot",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "handler",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": null,
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicOrpc",
        "base": "os",
        "middlewares": [
          "loggingMiddleware",
          "bootstrapMiddleware",
          "tracingMiddleware",
          "externalEffectsMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "CallSlotInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/call/procedure/bookCallSlot.mutation.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/bookCallSlot.mutation.ts#L22"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 66,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L66"
      },
      "hops": {
        "direct": 1,
        "services": [
          "noAuthIdentity"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "noAuthIdentity",
            "path": "identity.getOrCreateFromEmail",
            "kind": "write",
            "inferred": false,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "sales",
      "triggers": [
        "lead-api/meeting.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "1f290a9d",
      "interpretation": {
        "sig": "1f290a9d",
        "summary": "Books a SavvyCal slot for a lead's prospect: creates the event in SavvyCal, finds or creates the identity for the organiser, then creates a `Meeting` record (`PENDING`) in `lead-api`'s DB and fires `meeting.created`.",
        "models": [
          {
            "model": "Meeting",
            "service": "lead-api"
          },
          {
            "model": "Lead",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:lasCall.cancelCallSlot",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "orpc",
      "surface": "leadApiOrcpRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.cancelCallSlot",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "handler",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": null,
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicOrpc",
        "base": "os",
        "middlewares": [
          "loggingMiddleware",
          "bootstrapMiddleware",
          "tracingMiddleware",
          "externalEffectsMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "inputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/call/procedure/cancelCallSlot.mutation.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/cancelCallSlot.mutation.ts#L22"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 67,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L67"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "a8719377",
      "interpretation": {
        "sig": "a8719377",
        "summary": "Cancels a booked call: for a `SAVVYCAL` meeting it cancels the SavvyCal event and sets the `Meeting` to `CANCELLED` in the DB; for a `CALLBACK` meeting it delegates to `cancelInstantCall`. Direct Prisma write despite the facts mechanism field showing none.",
        "models": [
          {
            "model": "Meeting",
            "service": "lead-api"
          }
        ]
      }
    },
    {
      "id": "lead-api:lasCall.rescheduleCallSlot",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "orpc",
      "surface": "leadApiOrcpRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "lasCall.rescheduleCallSlot",
      "module": "lasCall",
      "roleFolder": null,
      "kind": "handler",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": null,
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicOrpc",
        "base": "os",
        "middlewares": [
          "loggingMiddleware",
          "bootstrapMiddleware",
          "tracingMiddleware",
          "externalEffectsMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "RescheduleCallSlotInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/call/procedure/rescheduleCallSlot.mutation.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/procedure/rescheduleCallSlot.mutation.ts#L19"
      },
      "router": {
        "file": "apis/lead-api/src/call/router.ts",
        "line": 68,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/call/router.ts#L68"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [
        "lead-api/meeting.rescheduled"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "b1f64e80",
      "interpretation": {
        "sig": "b1f64e80",
        "summary": "Moves a SavvyCal meeting to a new time: creates a new SavvyCal event, updates the `Meeting` record with the new event id/URL/times, cancels the old SavvyCal event, and fires `meeting.rescheduled`. Nothing in the codebase calls this endpoint.",
        "models": [
          {
            "model": "Meeting",
            "service": "lead-api"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "lead-api:instantCall.getAvailabilityForInstantCall",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "orpc",
      "surface": "leadApiOrcpRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "instantCall.getAvailabilityForInstantCall",
      "module": "instantCall",
      "roleFolder": null,
      "kind": "handler",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": null,
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicOrpc",
        "base": "os",
        "middlewares": [
          "loggingMiddleware",
          "bootstrapMiddleware",
          "tracingMiddleware",
          "externalEffectsMiddleware"
        ]
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/instantCall/procedure/getAvailabilityForInstantCall.query.ts",
        "line": 44,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/instantCall/procedure/getAvailabilityForInstantCall.query.ts#L44"
      },
      "router": {
        "file": "apis/lead-api/src/instantCall/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/instantCall/router.ts#L17"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "90fc712",
      "interpretation": {
        "sig": "90fc712",
        "summary": "Checks AWS Connect queue metrics and hours of operation to report whether the instant-callback queue and the inbound-call queue can take a new call right now, with a reason when they can't (queue disabled, outside hours, no agents, queue full, or wait time over 30 minutes).",
        "flags": []
      }
    },
    {
      "id": "lead-api:instantCall.bookInstantCall",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "orpc",
      "surface": "leadApiOrcpRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "instantCall.bookInstantCall",
      "module": "instantCall",
      "roleFolder": null,
      "kind": "handler",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": null,
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicOrpc",
        "base": "os",
        "middlewares": [
          "loggingMiddleware",
          "bootstrapMiddleware",
          "tracingMiddleware",
          "externalEffectsMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "InstantCallInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/instantCall/procedure/bookInstantCall.mutation.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/instantCall/procedure/bookInstantCall.mutation.ts#L19"
      },
      "router": {
        "file": "apis/lead-api/src/instantCall/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/instantCall/router.ts#L18"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [
        "lead-api/meeting.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "7c490a7e",
      "interpretation": {
        "sig": "7c490a7e",
        "summary": "Books an instant callback for a lead: creates a `PENDING` `CALLBACK` meeting, fires the `lead-api/meeting.created` Inngest event, starts a task contact in AWS Connect with the lead's phone/email/quote links, then stores the returned Connect contact ID on the meeting. Returns the existing meeting instead of duplicating one if the lead already has a pending callback.",
        "flags": [
          "looks unused (no callers found)"
        ]
      }
    },
    {
      "id": "lead-api:prospect.setLeadProspectDetails",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "orpc",
      "surface": "leadApiOrcpRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "prospect.setLeadProspectDetails",
      "module": "prospect",
      "roleFolder": null,
      "kind": "handler",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": null,
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicOrpc",
        "base": "os",
        "middlewares": [
          "loggingMiddleware",
          "bootstrapMiddleware",
          "tracingMiddleware",
          "externalEffectsMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "SetLeadProspectDetailsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/prospect/procedure/setLeadProspectDetails.mutation.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/prospect/procedure/setLeadProspectDetails.mutation.ts#L18"
      },
      "router": {
        "file": "apis/lead-api/src/prospect/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/prospect/router.ts#L21"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [
        "lead-api/lead.event.captured"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "4b68192d",
      "interpretation": {
        "sig": "4b68192d",
        "summary": "Attaches an originating Prospect (name, email, phone) to an existing Lead and flips the lead to `NEW`, then publishes `lead.event.captured` (`intake_contact_submitted`) for downstream Inngest processing. No auth is required to call it, and nothing in the app or services currently calls it.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          },
          {
            "model": "Prospect",
            "service": "lead-api"
          }
        ],
        "flags": [
          "looks unused",
          "no-auth mutation"
        ]
      }
    },
    {
      "id": "lead-api:prospect.updateProspectDetails",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "orpc",
      "surface": "leadApiOrcpRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "prospect.updateProspectDetails",
      "module": "prospect",
      "roleFolder": null,
      "kind": "handler",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": null,
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicOrpc",
        "base": "os",
        "middlewares": [
          "loggingMiddleware",
          "bootstrapMiddleware",
          "tracingMiddleware",
          "externalEffectsMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "UpdateProspectDetailsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/prospect/procedure/updateProspectDetails.mutation.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/prospect/procedure/updateProspectDetails.mutation.ts#L19"
      },
      "router": {
        "file": "apis/lead-api/src/prospect/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/prospect/router.ts#L22"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "3ed89c0d",
      "interpretation": {
        "sig": "3ed89c0d",
        "summary": "Updates the originating Prospect's contact fields (lower-casing email if changed) on a lead, then best-effort pushes the change to Close.io and Customer.io. Open to any caller, no auth required.",
        "models": [
          {
            "model": "Lead",
            "service": "lead-api"
          },
          {
            "model": "Prospect",
            "service": "lead-api"
          }
        ],
        "flags": [
          "no-auth mutation"
        ]
      }
    },
    {
      "id": "lead-api:meeting.reschedule",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "orpc",
      "surface": "leadApiOrcpRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "meeting.reschedule",
      "module": "meeting",
      "roleFolder": null,
      "kind": "handler",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": null,
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "public",
        "member": "anyone (no auth)",
        "kind": "public",
        "builder": "publicOrpc",
        "base": "os",
        "middlewares": [
          "loggingMiddleware",
          "bootstrapMiddleware",
          "tracingMiddleware",
          "externalEffectsMiddleware"
        ]
      },
      "middleware": [],
      "inputName": "RestAPIRescheduleMeetingInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/meeting/procedures/rescheduleMeeting.mutation.ts",
        "line": 46,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/meeting/procedures/rescheduleMeeting.mutation.ts#L46"
      },
      "router": {
        "file": "apis/lead-api/src/meeting/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/meeting/router.ts#L13"
      },
      "hops": {
        "direct": 1,
        "services": [
          "noAuthIdentity"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "noAuthIdentity",
            "path": "identity.getOrCreateFromEmail",
            "kind": "write",
            "inferred": false,
            "targetId": null,
            "url": null,
            "domain": null
          }
        ]
      },
      "domain": "sales",
      "triggers": [
        "lead-api/meeting.created",
        "lead-api/meeting.rescheduled"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "edcb2bc0",
      "interpretation": {
        "sig": "edcb2bc0",
        "summary": "Reschedules a sales meeting: cancels or reschedules the existing SavvyCal call slot or instant callback depending on the old and new meeting type, then books the replacement. For a plain `MEETING` record it marks it `CANCELLED` and books a new call slot or instant call in its place. No route or service in the codebase calls it (usage.dead).",
        "models": [
          {
            "model": "Meeting",
            "service": "lead-api"
          }
        ],
        "flags": [
          "looks unused",
          "no auth required"
        ]
      }
    },
    {
      "id": "lead-api:justanswer.createLead",
      "api": "lead-api",
      "origin": "lead-api",
      "surfaceKind": "external",
      "protocol": "orpc",
      "surface": "leadApiOrcpRouter",
      "mounts": [
        "/"
      ],
      "callers": [
        "marketing",
        "client-os"
      ],
      "path": "justanswer.createLead",
      "module": "justanswer",
      "roleFolder": null,
      "kind": "handler",
      "httpMethod": "POST",
      "httpPath": "/leads",
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": true,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "unknown",
        "member": "unknown",
        "kind": "unknown",
        "builder": "justanswerOrpc",
        "base": "os",
        "middlewares": [
          "loggingMiddleware",
          "bootstrapMiddleware",
          "tracingMiddleware",
          "externalEffectsMiddleware",
          "(inline)"
        ]
      },
      "middleware": [],
      "inputName": "CreateJustanswerLeadInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/lead-api/src/justanswer/router.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/justanswer/router.ts#L23"
      },
      "router": {
        "file": "apis/lead-api/src/justanswer/router.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lead-api/src/justanswer/router.ts#L30"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": "sales",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "51a2b553",
      "interpretation": {
        "sig": "51a2b553",
        "summary": "Public POST /leads endpoint for the JustAnswer marketplace: creates a new `PROSPECT` and Lead (jurisdiction `us-federal`, market US, source `JUSTANSWER`, status `NEW`) plus a `TrackingData` row from the chat handoff payload, then registers the opportunity in Close CRM. Rejects with a 'Duplicate lead' reason if a lead already exists for that `external_id`.",
        "models": [
          {
            "model": "Prospect",
            "service": "lead-api"
          },
          {
            "model": "Lead",
            "service": "lead-api"
          },
          {
            "model": "TrackingData",
            "service": "lead-api"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:work.lawyer.listMatterFeeAgreements.US",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "work.lawyer.listMatterFeeAgreements.US",
      "module": "work",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/lawyer/listMatterFeeAgreements/listMatterFeeAgreementsUS.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/lawyer/listMatterFeeAgreements/listMatterFeeAgreementsUS.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/procedures/lawyer/listMatterFeeAgreements/router.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/lawyer/listMatterFeeAgreements/router.ts#L5"
      },
      "hops": {
        "direct": 3,
        "services": [
          "work-service",
          "transaction-service",
          "matter-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service",
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "feeAgreement.listMatterFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listMatterFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterFeeAgreements.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "listTransactions",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:listTransactions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/listTransactions.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "matter-service",
            "path": "reviewRequest.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:reviewRequest.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/listReviewRequests.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "2339da1e",
      "interpretation": {
        "sig": "2339da1e",
        "summary": "Lists a matter's fee agreements for the US market, joining each one with its linked bill transactions and any open `FEE_AGREEMENT_COMPLETION` review requests.",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          },
          {
            "model": "Transaction",
            "service": "transaction-service"
          },
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.lawyer.listMatterFeeAgreements.GB",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "work.lawyer.listMatterFeeAgreements.GB",
      "module": "work",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/lawyer/listMatterFeeAgreements/listMatterFeeAgreementsUK.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/lawyer/listMatterFeeAgreements/listMatterFeeAgreementsUK.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/procedures/lawyer/listMatterFeeAgreements/router.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/lawyer/listMatterFeeAgreements/router.ts#L6"
      },
      "hops": {
        "direct": 3,
        "services": [
          "work-service",
          "transaction-service",
          "matter-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service",
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "feeAgreement.listMatterFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listMatterFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterFeeAgreements.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "invoice.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:invoice.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/listInvoices.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "matter-service",
            "path": "reviewRequest.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:reviewRequest.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/listReviewRequests.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "quote.getQuote",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuote.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "700fff4",
      "interpretation": {
        "sig": "700fff4",
        "summary": "Lists a matter's fee agreements for the UK market, enriched with each fee agreement's quote status, linked invoices, transaction intents, and open review requests.",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          },
          {
            "model": "Invoice",
            "service": "transaction-service"
          },
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          },
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.lawyer.listMatterQuotes",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "work.lawyer.listMatterQuotes",
      "module": "work",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/lawyer/listMatterQuotes.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/lawyer/listMatterQuotes.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 48,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L48"
      },
      "hops": {
        "direct": 3,
        "services": [
          "work-service",
          "transaction-service",
          "matter-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service",
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "feeAgreement.listMatterQuotes",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listMatterQuotes",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterQuotes.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "listTransactions",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:listTransactions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/listTransactions.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "matter-service",
            "path": "reviewRequest.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:reviewRequest.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/listReviewRequests.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "cd58fed1",
      "interpretation": {
        "sig": "cd58fed1",
        "summary": "Lists a matter's quotes filtered by status (defaults to `DRAFT`, `PENDING`, `ACTIVE`, `COMPLETED`), with each quote's total fee amount computed and its fee agreements joined to bill transactions and review requests.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          },
          {
            "model": "Transaction",
            "service": "transaction-service"
          },
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.lawyer.listBillFeeAgreements",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "work.lawyer.listBillFeeAgreements",
      "module": "work",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/lawyer/listBillFeeAgreements.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/lawyer/listBillFeeAgreements.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 49,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L49"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "feeAgreement.listBillFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listBillFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listBillFeeAgreements.query.ts#L19",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "d26b4fb8",
      "interpretation": {
        "sig": "d26b4fb8",
        "summary": "Looks up the fee agreements attached to a bill by bill ID. No caller in the app or service graph reaches this procedure.",
        "flags": [
          "usage.dead"
        ],
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.lawyer.createQuote",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "work.lawyer.createQuote",
      "module": "work",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "CreateFollowOnQuoteMutationInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/lawyer/createFollowOnQuote.mutation.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/lawyer/createFollowOnQuote.mutation.ts#L25"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 50,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L50"
      },
      "hops": {
        "direct": 6,
        "services": [
          "matter-service",
          "product-service",
          "assignment-service",
          "transaction-service",
          "work-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/getMatter.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "product-service",
            "path": "products.listProducts",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:products.listProducts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listProducts.query.ts#L5",
            "domain": null
          },
          {
            "service": "assignment-service",
            "path": "feePlan.getCurrent",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:feePlan.getCurrent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/feePlan/procedures/getCurrentFeePlan.query.ts#L13",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "getIdentityCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getIdentityCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getIdentityCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "work-service",
            "path": "quote.listQuotesByMatterId",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.listQuotesByMatterId",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/listQuotesByMatterId.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "work-service",
            "path": "quote.create",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/createQuote.mutation.ts#L5",
            "domain": "deal"
          },
          {
            "service": "matter-service",
            "path": "matterTransaction.createMatterTransaction",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterTransaction.createMatterTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTransactions/procedures/createMatterTransaction.mutation.ts#L5",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "agreementSignature.createUnsignedAgreementSignatures",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:agreementSignature.createUnsignedAgreementSignatures",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/createUnsignedAgreementSignatures.mutation.ts#L15",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c24b8c4c",
      "interpretation": {
        "sig": "c24b8c4c",
        "summary": "Creates a follow-on quote for a matter: builds fee agreements from selected products and/or custom lawyer input, creates the quote and its matter transaction in `work-service`, creates unsigned agreement signatures for the client, and notifies the lead client. If any fee agreement is custom, it also posts a Slack alert to the ops channel.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          },
          {
            "model": "MatterTransaction",
            "service": "matter-service"
          },
          {
            "model": "AgreementSignature",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.lawyer.createDraftQuote",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "work.lawyer.createDraftQuote",
      "module": "work",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "CreateDraftFollowOnQuoteMutationInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/lawyer/createDraftFollowOnQuote.mutation.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/lawyer/createDraftFollowOnQuote.mutation.ts#L23"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 51,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L51"
      },
      "hops": {
        "direct": 3,
        "services": [
          "matter-service",
          "product-service",
          "work-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/getMatter.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "product-service",
            "path": "products.listProducts",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:products.listProducts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listProducts.query.ts#L5",
            "domain": null
          },
          {
            "service": "work-service",
            "path": "quote.listQuotesByMatterId",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.listQuotesByMatterId",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/listQuotesByMatterId.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "work-service",
            "path": "quote.createDraft",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.createDraft",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/createDraftQuote.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "b8e17824",
      "interpretation": {
        "sig": "b8e17824",
        "summary": "Creates a `DRAFT` follow-on quote for a matter from selected products and/or custom fee agreements, without sending it or creating a matter transaction. If a review comment is passed, it fires off a Slack notification asking ops to review the draft.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.lawyer.updateDraftQuote",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "work.lawyer.updateDraftQuote",
      "module": "work",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "UpdateDraftQuoteMutationInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/lawyer/updateDraftQuote.mutation.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/lawyer/updateDraftQuote.mutation.ts#L22"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 52,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L52"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "work-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/getMatter.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "quote.updateDraft",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.updateDraft",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/updateDraftQuote.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "e6f05283",
      "interpretation": {
        "sig": "e6f05283",
        "summary": "Updates a `DRAFT` quote's title, description, and fee agreements while it is still unsent. If a review comment is passed, it also sends a Slack notification asking ops to review the draft.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.lawyer.sendDraftQuote",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "work.lawyer.sendDraftQuote",
      "module": "work",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "SendDraftQuoteMutationInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/lawyer/sendDraftQuote.mutation.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/lawyer/sendDraftQuote.mutation.ts#L15"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 53,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L53"
      },
      "hops": {
        "direct": 4,
        "services": [
          "matter-service",
          "transaction-service",
          "work-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/getMatter.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "transaction-service",
            "path": "getIdentityCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getIdentityCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getIdentityCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "work-service",
            "path": "quote.sendDraft",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.sendDraft",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/sendDraftQuote.mutation.ts#L5",
            "domain": "deal"
          },
          {
            "service": "matter-service",
            "path": "matterTransaction.createMatterTransaction",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterTransaction.createMatterTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTransactions/procedures/createMatterTransaction.mutation.ts#L5",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "agreementSignature.createUnsignedAgreementSignatures",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:agreementSignature.createUnsignedAgreementSignatures",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/createUnsignedAgreementSignatures.mutation.ts#L15",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c7e0d1de",
      "interpretation": {
        "sig": "c7e0d1de",
        "summary": "Sends a previously drafted quote to the client: marks it sent in `work-service`, creates the matter transaction, creates unsigned agreement signatures, and notifies the lead client. If the quote includes custom fee agreements, it also posts a Slack alert to ops.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "MatterTransaction",
            "service": "matter-service"
          },
          {
            "model": "AgreementSignature",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.lawyer.getFeeAgreementsLSA",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "work.lawyer.getFeeAgreementsLSA",
      "module": "work",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/lawyer/getFeeAgreementsLSA.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/lawyer/getFeeAgreementsLSA.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 54,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L54"
      },
      "hops": {
        "direct": 2,
        "services": [
          "work-service",
          "identity-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "feeAgreement.listFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listFeeAgreements.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "work-service",
            "path": "quote.generateLsaContent",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.generateLsaContent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/generateLsaContent.query.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "13893a64",
      "interpretation": {
        "sig": "13893a64",
        "summary": "Fetches a set of fee agreements with their signatures and firm details, then generates the Legal Services Agreement content for them via `work-service`. No caller in the app or service graph reaches this procedure.",
        "flags": [
          "usage.dead"
        ],
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          },
          {
            "model": "Firm",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.lawyer.getQuoteLSA",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "work.lawyer.getQuoteLSA",
      "module": "work",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "write",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/lawyer/getQuoteLSA.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/lawyer/getQuoteLSA.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 55,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L55"
      },
      "hops": {
        "direct": 3,
        "services": [
          "work-service",
          "assignment-service",
          "identity-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "quote.getQuote",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuote.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "assignment-service",
            "path": "listAssignments",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:listAssignments",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/listAssignments.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "firm.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/listFirms.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "work-service",
            "path": "quote.createQuoteCheckoutURL",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.createQuoteCheckoutURL",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/createQuoteCheckoutURL.mutation.ts#L5",
            "domain": "deal"
          },
          {
            "service": "work-service",
            "path": "quote.getQuoteLSA",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuoteLSA",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuoteLSA.query.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "ef916a73",
      "interpretation": {
        "sig": "ef916a73",
        "summary": "Fetches a quote's fee agreements, assignments, firms, and signers to render the Legal Services Agreement content, and returns the quote alongside a Stripe checkout link. It's registered as a query but has a real side effect: for an `ACTIVE` quote it creates a new Stripe checkout session in `work-service` on every call.",
        "flags": [
          "read-that-writes"
        ],
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "Assignment",
            "service": "assignment-service"
          },
          {
            "model": "Firm",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.lawyer.cancelProposedFeeAgreement",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "work.lawyer.cancelProposedFeeAgreement",
      "module": "work",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/lawyer/cancelProposedFeeAgreement.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/lawyer/cancelProposedFeeAgreement.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 56,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L56"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "feeAgreement.cancelProposedFeeAgreement",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:feeAgreement.cancelProposedFeeAgreement",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/cancelProposedFeeAgreement.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "3ec7fa3",
      "interpretation": {
        "sig": "3ec7fa3",
        "summary": "Cancels a fee agreement that is still in proposed (unsigned) state, delegating the cancellation to `work-service`.",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.lawyer.cancelFeeAgreement",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "work.lawyer.cancelFeeAgreement",
      "module": "work",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/lawyer/cancelFeeAgreement.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/lawyer/cancelFeeAgreement.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 57,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L57"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "feeAgreement.cancelFeeAgreement",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:feeAgreement.cancelFeeAgreement",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/cancelFeeAgreement.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "bcf7e2c5",
      "interpretation": {
        "sig": "bcf7e2c5",
        "summary": "Cancels an active fee agreement, delegating the cancellation to `work-service`.",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.lawyer.cancelDraftQuote",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "work.lawyer.cancelDraftQuote",
      "module": "work",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/lawyer/cancelDraftQuote.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/lawyer/cancelDraftQuote.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 58,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L58"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "quote.getQuote",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuote.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "work-service",
            "path": "quote.cancelQuote",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.cancelQuote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/cancelQuote.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [
        "work-service/quote.cancelled"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "25de3deb",
      "interpretation": {
        "sig": "25de3deb",
        "summary": "Cancels a draft quote after checking it belongs to the given matter, marking it `CANCELLED` in `work-service` and firing the `work-service` `quote.cancelled` event for any downstream Inngest functions listening for it.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.call.lawyer.listCalls",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.call.lawyer.listCalls",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ListCallsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/calls/procedures/lawyer/listCalls.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/calls/procedures/lawyer/listCalls.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/calls/router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/calls/router.ts#L8"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "calls.lawyer.listCalls",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:calls.lawyer.listCalls",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/calls/procedures/lawyer/listCalls.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7ba0df2e",
      "interpretation": {
        "sig": "7ba0df2e",
        "summary": "Lists the calls logged against a matter (call history for the lawyer's matter view), delegating straight to `matter-service`."
      }
    },
    {
      "id": "platform-api:matter.call.lawyer.createCall",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.call.lawyer.createCall",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CreateCallInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/calls/procedures/lawyer/createCall.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/calls/procedures/lawyer/createCall.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/calls/router.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/calls/router.ts#L9"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "calls.lawyer.createCall",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:calls.lawyer.createCall",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/calls/procedures/lawyer/createCall.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "72c61a50",
      "interpretation": {
        "sig": "72c61a50",
        "summary": "Logs a new call record against a matter, forwarding the write to `matter-service`."
      }
    },
    {
      "id": "platform-api:matter.call.lawyer.getCallRecording",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.call.lawyer.getCallRecording",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "GetCallRecordingInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/calls/procedures/lawyer/getCallRecording.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/calls/procedures/lawyer/getCallRecording.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/calls/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/calls/router.ts#L10"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "calls.lawyer.getCallRecording",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:calls.lawyer.getCallRecording",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/calls/procedures/lawyer/getCallRecording.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "87469c8c",
      "interpretation": {
        "sig": "87469c8c",
        "summary": "Fetches the recording for a logged call so a lawyer can play it back."
      }
    },
    {
      "id": "platform-api:matter.call.lawyer.getCallTranscript",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.call.lawyer.getCallTranscript",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "GetCallTranscriptInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/calls/procedures/lawyer/getCallTranscript.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/calls/procedures/lawyer/getCallTranscript.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/calls/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/calls/router.ts#L11"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "calls.lawyer.getCallTranscript",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:calls.lawyer.getCallTranscript",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/calls/procedures/lawyer/getCallTranscript.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5a4ea5f9",
      "interpretation": {
        "sig": "5a4ea5f9",
        "summary": "Fetches the transcript for a logged call."
      }
    },
    {
      "id": "platform-api:matter.comment.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.comment.create",
      "module": "matter",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/comment/procedures/createComment.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/comment/procedures/createComment.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/comment/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/comment/router.ts#L13"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "comment.create",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:comment.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/comment/comment-controller.ts#L36",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "bd2b5f45",
      "interpretation": {
        "sig": "c106527d",
        "summary": "Adds a comment to a matter, for either a lawyer (own identity) or an admin acting on the matter, and forwards the write to `matter-service`."
      }
    },
    {
      "id": "platform-api:matter.comment.update",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.comment.update",
      "module": "matter",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "UpdateCommentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/comment/procedures/updateComment.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/comment/procedures/updateComment.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/comment/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/comment/router.ts#L14"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "comment.update",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:comment.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/comment/comment-controller.ts#L45",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "bfb581a4",
      "interpretation": {
        "sig": "f2444348",
        "summary": "Edits an existing matter comment's content, callable by a lawyer or an admin, delegated to `matter-service`."
      }
    },
    {
      "id": "platform-api:matter.comment.delete",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.comment.delete",
      "module": "matter",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "DeleteCommentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/comment/procedures/deleteComment.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/comment/procedures/deleteComment.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/comment/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/comment/router.ts#L15"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "comment.delete",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:comment.delete",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/comment/comment-controller.ts#L52",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "633b1f1a",
      "interpretation": {
        "sig": "6d5190a6",
        "summary": "Deletes a matter comment (lawyer or admin), delegated to `matter-service`."
      }
    },
    {
      "id": "platform-api:matter.comment.restore",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.comment.restore",
      "module": "matter",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "RestoreCommentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/comment/procedures/restoreComment.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/comment/procedures/restoreComment.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/comment/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/comment/router.ts#L16"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "comment.restore",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:comment.restore",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/comment/comment-controller.ts#L59",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "816fa413",
      "interpretation": {
        "sig": "aa76a20b",
        "summary": "Restores a previously deleted matter comment, callable by a lawyer or an admin."
      }
    },
    {
      "id": "platform-api:matter.comment.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.comment.list",
      "module": "matter",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ListCommentsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/comment/procedures/listComments.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/comment/procedures/listComments.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/comment/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/comment/router.ts#L17"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "comment.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:comment.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/comment/comment-controller.ts#L68",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "db14610d",
      "interpretation": {
        "sig": "e317b985",
        "summary": "Lists the comments on a matter, for a lawyer's own view or for admin review."
      }
    },
    {
      "id": "platform-api:matter.legl.lawyer.isEnabled",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.legl.lawyer.isEnabled",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/legl/procedures/lawyer/isEnabled.query.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/legl/procedures/lawyer/isEnabled.query.ts#L11"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/legl/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/legl/router.ts#L13"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "5f5e9d8e",
      "interpretation": {
        "sig": "5f5e9d8e",
        "summary": "Checks whether LEGL is switched on for a given matter by evaluating a PostHog feature flag server-side, first against the matter's firm and then against the matter itself; nothing other than an explicit true counts as enabled, so a PostHog outage reads as disabled.",
        "models": []
      }
    },
    {
      "id": "platform-api:matter.legl.lawyer.getConfig",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.legl.lawyer.getConfig",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/legl/procedures/lawyer/getConfig.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/legl/procedures/lawyer/getConfig.query.ts#L4"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/legl/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/legl/router.ts#L14"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "legl.lawyer.getConfig",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:legl.lawyer.getConfig",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/procedures/lawyer/getConfig.query.ts#L4",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "e7069207",
      "interpretation": {
        "sig": "e7069207",
        "summary": "Fetches the LEGL configuration for the current matter from `matter-service`."
      }
    },
    {
      "id": "platform-api:matter.legl.lawyer.listWorkflows",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.legl.lawyer.listWorkflows",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/legl/procedures/lawyer/listWorkflows.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/legl/procedures/lawyer/listWorkflows.query.ts#L4"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/legl/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/legl/router.ts#L15"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "legl.lawyer.listWorkflows",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:legl.lawyer.listWorkflows",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/procedures/lawyer/listWorkflows.query.ts#L4",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "930143",
      "interpretation": {
        "sig": "930143",
        "summary": "Lists the LEGL workflows available for the matter."
      }
    },
    {
      "id": "platform-api:matter.legl.lawyer.listReviewers",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.legl.lawyer.listReviewers",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/legl/procedures/lawyer/listReviewers.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/legl/procedures/lawyer/listReviewers.query.ts#L4"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/legl/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/legl/router.ts#L16"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "legl.lawyer.listReviewers",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:legl.lawyer.listReviewers",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/procedures/lawyer/listReviewers.query.ts#L4",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7238b6bd",
      "interpretation": {
        "sig": "7238b6bd",
        "summary": "Lists the people who can review a LEGL engage request for the matter."
      }
    },
    {
      "id": "platform-api:matter.legl.lawyer.sendEngageRequest",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.legl.lawyer.sendEngageRequest",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "SendLeglEngageRequestInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/legl/procedures/lawyer/sendEngageRequest.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/legl/procedures/lawyer/sendEngageRequest.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/legl/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/legl/router.ts#L17"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "legl.lawyer.sendEngageRequest",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:legl.lawyer.sendEngageRequest",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/procedures/lawyer/sendEngageRequest.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7ea10880",
      "interpretation": {
        "sig": "7ea10880",
        "summary": "Sends a LEGL engage request for a matter, creating it in `matter-service`."
      }
    },
    {
      "id": "platform-api:matter.legl.lawyer.listEngageRequests",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.legl.lawyer.listEngageRequests",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "ListLeglEngageRequestsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/legl/procedures/lawyer/listEngageRequests.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/legl/procedures/lawyer/listEngageRequests.query.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/legl/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/legl/router.ts#L18"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "legl.lawyer.listEngageRequests",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:legl.lawyer.listEngageRequests",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/procedures/lawyer/listEngageRequests.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "10f953aa",
      "interpretation": {
        "sig": "10f953aa",
        "summary": "Lists LEGL engage requests for a matter and enriches each with the reviewer's display name by looking up their identity, so the UI can show who reviewed a request rather than just an id."
      }
    },
    {
      "id": "platform-api:matter.legl.lawyer.reviewEngageRequest",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.legl.lawyer.reviewEngageRequest",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "ReviewLeglEngageRequestInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/legl/procedures/lawyer/reviewEngageRequest.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/legl/procedures/lawyer/reviewEngageRequest.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/legl/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/legl/router.ts#L19"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "legl.lawyer.reviewEngageRequest",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:legl.lawyer.reviewEngageRequest",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/procedures/lawyer/reviewEngageRequest.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "legl/engage.reviewed"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5861facf",
      "interpretation": {
        "sig": "5861facf",
        "summary": "Records a review decision on a LEGL engage request, forwarded to `matter-service`, which then fires a `legl/engage.reviewed` event for any downstream Inngest functions listening for it."
      }
    },
    {
      "id": "platform-api:matter.legl.lawyer.createPaymentRequest",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.legl.lawyer.createPaymentRequest",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "CreateLeglPaymentRequestInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/legl/procedures/lawyer/createPaymentRequest.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/legl/procedures/lawyer/createPaymentRequest.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/legl/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/legl/router.ts#L20"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "legl.lawyer.createPaymentRequest",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:legl.lawyer.createPaymentRequest",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/procedures/lawyer/createPaymentRequest.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1691982f",
      "interpretation": {
        "sig": "1691982f",
        "summary": "Lets a firm lawyer create a Legl payment request for a matter, forwarding the input straight to `matter-service` which does the actual write.",
        "flags": [
          "via-services"
        ]
      }
    },
    {
      "id": "platform-api:matter.legl.lawyer.listPaymentRequests",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.legl.lawyer.listPaymentRequests",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "ListLeglPaymentRequestsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/legl/procedures/lawyer/listPaymentRequests.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/legl/procedures/lawyer/listPaymentRequests.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/legl/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/legl/router.ts#L21"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "legl.lawyer.listPaymentRequests",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:legl.lawyer.listPaymentRequests",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/legl/procedures/lawyer/listPaymentRequests.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "26a93bfd",
      "interpretation": {
        "sig": "26a93bfd",
        "summary": "Lists the Legl payment requests for a matter, a thin pass-through query to `matter-service`.",
        "flags": []
      }
    },
    {
      "id": "platform-api:matter.matterAttachment.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterAttachment.create",
      "module": "matter",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterAttachment/procedures/createMatterAttachment.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterAttachment/procedures/createMatterAttachment.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterAttachment/router.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterAttachment/router.ts#L6"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterAttachment.create",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterAttachment.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matter-attachment/matter-attachment-controller.ts#L60",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "1cfd6abb",
      "interpretation": {
        "sig": "1cfd6abb",
        "summary": "Lets a firm lawyer attach a file to a matter, delegating the write to `matter-service`'s `matterAttachment.create`.",
        "flags": [
          "via-services"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterAttachment.delete",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterAttachment.delete",
      "module": "matter",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "DeleteMatterAttachmentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterAttachment/procedures/deleteMatterAttachment.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterAttachment/procedures/deleteMatterAttachment.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterAttachment/router.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterAttachment/router.ts#L7"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterAttachment.delete",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterAttachment.delete",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matter-attachment/matter-attachment-controller.ts#L92",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "9ed33866",
      "interpretation": {
        "sig": "9ed33866",
        "summary": "Lets a firm lawyer remove an attachment from a matter, delegating the write to `matter-service`'s `matterAttachment.delete`.",
        "flags": [
          "via-services"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterAttachment.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterAttachment.list",
      "module": "matter",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ListMatterAttachmentsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterAttachment/procedures/listMatterAttachments.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterAttachment/procedures/listMatterAttachments.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterAttachment/router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterAttachment/router.ts#L8"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterAttachment.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterAttachment.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matter-attachment/matter-attachment-controller.ts#L115",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "76b27c2f",
      "interpretation": {
        "sig": "76b27c2f",
        "summary": "Lists the attachments on a matter, a thin pass-through query to `matter-service`.",
        "flags": []
      }
    },
    {
      "id": "platform-api:matter.matterAlerts.lawyer.getAlertById",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterAlerts.lawyer.getAlertById",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "GetAlertByIdInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterAlerts/procedures/lawyer/getAlertById.query.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterAlerts/procedures/lawyer/getAlertById.query.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterAlerts/router.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterAlerts/router.ts#L7"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/getMatter.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "242ee13a",
      "interpretation": {
        "sig": "242ee13a",
        "summary": "Fetches a single case-quality alert by ID from the external Case Quality service, then joins in the matter it belongs to from `matter-service`.",
        "models": [
          {
            "model": "MatterAlert",
            "service": "caseQuality"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "platform-api:matter.matterAlerts.lawyer.getAlerts",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterAlerts.lawyer.getAlerts",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterAlerts/procedures/lawyer/getAlerts.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterAlerts/procedures/lawyer/getAlerts.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterAlerts/router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterAlerts/router.ts#L8"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/getMatter.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "lawyer.listMatters",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.listMatters",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/listLawyerMatters.query.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "4cbd155",
      "interpretation": {
        "sig": "4cbd155",
        "summary": "Lists open case-quality alerts for a lawyer's matters: resolves either one matter or all matters the lawyer can view, then fetches alerts for those matter IDs from the external Case Quality service and attaches each alert's matter.",
        "models": [
          {
            "model": "MatterAlert",
            "service": "caseQuality"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "platform-api:matter.matterAlerts.lawyer.resolveAlert",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterAlerts.lawyer.resolveAlert",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ResolveAlertInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterAlerts/procedures/lawyer/resolveAlert.mutation.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterAlerts/procedures/lawyer/resolveAlert.mutation.ts#L16"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterAlerts/router.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterAlerts/router.ts#L9"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c2b0f80a",
      "interpretation": {
        "sig": "c2b0f80a",
        "summary": "Marks a case-quality alert `RESOLVED` by calling the external Case Quality service with the resolution method and the resolving lawyer's identity, returning the updated alert. It is a mutation whose only local effect is an outbound HTTP call to that external service, no data written in `platform-api` or `matter-service`.",
        "models": [
          {
            "model": "Alert",
            "service": "caseQuality"
          }
        ],
        "flags": [
          "write-via-external-service",
          "facts-classify-as-read-mechanism-none"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterArtifact.lawyer.getMatterLegalFormArtifact",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterArtifact.lawyer.getMatterLegalFormArtifact",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/getMatterLegalFormArtifact.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/getMatterLegalFormArtifact.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L20"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.getMatterLegalFormArtifact",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.getMatterLegalFormArtifact",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/getMatterLegalFormArtifact.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9edc6c49",
      "interpretation": {
        "sig": "9edc6c49",
        "summary": "Fetches a matter's legal-form artifact (its structured form data), a thin pass-through query to `matter-service`.",
        "flags": []
      }
    },
    {
      "id": "platform-api:matter.matterArtifact.lawyer.getMatterArtifact",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterArtifact.lawyer.getMatterArtifact",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/getMatterArtifact.query.ts",
        "line": 48,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/getMatterArtifact.query.ts#L48"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L21"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.getMatterArtifact",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.getMatterArtifact",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/getMatterArtifact.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "739915a6",
      "interpretation": {
        "sig": "739915a6",
        "summary": "Fetches a single matter artifact (a generated document, e.g. a letter) with its versions, then looks up each version's author in `identity-service` and attaches their name as `lawyerName`.",
        "flags": []
      }
    },
    {
      "id": "platform-api:matter.matterArtifact.lawyer.getMatterArtifactVersions",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterArtifact.lawyer.getMatterArtifactVersions",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/getMatterArtifactVersions.query.ts",
        "line": 47,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/getMatterArtifactVersions.query.ts#L47"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L22"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.getMatterArtifactVersions",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.getMatterArtifactVersions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/getMatterArtifactVersions.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "3cba525b",
      "interpretation": {
        "sig": "3cba525b",
        "summary": "Fetches all versions of a matter artifact, then attaches each version's author name from `identity-service`.",
        "flags": []
      }
    },
    {
      "id": "platform-api:matter.matterArtifact.lawyer.listMatterArtifacts",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterArtifact.lawyer.listMatterArtifacts",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/listMatterArtifacts.query.ts",
        "line": 47,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/listMatterArtifacts.query.ts#L47"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L23"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.listMatterArtifacts",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.listMatterArtifacts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/listMatterArtifacts.query.ts#L7",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b7d584bd",
      "interpretation": {
        "sig": "b7d584bd",
        "summary": "Lists all artifacts on a matter, attaching the author name of each artifact's latest version from `identity-service`.",
        "flags": []
      }
    },
    {
      "id": "platform-api:matter.matterArtifact.lawyer.acceptDraftArtifact",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterArtifact.lawyer.acceptDraftArtifact",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/acceptDraftArtifact.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/acceptDraftArtifact.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L24"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.acceptDraftArtifact",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.acceptDraftArtifact",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/acceptDraftArtifact.mutation.ts#L7",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6750ee95",
      "interpretation": {
        "sig": "6750ee95",
        "summary": "Lets a firm lawyer accept a draft artifact (e.g. a drafted letter), turning it from draft into an accepted version. The write happens in `matter-service`.",
        "flags": [
          "via-services"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterArtifact.lawyer.discardDraftArtifact",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterArtifact.lawyer.discardDraftArtifact",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/discardDraftArtifact.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/discardDraftArtifact.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L25"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.discardDraftArtifact",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.discardDraftArtifact",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/discardDraftArtifact.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ceb2a30f",
      "interpretation": {
        "sig": "ceb2a30f",
        "summary": "Lets a firm lawyer discard a draft artifact, deleting the unaccepted draft. The write happens in `matter-service`.",
        "flags": [
          "via-services"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterArtifact.lawyer.createMatterArtifactFilePreviewUrl",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterArtifact.lawyer.createMatterArtifactFilePreviewUrl",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterArtifactPreviewUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/createMatterArtifactPreviewUrl.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/createMatterArtifactPreviewUrl.mutation.ts#L14"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L26"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.createMatterArtifactFilePreviewUrl",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.createMatterArtifactFilePreviewUrl",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/createMatterArtifactPreviewUrl.mutation.ts#L14",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b6469e48",
      "interpretation": {
        "sig": "b6469e48",
        "summary": "Generates a temporary preview URL for a matter artifact's file, so a lawyer can view it in the browser. Creating that URL is done as a write in `matter-service`.",
        "flags": [
          "via-services"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterArtifact.lawyer.updateMatterArtifactVersion",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterArtifact.lawyer.updateMatterArtifactVersion",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/updateMatterArtifactVersion.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/updateMatterArtifactVersion.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L27"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.updateMatterArtifactVersion",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.updateMatterArtifactVersion",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/updateMatterArtifactVersion.mutation.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7a3e34f6",
      "interpretation": {
        "sig": "7a3e34f6",
        "summary": "Lets a firm lawyer edit a matter artifact's content: HTML body, letterhead (`LAWHIVE` or `FIRM`), and page size (`A4` or `LETTER`), optionally guarded by an `expectedVersionId` for optimistic concurrency. The write happens in `matter-service`.",
        "flags": [
          "via-services"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterArtifact.lawyer.updateMatterArtifactVersionName",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterArtifact.lawyer.updateMatterArtifactVersionName",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/updateMatterArtifactVersionName.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/updateMatterArtifactVersionName.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L28"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.updateMatterArtifactVersionName",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.updateMatterArtifactVersionName",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/updateMatterArtifactVersionName.mutation.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "97d34499",
      "interpretation": {
        "sig": "97d34499",
        "summary": "Lets a lawyer rename a specific saved version of a matter artifact. Delegates straight to `matter-service`, which does the write.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterArtifact.lawyer.createMatterArtifact",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterArtifact.lawyer.createMatterArtifact",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterArtifactInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/createMatterArtifact.mutation.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/createMatterArtifact.mutation.ts#L15"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L29"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.createMatterArtifact",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.createMatterArtifact",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/createMatterArtifact.mutation.ts#L19",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "521c1fff",
      "interpretation": {
        "sig": "521c1fff",
        "summary": "Creates a new matter artifact (a `BLANK` document, a `FILLED_FORM`, or one `FROM_PRECEDENT`) for a matter, with initial content supplied by the lawyer. The actual persistence happens in `matter-service`.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterArtifact.lawyer.exportMatterArtifactDocx",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterArtifact.lawyer.exportMatterArtifactDocx",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/exportMatterArtifactDocx.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/exportMatterArtifactDocx.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L30"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.exportMatterArtifactDocx",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.exportMatterArtifactDocx",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/exportMatterArtifactDocx.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f90d96a3",
      "interpretation": {
        "sig": "f90d96a3",
        "summary": "Kicks off a DOCX export of a matter artifact for the given matter, with an optional a4/letter page size. `matter-service` generates and returns the file.",
        "flags": [
          "mutation-triggers-file-generation-not-just-a-read"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterArtifact.lawyer.exportMatterArtifactPdf",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterArtifact.lawyer.exportMatterArtifactPdf",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/exportMatterArtifactPdf.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/exportMatterArtifactPdf.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L31"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.exportMatterArtifactPdf",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.exportMatterArtifactPdf",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/exportMatterArtifactPdf.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "206871d9",
      "interpretation": {
        "sig": "206871d9",
        "summary": "Kicks off a PDF export of a matter artifact for the given matter, with an optional a4/letter page size. `matter-service` generates and returns the file.",
        "flags": [
          "mutation-triggers-file-generation-not-just-a-read"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterArtifact.lawyer.updateMatterArtifactName",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterArtifact.lawyer.updateMatterArtifactName",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/updateMatterArtifactName.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/updateMatterArtifactName.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 32,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L32"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.updateMatterArtifactName",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.updateMatterArtifactName",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/updateMatterArtifactName.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "65545461",
      "interpretation": {
        "sig": "65545461",
        "summary": "Lets a lawyer rename a matter artifact itself (not a specific version). Delegates to `matter-service` for the write.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterArtifact.lawyer.finalizeArtifactFile",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterArtifact.lawyer.finalizeArtifactFile",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/finalizeArtifactFile.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/finalizeArtifactFile.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 33,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L33"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.finalizeArtifactFile",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.finalizeArtifactFile",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/finalizeArtifactFile.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/file.uploaded"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "dc8e2480",
      "interpretation": {
        "sig": "dc8e2480",
        "summary": "Finalizes an artifact as an uploaded file (PDF or DOCX) on a matter, recording who uploaded it, its display name, visibility (`ALL` or `FIRM_SIDE_ONLY`), and optional folder and base64 content. `matter-service` performs the write and, once the file is uploaded, `matter-service/file.uploaded` fires to drive downstream Inngest functions.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ],
        "flags": [
          "triggers matter-service/file.uploaded"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterArtifact.lawyer.unfinalizeArtifactFile",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterArtifact.lawyer.unfinalizeArtifactFile",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/unfinalizeArtifactFile.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/unfinalizeArtifactFile.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 34,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L34"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.unfinalizeArtifactFile",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.unfinalizeArtifactFile",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/unfinalizeArtifactFile.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7ed830f1",
      "interpretation": {
        "sig": "7ed830f1",
        "summary": "Reverts a finalized artifact file back to an editable (non-finalized) state on a matter. `matter-service` performs the write.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterArtifact.lawyer.listFinalisedMatterArtifacts",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterArtifact.lawyer.listFinalisedMatterArtifacts",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/listFinalisedMatterArtifacts.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/listFinalisedMatterArtifacts.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L35"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.listFinalisedMatterArtifacts",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.listFinalisedMatterArtifacts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/listFinalisedMatterArtifacts.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f0526dc",
      "interpretation": {
        "sig": "f0526dc",
        "summary": "Lists the finalized artifacts (files) attached to a matter, for a lawyer to review. Pure read, proxied to `matter-service`.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.createMatterDocumentEmpty",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.createMatterDocumentEmpty",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "CreateMatterDocumentEmptyInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentEmpty.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentEmpty.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 36,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L36"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.createMatterDocumentEmpty",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.createMatterDocumentEmpty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentEmpty.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e44b80ec",
      "interpretation": {
        "sig": "e44b80ec",
        "summary": "Creates a new blank matter document for a firm-side lawyer to start drafting from scratch. `matter-service` performs the write.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.createMatterDocumentFromTemplate",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.createMatterDocumentFromTemplate",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "CreateMatterDocumentFromTemplateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentFromTemplate.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentFromTemplate.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L37"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.createMatterDocumentFromTemplate",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.createMatterDocumentFromTemplate",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentFromTemplate.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e517f5b1",
      "interpretation": {
        "sig": "e517f5b1",
        "summary": "Creates a new matter document pre-filled from a document template. `matter-service` performs the write.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.createMatterDocumentFromExistingDocument",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.createMatterDocumentFromExistingDocument",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "CreateMatterDocumentFromExistingDocumentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentFromExistingDocument.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentFromExistingDocument.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 38,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L38"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.createMatterDocumentFromExistingDocument",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.createMatterDocumentFromExistingDocument",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentFromExistingDocument.mutation.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "2b37e727",
      "interpretation": {
        "sig": "2b37e727",
        "summary": "Creates a new matter document by copying the content of an existing document. `matter-service` performs the write. No app calls this directly today; it's reached only from other services.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ],
        "flags": [
          "not called from apps, only from services"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.createMatterDocumentFromPlainText",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.createMatterDocumentFromPlainText",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "CreateMatterDocumentFromPlainTextInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentFromPlainText.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentFromPlainText.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 40,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L40"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.createMatterDocumentFromPlainText",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.createMatterDocumentFromPlainText",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentFromPlainText.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "6b327ce2",
      "interpretation": {
        "sig": "6b327ce2",
        "summary": "Creates a new matter document from a plain-text body. `matter-service` performs the write. No app calls this directly today; it's reached only from other services.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ],
        "flags": [
          "not called from apps, only from services"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.createMatterDocumentFromMarkdown",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.createMatterDocumentFromMarkdown",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "CreateMatterDocumentFromMarkdownInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentFromMarkdown.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentFromMarkdown.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 42,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L42"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.createMatterDocumentFromMarkdown",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.createMatterDocumentFromMarkdown",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentFromMarkdown.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "f0f19db0",
      "interpretation": {
        "sig": "f0f19db0",
        "summary": "Creates a new matter document from a markdown source. `matter-service` performs the write. No app calls this directly today; it's reached only from other services.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ],
        "flags": [
          "not called from apps, only from services"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.createMatterDocumentFromHtml",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.createMatterDocumentFromHtml",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "CreateMatterDocumentFromHtmlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentFromHtml.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentFromHtml.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 43,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L43"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.createMatterDocumentFromHtml",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.createMatterDocumentFromHtml",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentFromHtml.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "54de3408",
      "interpretation": {
        "sig": "54de3408",
        "summary": "Creates a new matter document from an HTML source. `matter-service` performs the write. No app calls this directly today; it's reached only from other services.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ],
        "flags": [
          "not called from apps, only from services"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.createMatterDocumentFromProsemirrorJson",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.createMatterDocumentFromProsemirrorJson",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "CreateMatterDocumentFromProsemirrorJsonInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentFromProsemirrorJson.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentFromProsemirrorJson.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 44,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L44"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.createMatterDocumentFromProsemirrorJson",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.createMatterDocumentFromProsemirrorJson",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentFromProsemirrorJson.mutation.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "8bfb54d3",
      "interpretation": {
        "sig": "8bfb54d3",
        "summary": "Creates a new matter document from a Prosemirror JSON document (the editor's native rich-text format). `matter-service` performs the write. No app calls this directly today; it's reached only from other services.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ],
        "flags": [
          "not called from apps, only from services"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.createMatterDocumentFromUploadedDocx",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.createMatterDocumentFromUploadedDocx",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "CreateMatterDocumentFromUploadedDocxInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentFromUploadedDocx.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentFromUploadedDocx.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 46,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L46"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.createMatterDocumentFromUploadedDocx",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.createMatterDocumentFromUploadedDocx",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentFromUploadedDocx.mutation.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "15e72ac5",
      "interpretation": {
        "sig": "15e72ac5",
        "summary": "Creates a new matter document by converting an uploaded DOCX file into editable content. `matter-service` performs the write.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.listMatterDocuments",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.listMatterDocuments",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "ListMatterDocumentsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/listMatterDocuments.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/listMatterDocuments.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 48,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L48"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.listMatterDocuments",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.listMatterDocuments",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/listMatterDocuments.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ef1c7acd",
      "interpretation": {
        "sig": "ef1c7acd",
        "summary": "Lists the documents attached to a matter for a firm lawyer. Pure passthrough to `matter-service`; `platform-api` does no work of its own besides auth and forwarding.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.getMatterDocument",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.getMatterDocument",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "GetMatterDocumentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/getMatterDocument.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/getMatterDocument.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 49,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L49"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.getMatterDocument",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.getMatterDocument",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/getMatterDocument.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9e7e3998",
      "interpretation": {
        "sig": "9e7e3998",
        "summary": "Fetches a single matter document's metadata for a firm lawyer, forwarded straight to `matter-service`.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.getMatterDocumentContentYjs",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.getMatterDocumentContentYjs",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "GetMatterDocumentContentYjsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/getMatterDocumentContentYjs.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/getMatterDocumentContentYjs.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 50,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L50"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.getMatterDocumentContentYjs",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.getMatterDocumentContentYjs",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/getMatterDocumentContentYjs.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f0a7b543",
      "interpretation": {
        "sig": "f0a7b543",
        "summary": "Returns a matter document's content as a Yjs CRDT update, used to load the collaborative editor. Passthrough to `matter-service`.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.getMatterDocumentContentProsemirrorJson",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.getMatterDocumentContentProsemirrorJson",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "GetMatterDocumentContentProsemirrorJsonInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/getMatterDocumentContentProsemirrorJson.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/getMatterDocumentContentProsemirrorJson.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 51,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L51"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.getMatterDocumentContentProsemirrorJson",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.getMatterDocumentContentProsemirrorJson",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/getMatterDocumentContentProsemirrorJson.query.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "9c4fa70d",
      "interpretation": {
        "sig": "9c4fa70d",
        "summary": "Returns a matter document's content as ProseMirror JSON. Passthrough to `matter-service`; not called from any app, only from other services.",
        "flags": [
          "looks unused by apps"
        ],
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.getMatterDocumentContentPlainText",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.getMatterDocumentContentPlainText",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "GetMatterDocumentContentPlainTextInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/getMatterDocumentContentPlainText.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/getMatterDocumentContentPlainText.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 53,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L53"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.getMatterDocumentContentPlainText",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.getMatterDocumentContentPlainText",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/getMatterDocumentContentPlainText.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "ee3a0c58",
      "interpretation": {
        "sig": "ee3a0c58",
        "summary": "Returns a matter document's content as plain text. Passthrough to `matter-service`; not called from any app, only from other services.",
        "flags": [
          "looks unused by apps"
        ],
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.getMatterDocumentContentMarkdown",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.getMatterDocumentContentMarkdown",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "GetMatterDocumentContentMarkdownInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/getMatterDocumentContentMarkdown.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/getMatterDocumentContentMarkdown.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 54,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L54"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.getMatterDocumentContentMarkdown",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.getMatterDocumentContentMarkdown",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/getMatterDocumentContentMarkdown.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "c95cb194",
      "interpretation": {
        "sig": "c95cb194",
        "summary": "Returns a matter document's content as Markdown. Passthrough to `matter-service`; not called from any app, only from other services.",
        "flags": [
          "looks unused by apps"
        ],
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.getMatterDocumentContentDocx",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.getMatterDocumentContentDocx",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "GetMatterDocumentContentDocxInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/getMatterDocumentContentDocx.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/getMatterDocumentContentDocx.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 55,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L55"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.getMatterDocumentContentDocx",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.getMatterDocumentContentDocx",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/getMatterDocumentContentDocx.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "37d259d5",
      "interpretation": {
        "sig": "37d259d5",
        "summary": "Returns a matter document's content as a Word (.docx) export, for lawyer download. Passthrough to `matter-service`.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.getMatterDocumentContentPdf",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.getMatterDocumentContentPdf",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "GetMatterDocumentContentPdfInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/getMatterDocumentContentPdf.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/getMatterDocumentContentPdf.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 56,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L56"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.getMatterDocumentContentPdf",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.getMatterDocumentContentPdf",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/getMatterDocumentContentPdf.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "ec00afd5",
      "interpretation": {
        "sig": "ec00afd5",
        "summary": "Returns a matter document's content as a PDF export. Passthrough to `matter-service`; not called from any app, only from other services.",
        "flags": [
          "looks unused by apps"
        ],
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.finalizeMatterDocument",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.finalizeMatterDocument",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "FinalizeMatterDocumentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/finalizeMatterDocument.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/finalizeMatterDocument.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 57,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L57"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.finalizeMatterDocument",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.finalizeMatterDocument",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/finalizeMatterDocument.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/file.deleted",
        "matter-service/file.uploaded"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b44093c8",
      "interpretation": {
        "sig": "b44093c8",
        "summary": "Lets a firm lawyer finalize a matter document, locking it from further edits. Delegates the write to `matter-service`; two Inngest events (`file.uploaded`, `file.deleted`) can also fire durable functions related to this flow.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.unfinalizeMatterDocument",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.unfinalizeMatterDocument",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "UnfinalizeMatterDocumentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/unfinalizeMatterDocument.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/unfinalizeMatterDocument.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 58,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L58"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.unfinalizeMatterDocument",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.unfinalizeMatterDocument",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/unfinalizeMatterDocument.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/file.deleted"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7afd5d2b",
      "interpretation": {
        "sig": "7afd5d2b",
        "summary": "Lets a firm lawyer reopen a previously finalized matter document for editing again. Delegates the write to `matter-service`; a `file.deleted` Inngest event can also fire from this flow.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.deleteMatterDocument",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.deleteMatterDocument",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "DeleteMatterDocumentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/deleteMatterDocument.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/deleteMatterDocument.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 59,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L59"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.deleteMatterDocument",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.deleteMatterDocument",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/deleteMatterDocument.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "8de42d76",
      "interpretation": {
        "sig": "8de42d76",
        "summary": "Lets a firm lawyer delete a matter document. Delegates the write to `matter-service`.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.updateMatterDocumentInfo",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.updateMatterDocumentInfo",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "UpdateMatterDocumentInfoInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/updateMatterDocumentInfo.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/updateMatterDocumentInfo.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 60,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L60"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.updateMatterDocumentInfo",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.updateMatterDocumentInfo",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/updateMatterDocumentInfo.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "59737f80",
      "interpretation": {
        "sig": "59737f80",
        "summary": "Lets a firm lawyer update a matter document's metadata (e.g. name/info fields). Delegates the write to `matter-service`.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.applyMatterDocumentYjsUpdate",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.applyMatterDocumentYjsUpdate",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "ApplyMatterDocumentYjsUpdateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/applyMatterDocumentYjsUpdate.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/applyMatterDocumentYjsUpdate.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 61,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L61"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.applyMatterDocumentYjsUpdate",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.applyMatterDocumentYjsUpdate",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/applyMatterDocumentYjsUpdate.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "content-service/content.updatePersisted"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "116c0b5f",
      "interpretation": {
        "sig": "116c0b5f",
        "summary": "Applies an incremental Yjs CRDT update to a matter document's content, the write path behind the collaborative editor. Delegates to `matter-service` and can trigger `content-service`'s `content.updatePersisted` Inngest event.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.createMatterDocumentVersion",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.createMatterDocumentVersion",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "CreateMatterDocumentVersionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentVersion.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentVersion.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 62,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L62"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.createMatterDocumentVersion",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.createMatterDocumentVersion",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersion.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "2949c655",
      "interpretation": {
        "sig": "2949c655",
        "summary": "Creates a new version snapshot of a matter document's content. Delegates the write to `matter-service`; not called from any app, only from other services.",
        "flags": [
          "looks unused by apps"
        ],
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.createMatterDocumentVersionFromPlainText",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.createMatterDocumentVersionFromPlainText",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "CreateMatterDocumentVersionFromPlainTextInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromPlainText.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromPlainText.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 63,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L63"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.createMatterDocumentVersionFromPlainText",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.createMatterDocumentVersionFromPlainText",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromPlainText.mutation.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "d68ccb16",
      "interpretation": {
        "sig": "d68ccb16",
        "summary": "Creates a new version of a matter document by writing in plain text content directly (bypassing the collaborative editor). Delegates to `matter-service`; not called from any app, only from other services.",
        "flags": [
          "looks unused by apps"
        ],
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.createMatterDocumentVersionFromMarkdown",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.createMatterDocumentVersionFromMarkdown",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "CreateMatterDocumentVersionFromMarkdownInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromMarkdown.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromMarkdown.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 65,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L65"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.createMatterDocumentVersionFromMarkdown",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.createMatterDocumentVersionFromMarkdown",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromMarkdown.mutation.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "79b21be0",
      "interpretation": {
        "sig": "79b21be0",
        "summary": "Creates a new version of a matter document by writing in Markdown content directly. Delegates to `matter-service`; not called from any app, only from other services.",
        "flags": [
          "looks unused by apps"
        ],
        "models": [
          {
            "model": "MatterDocument",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.createMatterDocumentVersionFromHtml",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.createMatterDocumentVersionFromHtml",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "CreateMatterDocumentVersionFromHtmlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromHtml.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromHtml.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 67,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L67"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.createMatterDocumentVersionFromHtml",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.createMatterDocumentVersionFromHtml",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromHtml.mutation.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "11a1c9dc",
      "interpretation": {
        "sig": "11a1c9dc",
        "summary": "Lets a firm lawyer save a new version of a matter document from raw HTML content, delegating the write entirely to `matter-service`.",
        "models": [
          {
            "model": "MatterDocumentVersion",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.createMatterDocumentVersionFromProsemirrorJson",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.createMatterDocumentVersionFromProsemirrorJson",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "CreateMatterDocumentVersionFromProsemirrorJsonInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromProsemirrorJson.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromProsemirrorJson.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 69,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L69"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.createMatterDocumentVersionFromProsemirrorJson",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.createMatterDocumentVersionFromProsemirrorJson",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromProsemirrorJson.mutation.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "f5bfba39",
      "interpretation": {
        "sig": "f5bfba39",
        "summary": "Lets a firm lawyer save a new version of a matter document from a ProseMirror JSON editor state, passing the write straight through to `matter-service`.",
        "models": [
          {
            "model": "MatterDocumentVersion",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.createMatterDocumentVersionFromYjsSnapshot",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.createMatterDocumentVersionFromYjsSnapshot",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "CreateMatterDocumentVersionFromYjsSnapshotInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromYjsSnapshot.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromYjsSnapshot.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 71,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L71"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.createMatterDocumentVersionFromYjsSnapshot",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.createMatterDocumentVersionFromYjsSnapshot",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromYjsSnapshot.mutation.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "aae9fdb3",
      "interpretation": {
        "sig": "aae9fdb3",
        "summary": "Lets a firm lawyer save a new document version from a Yjs collaborative-editing snapshot, forwarding the write to `matter-service`.",
        "models": [
          {
            "model": "MatterDocumentVersion",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.createMatterDocumentVersionFromExistingVersion",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.createMatterDocumentVersionFromExistingVersion",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "CreateMatterDocumentVersionFromExistingVersionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromExistingVersion.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromExistingVersion.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 73,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L73"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.createMatterDocumentVersionFromExistingVersion",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.createMatterDocumentVersionFromExistingVersion",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersionFromExistingVersion.mutation.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5406102",
      "interpretation": {
        "sig": "5406102",
        "summary": "Lets a firm lawyer branch a document by creating a new version copied from an earlier one, with `matter-service` doing the actual write.",
        "models": [
          {
            "model": "MatterDocumentVersion",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.createMatterDocumentVersionDocxUpload",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.createMatterDocumentVersionDocxUpload",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "CreateMatterDocumentVersionDocxUploadInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentVersionDocxUpload.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/createMatterDocumentVersionDocxUpload.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 75,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L75"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.createMatterDocumentVersionDocxUpload",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.createMatterDocumentVersionDocxUpload",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/createMatterDocumentVersionDocxUpload.mutation.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "569fd022",
      "interpretation": {
        "sig": "569fd022",
        "summary": "Lets a firm lawyer create a new document version from an uploaded .docx file, with `matter-service` handling conversion and storage.",
        "models": [
          {
            "model": "MatterDocumentVersion",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.updateMatterDocumentVersionInfo",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.updateMatterDocumentVersionInfo",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "UpdateMatterDocumentVersionInfoInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/updateMatterDocumentVersionInfo.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/updateMatterDocumentVersionInfo.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 77,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L77"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.updateMatterDocumentVersionInfo",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.updateMatterDocumentVersionInfo",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/updateMatterDocumentVersionInfo.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "8e391e12",
      "interpretation": {
        "sig": "8e391e12",
        "summary": "Lets a firm lawyer edit metadata (such as title) on an existing matter document version, delegating the write to `matter-service`.",
        "models": [
          {
            "model": "MatterDocumentVersion",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.deleteMatterDocumentVersion",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.deleteMatterDocumentVersion",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "DeleteMatterDocumentVersionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/deleteMatterDocumentVersion.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/deleteMatterDocumentVersion.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 78,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L78"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.deleteMatterDocumentVersion",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.deleteMatterDocumentVersion",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/deleteMatterDocumentVersion.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "f6d48714",
      "interpretation": {
        "sig": "f6d48714",
        "summary": "Lets a firm lawyer delete a document version, forwarding the delete straight to `matter-service`.",
        "models": [
          {
            "model": "MatterDocumentVersion",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterDocument.lawyer.listMatterDocumentVersions",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterDocument.lawyer.listMatterDocumentVersions",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "ListMatterDocumentVersionsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/listMatterDocumentVersions.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/procedures/lawyer/listMatterDocumentVersions.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterDocuments/router.ts",
        "line": 79,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterDocuments/router.ts#L79"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.lawyer.listMatterDocumentVersions",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterDocument.lawyer.listMatterDocumentVersions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/lawyer/listMatterDocumentVersions.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "identity.getPeople",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.getPeople",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentities.query.ts#L8",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3dc5888a",
      "interpretation": {
        "sig": "3dc5888a",
        "summary": "Returns the version history of a matter document, enriching each version with the identity of who created it via `identity-service`.",
        "models": [
          {
            "model": "MatterDocumentVersion",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterContact.lawyer.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterContact.lawyer.list",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "InputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterContacts/procedures/lawyer/list.query.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterContacts/procedures/lawyer/list.query.ts#L13"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterContacts/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterContacts/router.ts#L15"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/getMatter.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "matterContact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterContact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/list.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "matterContactSlot.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterContactSlot.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContactSlot/procedures/list.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "contact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list.query.ts#L31",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "5a90690f",
      "interpretation": {
        "sig": "5a90690f",
        "summary": "Returns the contacts and unfilled contact slots attached to a matter, after checking the lawyer has view access, joined with contact details from `identity-service`.",
        "models": [
          {
            "model": "MatterContact",
            "service": "matter-service"
          },
          {
            "model": "MatterContactSlot",
            "service": "matter-service"
          },
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterContact.lawyer.listSuggested",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterContact.lawyer.listSuggested",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ListSuggestedMatterContactsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterContacts/procedures/lawyer/list-suggested.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterContacts/procedures/lawyer/list-suggested.query.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterContacts/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterContacts/router.ts#L16"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/getMatter.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "matterContact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterContact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/list.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "contact.searchWithRelations",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.searchWithRelations",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/search-with-relations.query.ts#L107",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "1f9e686f",
      "interpretation": {
        "sig": "1f9e686f",
        "summary": "Suggests contacts a lawyer could attach to a matter, searching `identity-service`'s contact records by firm, search term, and role.",
        "models": [
          {
            "model": "MatterContact",
            "service": "matter-service"
          },
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterContact.lawyer.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterContact.lawyer.create",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CreateLawyerMatterContactInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterContacts/procedures/lawyer/create.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterContacts/procedures/lawyer/create.mutation.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterContacts/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterContacts/router.ts#L17"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "contact.listByIds",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.listByIds",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list-by-ids.query.ts#L17",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "matterContact.create",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterContact.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/create.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "93ccccc5",
      "interpretation": {
        "sig": "93ccccc5",
        "summary": "Lets a lawyer with manage access attach a contact to a matter, first verifying the contact (and any parent contact) belongs to the firm, then creating the `MatterContact` record via `matter-service`.",
        "models": [
          {
            "model": "MatterContact",
            "service": "matter-service"
          },
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterContact.lawyer.update",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterContact.lawyer.update",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "UpdateLawyerMatterContactInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterContacts/procedures/lawyer/update.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterContacts/procedures/lawyer/update.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterContacts/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterContacts/router.ts#L18"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterContact.update",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterContact.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/update.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "54eb2ce9",
      "interpretation": {
        "sig": "54eb2ce9",
        "summary": "Lets a firm lawyer edit an existing matter contact's details, with `matter-service` performing the update.",
        "models": [
          {
            "model": "MatterContact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterContact.lawyer.delete",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterContact.lawyer.delete",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "DeleteMatterContactInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterContacts/procedures/lawyer/delete.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterContacts/procedures/lawyer/delete.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterContacts/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterContacts/router.ts#L19"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterContact.deleteWithCascade",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterContact.deleteWithCascade",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/delete-with-cascade.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "4dac0f13",
      "interpretation": {
        "sig": "4dac0f13",
        "summary": "Lets a firm lawyer remove a contact from a matter, including any dependent records, via `matter-service`'s cascading delete.",
        "models": [
          {
            "model": "MatterContact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterContact.lawyer.fillSlot",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterContact.lawyer.fillSlot",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "FillMatterContactSlotSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterContacts/procedures/lawyer/fill-slot.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterContacts/procedures/lawyer/fill-slot.mutation.ts#L12"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterContacts/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterContacts/router.ts#L20"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterContactSlot.get",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterContactSlot.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContactSlot/procedures/get.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "contact.listByIds",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.listByIds",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list-by-ids.query.ts#L17",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "matterContactSlot.fill",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterContactSlot.fill",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContactSlot/procedures/fill.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "50f9591b",
      "interpretation": {
        "sig": "50f9591b",
        "summary": "Lets a lawyer assign a contact to fill an empty matter contact slot (e.g. an unnamed 'other party' role), after checking the slot exists, the lawyer has manage access to the matter, and the contact (and parent) belongs to the firm.",
        "models": [
          {
            "model": "MatterContactSlot",
            "service": "matter-service"
          },
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFileFolder.lawyer.listMatterFileFolders",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterFileFolder.lawyer.listMatterFileFolders",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFileFolders/procedures/lawyer/listMatterFileFolders.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFileFolders/procedures/lawyer/listMatterFileFolders.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFileFolders/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFileFolders/router.ts#L10"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFileFolder.lawyer.listMatterFileFolders",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterFileFolder.lawyer.listMatterFileFolders",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/procedures/lawyer/listMatterFileFolders.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7bf95d45",
      "interpretation": {
        "sig": "7bf95d45",
        "summary": "Returns the file folders for a matter, read straight from `matter-service` with no extra logic.",
        "models": [
          {
            "model": "MatterFileFolder",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFileFolder.lawyer.updateMatterFileFolder",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterFileFolder.lawyer.updateMatterFileFolder",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "UpdateMatterFileFolderInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFileFolders/procedures/lawyer/updateMatterFileFolder.mutation.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFileFolders/procedures/lawyer/updateMatterFileFolder.mutation.ts#L17"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFileFolders/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFileFolders/router.ts#L11"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFileFolder.lawyer.updateMatterFileFolder",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFileFolder.lawyer.updateMatterFileFolder",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/procedures/lawyer/updateMatterFileFolder.mutation.ts#L17",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "fee9fd50",
      "interpretation": {
        "sig": "fee9fd50",
        "summary": "Lets a lawyer rename, recolour, or reorder a matter file folder, passing the change through to `matter-service`.",
        "models": [
          {
            "model": "MatterFileFolder",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFileFolder.lawyer.deleteMatterFileFolder",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterFileFolder.lawyer.deleteMatterFileFolder",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "DeleteMatterFileFolderInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFileFolders/procedures/lawyer/deleteMatterFileFolder.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFileFolders/procedures/lawyer/deleteMatterFileFolder.mutation.ts#L14"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFileFolders/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFileFolders/router.ts#L12"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFileFolder.lawyer.deleteMatterFileFolder",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFileFolder.lawyer.deleteMatterFileFolder",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/procedures/lawyer/deleteMatterFileFolder.mutation.ts#L14",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "dbf56a5a",
      "interpretation": {
        "sig": "dbf56a5a",
        "summary": "Lets a firm lawyer delete a file folder on a matter. Delegates entirely to `matter-service`, which does the actual removal.",
        "flags": [
          "via-services write"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFileFolder.lawyer.insertMatterFileFolder",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterFileFolder.lawyer.insertMatterFileFolder",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "InsertMatterFileFolderInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFileFolders/procedures/lawyer/insertMatterFileFolder.mutation.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFileFolders/procedures/lawyer/insertMatterFileFolder.mutation.ts#L15"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFileFolders/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFileFolders/router.ts#L13"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFileFolder.lawyer.insertMatterFileFolder",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFileFolder.lawyer.insertMatterFileFolder",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/procedures/lawyer/insertMatterFileFolder.mutation.ts#L15",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "11c082c",
      "interpretation": {
        "sig": "11c082c",
        "summary": "Lets a firm lawyer create a new file folder (title, colour) on a matter. Delegates to `matter-service` to create the record.",
        "flags": [
          "via-services write"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFileFolder.lawyer.insertAndSetMatterFileFolder",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterFileFolder.lawyer.insertAndSetMatterFileFolder",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "InsertAndSetMatterFileFolderInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFileFolders/procedures/lawyer/insertAndSetMatterFileFolder.mutation.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFileFolders/procedures/lawyer/insertAndSetMatterFileFolder.mutation.ts#L16"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFileFolders/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFileFolders/router.ts#L14"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFileFolder.lawyer.insertAndSetMatterFileFolder",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFileFolder.lawyer.insertAndSetMatterFileFolder",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/procedures/lawyer/insertAndSetMatterFileFolder.mutation.ts#L16",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3e39c311",
      "interpretation": {
        "sig": "3e39c311",
        "summary": "Lets a firm lawyer create a folder and immediately assign a given set of matter files into it in one call, via `matter-service`.",
        "flags": [
          "via-services write"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFile.lawyer.listMatterFiles",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterFile.lawyer.listMatterFiles",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/lawyer/listMatterFiles.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/lawyer/listMatterFiles.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L27"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.lawyer.listMatterFiles",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterFile.lawyer.listMatterFiles",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/lawyer/listMatterFiles.query.ts#L7",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "22045129",
      "interpretation": {
        "sig": "22045129",
        "summary": "Lists the files attached to a matter for the firm lawyer's view. Pure passthrough read to `matter-service`, no local logic.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFile.lawyer.getMatterFile",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterFile.lawyer.getMatterFile",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/lawyer/getMatterFile.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/lawyer/getMatterFile.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L28"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.lawyer.getMatterFile",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterFile.lawyer.getMatterFile",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/lawyer/getMatterFile.query.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "221b49ea",
      "interpretation": {
        "sig": "221b49ea",
        "summary": "Fetches a single matter file's details by id for a firm lawyer. Passthrough read to `matter-service`.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFile.lawyer.updateMatterFile",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterFile.lawyer.updateMatterFile",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "UpdateMatterFileInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/lawyer/updateMatterFile.mutation.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/lawyer/updateMatterFile.mutation.ts#L15"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L29"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.lawyer.updateMatterFile",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFile.lawyer.updateMatterFile",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/lawyer/updateMatterFile.mutation.ts#L16",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "71be5d58",
      "interpretation": {
        "sig": "71be5d58",
        "summary": "Lets a firm lawyer rename a matter file or change its visibility (e.g. client-visible vs internal). Write is delegated to `matter-service`.",
        "flags": [
          "via-services write"
        ],
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFile.lawyer.deleteMatterFile",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterFile.lawyer.deleteMatterFile",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "deleteMatterFileSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/lawyer/deleteMatterFile.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/lawyer/deleteMatterFile.mutation.ts#L12"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L30"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.lawyer.deleteMatterFile",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFile.lawyer.deleteMatterFile",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/lawyer/deleteMatterFile.mutation.ts#L12",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/file.deleted"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5ac7467d",
      "interpretation": {
        "sig": "5ac7467d",
        "summary": "Lets a firm lawyer delete a matter file. `matter-service` performs the deletion and fires a `file.deleted` Inngest event afterward.",
        "flags": [
          "via-services write"
        ],
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFile.lawyer.insertMatterFile",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterFile.lawyer.insertMatterFile",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "InsertMatterFileInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/lawyer/insertMatterFile.mutation.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/lawyer/insertMatterFile.mutation.ts#L21"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L31"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.lawyer.insertMatterFile",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFile.lawyer.insertMatterFile",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/lawyer/insertMatterFile.mutation.ts#L26",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/file.uploaded"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "cf665854",
      "interpretation": {
        "sig": "cf665854",
        "summary": "Registers an uploaded file (already in S3) against a matter, recording its display name, original name, visibility and source, and optionally flags other participants to be notified. `matter-service` creates the record and fires a `file.uploaded` Inngest event.",
        "flags": [
          "via-services write"
        ],
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFile.lawyer.createMatterFileDownloadUrl",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterFile.lawyer.createMatterFileDownloadUrl",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "createMatterFileDownloadUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/lawyer/createMatterFileDownloadUrl.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/lawyer/createMatterFileDownloadUrl.mutation.ts#L14"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 32,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L32"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.lawyer.createMatterFileDownloadUrl",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFile.lawyer.createMatterFileDownloadUrl",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/lawyer/createMatterFileDownloadUrl.mutation.ts#L14",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ddcb76d4",
      "interpretation": {
        "sig": "ddcb76d4",
        "summary": "Gets a download URL for one matter file. Named as a mutation but only produces a signed link via `matter-service`; the write mechanism reflects the RPC style, not a data change.",
        "flags": [
          "read-that-writes: mutation only generates a URL"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFile.lawyer.createMatterFileDownloadUrls",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterFile.lawyer.createMatterFileDownloadUrls",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "createMatterFileDownloadUrlsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/lawyer/createMatterFileDownloadUrls.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/lawyer/createMatterFileDownloadUrls.mutation.ts#L14"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 33,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L33"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.lawyer.createMatterFileDownloadUrls",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFile.lawyer.createMatterFileDownloadUrls",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/lawyer/createMatterFileDownloadUrls.mutation.ts#L14",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a1857cd1",
      "interpretation": {
        "sig": "a1857cd1",
        "summary": "Gets download URLs for a batch of matter files at once, via `matter-service`. Like the single-file version, this is effectively a read exposed as a mutation.",
        "flags": [
          "read-that-writes: mutation only generates URLs"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFile.lawyer.createMatterFilePreviewUrl",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterFile.lawyer.createMatterFilePreviewUrl",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterFilePreviewUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/lawyer/createMatterFilePreviewUrl.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/lawyer/createMatterFilePreviewUrl.mutation.ts#L14"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 34,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L34"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.lawyer.createMatterFilePreviewUrl",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFile.lawyer.createMatterFilePreviewUrl",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/lawyer/createMatterFilePreviewUrl.mutation.ts#L15",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d85804c",
      "interpretation": {
        "sig": "d85804c",
        "summary": "Gets a preview URL for a matter file (for in-app viewing rather than download), via `matter-service`. Another read dressed up as a mutation.",
        "flags": [
          "read-that-writes: mutation only generates a URL"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFile.lawyer.createMatterFileUploadUrl",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterFile.lawyer.createMatterFileUploadUrl",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ListMatterFileUploadUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/lawyer/createMatterFileUploadUrl.mutation.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/lawyer/createMatterFileUploadUrl.mutation.ts#L16"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L35"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.lawyer.createMatterFileUploadUrl",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFile.lawyer.createMatterFileUploadUrl",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/lawyer/createMatterFileUploadUrl.mutation.ts#L17",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "736ebc83",
      "interpretation": {
        "sig": "736ebc83",
        "summary": "Gets a pre-signed S3 upload URL for a given filename and mime type, so the lawyer's browser can upload a file directly to storage. `matter-service` issues the URL; the actual file record is created afterward via `insertMatterFile`.",
        "flags": [
          "via-services write"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFile.lawyer.setMatterFilesFolder",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterFile.lawyer.setMatterFilesFolder",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "setMatterFilesFolderSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/lawyer/setMatterFilesFolder.mutation.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/lawyer/setMatterFilesFolder.mutation.ts#L16"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 36,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L36"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.lawyer.setMatterFilesFolder",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFile.lawyer.setMatterFilesFolder",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/lawyer/setMatterFilesFolder.mutation.ts#L17",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6b00b892",
      "interpretation": {
        "sig": "6b00b892",
        "summary": "Lets a firm lawyer move one or more matter files into a folder, or clear their folder by passing null. `matter-service` applies the change.",
        "flags": [
          "via-services write"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterNote.lawyer.listMatterNotes",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterNote.lawyer.listMatterNotes",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterNotes/procedures/lawyer/listMatterNotes.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterNotes/procedures/lawyer/listMatterNotes.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterNotes/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterNotes/router.ts#L12"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterNote.lawyer.listMatterNotes",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterNote.lawyer.listMatterNotes",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/lawyer/listMatterNotes.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "826aa4dd",
      "interpretation": {
        "sig": "826aa4dd",
        "summary": "Lists the notes recorded on a matter for the firm lawyer's view. Pure passthrough read to `matter-service`.",
        "models": [
          {
            "model": "MatterNote",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterNote.lawyer.getMatterNote",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterNote.lawyer.getMatterNote",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterNotes/procedures/lawyer/getMatterNote.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterNotes/procedures/lawyer/getMatterNote.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterNotes/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterNotes/router.ts#L13"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterNote.lawyer.getMatterNote",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterNote.lawyer.getMatterNote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/lawyer/getMatterNote.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "638aaa86",
      "interpretation": {
        "sig": "638aaa86",
        "summary": "Fetches a single matter note by id. Passthrough read to `matter-service`.",
        "models": [
          {
            "model": "MatterNote",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterNote.lawyer.getMatterNoteContentYjs",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterNote.lawyer.getMatterNoteContentYjs",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "GetMatterNoteContentYjsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterNotes/procedures/lawyer/getMatterNoteContentYjs.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterNotes/procedures/lawyer/getMatterNoteContentYjs.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterNotes/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterNotes/router.ts#L14"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterNote.lawyer.getMatterNoteContentYjs",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterNote.lawyer.getMatterNoteContentYjs",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/lawyer/getMatterNoteContentYjs.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "68aa3ca1",
      "interpretation": {
        "sig": "68aa3ca1",
        "summary": "Fetches the Yjs collaborative-editing document for a matter note's rich content, so the lawyer's editor can load and sync the note's live document state. Passthrough read to `matter-service`.",
        "models": [
          {
            "model": "MatterNote",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterNote.lawyer.createMatterNote",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterNote.lawyer.createMatterNote",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterNoteInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterNotes/procedures/lawyer/createMatterNote.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterNotes/procedures/lawyer/createMatterNote.mutation.ts#L12"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterNotes/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterNotes/router.ts#L15"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterNote.lawyer.createMatterNote",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterNote.lawyer.createMatterNote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/lawyer/createMatterNote.mutation.ts#L13",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/note.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "c6c73cbd",
      "interpretation": {
        "sig": "c6c73cbd",
        "summary": "Lets a firm lawyer add a note to a matter. Delegates straight to `matter-service`, which creates the note and fires `note.created`.",
        "models": [
          {
            "model": "MatterNote",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterNote.lawyer.updateMatterNote",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterNote.lawyer.updateMatterNote",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "UpdateMatterNoteInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterNotes/procedures/lawyer/updateMatterNote.mutation.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterNotes/procedures/lawyer/updateMatterNote.mutation.ts#L13"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterNotes/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterNotes/router.ts#L16"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterNote.lawyer.updateMatterNote",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterNote.lawyer.updateMatterNote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/lawyer/updateMatterNote.mutation.ts#L12",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/note.updated"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "931afdc7",
      "interpretation": {
        "sig": "931afdc7",
        "summary": "Lets a firm lawyer edit an existing matter note's content. Delegates to `matter-service`, which fires `note.updated`.",
        "models": [
          {
            "model": "MatterNote",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterNote.lawyer.applyMatterNoteYjsUpdate",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterNote.lawyer.applyMatterNoteYjsUpdate",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "ApplyMatterNoteYjsUpdateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterNotes/procedures/lawyer/applyMatterNoteYjsUpdate.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterNotes/procedures/lawyer/applyMatterNoteYjsUpdate.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterNotes/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterNotes/router.ts#L17"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterNote.lawyer.applyMatterNoteYjsUpdate",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterNote.lawyer.applyMatterNoteYjsUpdate",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/lawyer/applyMatterNoteYjsUpdate.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "content-service/content.updatePersisted"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "551fe80d",
      "interpretation": {
        "sig": "551fe80d",
        "summary": "Applies a Yjs CRDT update to a matter note's rich-text content (used by the collaborative editor while typing). Delegates the write to `matter-service`, which fires `content.updatePersisted`.",
        "models": [
          {
            "model": "MatterNote",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterNote.lawyer.deleteMatterNote",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterNote.lawyer.deleteMatterNote",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "DeleteMatterNoteInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterNotes/procedures/lawyer/deleteMatterNote.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterNotes/procedures/lawyer/deleteMatterNote.mutation.ts#L12"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterNotes/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterNotes/router.ts#L18"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterNote.lawyer.deleteMatterNote",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterNote.lawyer.deleteMatterNote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/lawyer/deleteMatterNote.mutation.ts#L11",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "aca6c926",
      "interpretation": {
        "sig": "aca6c926",
        "summary": "Lets a firm lawyer delete a note from a matter. Delegates straight to `matter-service`; no Inngest event fires on delete.",
        "models": [
          {
            "model": "MatterNote",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterAccess.lawyer.listMatterAccess",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterAccess.lawyer.listMatterAccess",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterAccess/procedures/lawyer/listMatterAccess.query.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterAccess/procedures/lawyer/listMatterAccess.query.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterAccess/router.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterAccess/router.ts#L6"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterTeamAccess.lawyer.listMatterTeams",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterTeamAccess.lawyer.listMatterTeams",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTeamAccess/matter-team-access-controller.ts#L59",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "matterParticipant.internal.listMatterParticipants",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterParticipant.internal.listMatterParticipants",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/internal/listMatterParticipants.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "team.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/getTeam.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "25bcc90e",
      "interpretation": {
        "sig": "25bcc90e",
        "summary": "Lists everyone with access to a matter: the teams assigned to it and the firm-side people on it (with lead flagged first), each enriched with identity details from `identity-service`.",
        "models": [
          {
            "model": "MatterTeamAccess",
            "service": "matter-service"
          },
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterAccess.lawyer.setMatterAccess",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterAccess.lawyer.setMatterAccess",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "SetMatterAccessInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterAccess/procedures/lawyer/setMatterAccess.mutation.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterAccess/procedures/lawyer/setMatterAccess.mutation.ts#L21"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterAccess/router.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterAccess/router.ts#L7"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterTeamAccess.lawyer.listMatterTeams",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterTeamAccess.lawyer.listMatterTeams",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTeamAccess/matter-team-access-controller.ts#L59",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "matterParticipant.internal.listMatterParticipants",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterParticipant.internal.listMatterParticipants",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/internal/listMatterParticipants.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "team.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/getTeam.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "matterTeamAccess.lawyer.assignTeamToMatter",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterTeamAccess.lawyer.assignTeamToMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTeamAccess/matter-team-access-controller.ts#L34",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "matterTeamAccess.lawyer.removeTeamFromMatter",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterTeamAccess.lawyer.removeTeamFromMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTeamAccess/matter-team-access-controller.ts#L49",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "matterParticipant.lawyer.assignPersonToMatter",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterParticipant.lawyer.assignPersonToMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/lawyer/assignPersonToMatter.mutation.ts#L5",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "matterParticipant.lawyer.removePersonFromMatter",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterParticipant.lawyer.removePersonFromMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/lawyer/removePersonFromMatter.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c451d4f5",
      "interpretation": {
        "sig": "c451d4f5",
        "summary": "Reconciles a matter's full access list (teams and people) to a desired set in one call: diffs against current access, optionally checks a baseline for optimistic-concurrency conflicts, then adds/removes teams and people via `matter-service`, returning which changes succeeded and which failed per target.",
        "models": [
          {
            "model": "MatterTeamAccess",
            "service": "matter-service"
          },
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterTeamAccess.lawyer.assignTeamToMatter",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterTeamAccess.lawyer.assignTeamToMatter",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "AssignTeamToMatterInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterTeamAccess/procedures/lawyer/assignTeamToMatter.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTeamAccess/procedures/lawyer/assignTeamToMatter.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterTeamAccess/router.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTeamAccess/router.ts#L7"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterTeamAccess.lawyer.assignTeamToMatter",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterTeamAccess.lawyer.assignTeamToMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTeamAccess/matter-team-access-controller.ts#L34",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "ead3d762",
      "interpretation": {
        "sig": "ead3d762",
        "summary": "Grants a single team access to a matter, after checking the caller can manage the matter's access and can view the team. Delegates the write to `matter-service`. Not called directly from apps (only via `setMatterAccess`), but is called by other services.",
        "models": [
          {
            "model": "MatterTeamAccess",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterTeamAccess.lawyer.removeTeamFromMatter",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterTeamAccess.lawyer.removeTeamFromMatter",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "RemoveTeamFromMatterInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterTeamAccess/procedures/lawyer/removeTeamFromMatter.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTeamAccess/procedures/lawyer/removeTeamFromMatter.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterTeamAccess/router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTeamAccess/router.ts#L8"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterTeamAccess.lawyer.removeTeamFromMatter",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterTeamAccess.lawyer.removeTeamFromMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTeamAccess/matter-team-access-controller.ts#L49",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "88b533fe",
      "interpretation": {
        "sig": "88b533fe",
        "summary": "Revokes a team's access to a matter, after the same access-manage and team-view checks as `assignTeamToMatter`. Delegates the write to `matter-service`.",
        "models": [
          {
            "model": "MatterTeamAccess",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterTeamAccess.lawyer.listMatterTeams",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterTeamAccess.lawyer.listMatterTeams",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ListMatterTeamsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterTeamAccess/procedures/lawyer/listMatterTeams.query.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTeamAccess/procedures/lawyer/listMatterTeams.query.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterTeamAccess/router.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTeamAccess/router.ts#L9"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterTeamAccess.lawyer.listMatterTeams",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterTeamAccess.lawyer.listMatterTeams",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTeamAccess/matter-team-access-controller.ts#L59",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "team.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/getTeam.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "23dcc0cf",
      "interpretation": {
        "sig": "23dcc0cf",
        "summary": "Lists the teams assigned to a matter, enriched with each team's details from `identity-service` (fetched one team at a time; a TODO notes there's no batch endpoint yet).",
        "models": [
          {
            "model": "MatterTeamAccess",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterTemplate.lawyer.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterTemplate.lawyer.create",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "InputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterTemplate/procedures/lawyer/create.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTemplate/procedures/lawyer/create.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterTemplate/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTemplate/router.ts#L11"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterTemplate.create",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterTemplate.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTemplate/procedures/create.mutation.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "f918415",
      "interpretation": {
        "sig": "f918415",
        "summary": "Creates a new matter template for the firm. Requires the caller to manage the firm; delegates the write to `matter-service`.",
        "models": [
          {
            "model": "MatterTemplate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterTemplate.lawyer.update",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterTemplate.lawyer.update",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "InputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterTemplate/procedures/lawyer/update.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTemplate/procedures/lawyer/update.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterTemplate/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTemplate/router.ts#L12"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterTemplate.update",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterTemplate.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTemplate/procedures/update.mutation.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "838fa4bc",
      "interpretation": {
        "sig": "838fa4bc",
        "summary": "Edits an existing matter template. Requires the caller to manage the firm; delegates the write to `matter-service`.",
        "models": [
          {
            "model": "MatterTemplate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterTemplate.lawyer.publish",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterTemplate.lawyer.publish",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "InputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterTemplate/procedures/lawyer/publish.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTemplate/procedures/lawyer/publish.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterTemplate/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTemplate/router.ts#L13"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterTemplate.publish",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterTemplate.publish",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTemplate/procedures/publish.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c85c7d02",
      "interpretation": {
        "sig": "c85c7d02",
        "summary": "Publishes a matter template's draft version, making it the active version used when new matters are created from it. Delegates the write to `matter-service`.",
        "models": [
          {
            "model": "MatterTemplate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterTemplate.lawyer.archive",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterTemplate.lawyer.archive",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "InputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterTemplate/procedures/lawyer/archive.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTemplate/procedures/lawyer/archive.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterTemplate/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTemplate/router.ts#L14"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterTemplate.archive",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterTemplate.archive",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTemplate/procedures/archive.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "5607c9d",
      "interpretation": {
        "sig": "5607c9d",
        "summary": "Archives a matter template so it stops appearing as an option for new matters. Delegates the write to `matter-service`.",
        "models": [
          {
            "model": "MatterTemplate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterTemplate.lawyer.restore",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterTemplate.lawyer.restore",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "InputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterTemplate/procedures/lawyer/restore.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTemplate/procedures/lawyer/restore.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterTemplate/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTemplate/router.ts#L15"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterTemplate.restore",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterTemplate.restore",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTemplate/procedures/restore.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "b109bcc5",
      "interpretation": {
        "sig": "b109bcc5",
        "summary": "Restores a previously archived matter template, making it available again. Delegates the write to `matter-service`.",
        "models": [
          {
            "model": "MatterTemplate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterTemplate.lawyer.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterTemplate.lawyer.list",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterTemplate/procedures/lawyer/list.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTemplate/procedures/lawyer/list.query.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterTemplate/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTemplate/router.ts#L16"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterTemplate.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterTemplate.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTemplate/procedures/list.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "e213e01e",
      "interpretation": {
        "sig": "e213e01e",
        "summary": "Lists a firm's matter templates.",
        "models": [
          {
            "model": "MatterTemplate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterTemplate.lawyer.get",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterTemplate.lawyer.get",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "InputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterTemplate/procedures/lawyer/get.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTemplate/procedures/lawyer/get.query.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterTemplate/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTemplate/router.ts#L17"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterTemplate.get",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterTemplate.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTemplate/procedures/get.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "field.definitions.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:field.definitions.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/list-definitions.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "f3c1bfc2",
      "interpretation": {
        "sig": "f3c1bfc2",
        "summary": "Fetches one matter template with its published and current draft versions, resolving each version's custom-field configuration against the firm's field definitions in `identity-service` (including archived ones).",
        "models": [
          {
            "model": "MatterTemplate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterTransaction.lawyer.listMatterTransactions",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterTransaction.lawyer.listMatterTransactions",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterTransactions/procedures/lawyer/listMatterTransactions.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTransactions/procedures/lawyer/listMatterTransactions.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterTransactions/router.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTransactions/router.ts#L9"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterTransaction.listMatterTransactions",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterTransaction.listMatterTransactions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTransactions/procedures/listMatterTransactions.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "42635407",
      "interpretation": {
        "sig": "42635407",
        "summary": "Lets a firm lawyer list all ledger transactions on a matter, straight from `matter-service` with no local logic. Nothing in the app or other services calls this path today.",
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterTransaction.lawyer.listBillsAndRefunds",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.matterTransaction.lawyer.listBillsAndRefunds",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterTransactions/procedures/lawyer/listBillsAndRefunds.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTransactions/procedures/lawyer/listBillsAndRefunds.query.ts#L4"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterTransactions/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTransactions/router.ts#L10"
      },
      "hops": {
        "direct": 3,
        "services": [
          "matter-service",
          "transaction-service",
          "work-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterTransaction.listMatterTransactions",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterTransaction.listMatterTransactions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTransactions/procedures/listMatterTransactions.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "transaction-service",
            "path": "listTransactions",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:listTransactions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/listTransactions.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "work-service",
            "path": "bill.listBills",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:bill.listBills",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/bill/procedures/listBills.query.ts#L6",
            "domain": "deal"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "f310720c",
      "interpretation": {
        "sig": "f310720c",
        "summary": "Builds the lawyer-facing bills-and-refunds list for a matter: pulls matter transactions, filters `transaction-service` records down to `BILL` and `REFUND` types, and stitches in each bill's line items and Stripe checkout URL (for `PENDING` bills) or refund reason. Throws if a `transaction-service` `BILL` has no matching bill record in `work-service`.",
        "models": [
          {
            "model": "MatterTransaction",
            "service": "matter-service"
          },
          {
            "model": "Transaction",
            "service": "transaction-service"
          },
          {
            "model": "Bill",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.pinnable.lawyer.pin",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.pinnable.lawyer.pin",
      "module": "matter",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "PinnableEntityInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/pinnable/router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/pinnable/router.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/pinnable/router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/pinnable/router.ts#L8"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "pinnable.lawyer.pin",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:pinnable.lawyer.pin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/pinnable/pinnable-router.ts#L8",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "5e8b748f",
      "interpretation": {
        "sig": "5e8b748f",
        "summary": "Pins an entity (e.g. a document or task) to a matter for a lawyer, delegating the write to `matter-service`."
      }
    },
    {
      "id": "platform-api:matter.pinnable.lawyer.unpin",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.pinnable.lawyer.unpin",
      "module": "matter",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "PinnableEntityInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/pinnable/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/pinnable/router.ts#L14"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/pinnable/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/pinnable/router.ts#L14"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "pinnable.lawyer.unpin",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:pinnable.lawyer.unpin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/pinnable/pinnable-router.ts#L17",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "733eb26b",
      "interpretation": {
        "sig": "733eb26b",
        "summary": "Removes a lawyer's pin from an entity on a matter, delegating the write to `matter-service`."
      }
    },
    {
      "id": "platform-api:matter.pinnable.lawyer.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.pinnable.lawyer.list",
      "module": "matter",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/pinnable/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/pinnable/router.ts#L20"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/pinnable/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/pinnable/router.ts#L20"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "pinnable.lawyer.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:pinnable.lawyer.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/pinnable/pinnable-router.ts#L21",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f657d0fd",
      "interpretation": {
        "sig": "f657d0fd",
        "summary": "Lists the entities a lawyer has pinned on a given matter, read straight through from `matter-service`."
      }
    },
    {
      "id": "platform-api:matter.task.tasks.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.task.tasks.list",
      "module": "matter",
      "roleFolder": "tasks",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/task/procedures/tasks/listTasks.query.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/procedures/tasks/listTasks.query.ts#L15"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/task/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/router.ts#L20"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "task.tasks.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:task.tasks.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/listTasks.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "identity.getPeople",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.getPeople",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentities.query.ts#L8",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a50dc6d1",
      "interpretation": {
        "sig": "a50dc6d1",
        "summary": "Lists tasks (optionally scoped to one matter) for the firm and enriches each assigned task with the assignee's name and photo from `identity-service`. If identity lookup fails, tasks still come back, just without assignee names.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.task.tasks.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.task.tasks.create",
      "module": "matter",
      "roleFolder": "tasks",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/task/procedures/tasks/createTask.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/procedures/tasks/createTask.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/task/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/router.ts#L21"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "task.tasks.create",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:task.tasks.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/createTask.mutation.ts#L19",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "98deda6a",
      "interpretation": {
        "sig": "98deda6a",
        "summary": "Creates a new task for the firm, optionally attached to a matter and a key date, with a due date and an assigned identity, delegating the write to `matter-service`.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.task.tasks.rename",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.task.tasks.rename",
      "module": "matter",
      "roleFolder": "tasks",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/task/procedures/tasks/renameTask.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/procedures/tasks/renameTask.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/task/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/router.ts#L22"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "task.tasks.rename",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:task.tasks.rename",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/renameTask.mutation.ts#L12",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "51408938",
      "interpretation": {
        "sig": "51408938",
        "summary": "Renames an existing task, delegating the write to `matter-service`.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.task.tasks.delete",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.task.tasks.delete",
      "module": "matter",
      "roleFolder": "tasks",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/task/procedures/tasks/deleteTask.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/procedures/tasks/deleteTask.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/task/router.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/router.ts#L23"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "task.tasks.delete",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:task.tasks.delete",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/deleteTask.mutation.ts#L11",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b38c44e3",
      "interpretation": {
        "sig": "b38c44e3",
        "summary": "Deletes a task by id, delegating the write to `matter-service`.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.task.tasks.restore",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.task.tasks.restore",
      "module": "matter",
      "roleFolder": "tasks",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/task/procedures/tasks/restoreTask.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/procedures/tasks/restoreTask.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/task/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/router.ts#L24"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "task.tasks.restore",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:task.tasks.restore",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/restoreTask.mutation.ts#L13",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "dfb32600",
      "interpretation": {
        "sig": "dfb32600",
        "summary": "Restores a previously deleted task, delegating the write to `matter-service`.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.task.tasks.schedule",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.task.tasks.schedule",
      "module": "matter",
      "roleFolder": "tasks",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/task/procedures/tasks/scheduleTask.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/procedures/tasks/scheduleTask.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/task/router.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/router.ts#L25"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "task.tasks.schedule",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:task.tasks.schedule",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/scheduleTask.mutation.ts#L12",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "8c54af15",
      "interpretation": {
        "sig": "8c54af15",
        "summary": "Sets or changes a task's due date, delegating the write to `matter-service`.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.task.tasks.updateCompletedAt",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.task.tasks.updateCompletedAt",
      "module": "matter",
      "roleFolder": "tasks",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "UpdateTaskCompletedAtInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/task/procedures/tasks/updateTaskCompletedAt.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/procedures/tasks/updateTaskCompletedAt.mutation.ts#L14"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/task/router.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/router.ts#L26"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "task.tasks.updateCompletedAt",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:task.tasks.updateCompletedAt",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/updateTaskCompletedAt.mutation.ts#L10",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2f31f65f",
      "interpretation": {
        "sig": "2f31f65f",
        "summary": "Marks a single task complete (or clears completion by passing null), delegating the write to `matter-service`.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.task.tasks.batchUpdateCompletedAt",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.task.tasks.batchUpdateCompletedAt",
      "module": "matter",
      "roleFolder": "tasks",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "BatchUpdateTasksCompletedAtInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/task/procedures/tasks/batchUpdateTasksCompletedAt.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/procedures/tasks/batchUpdateTasksCompletedAt.mutation.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/task/router.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/router.ts#L27"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "task.tasks.batchUpdateCompletedAt",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:task.tasks.batchUpdateCompletedAt",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/batchUpdateTasksCompletedAt.mutation.ts#L10",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "957075bc",
      "interpretation": {
        "sig": "957075bc",
        "summary": "Marks a batch of tasks complete or clears their completion in one call, delegating the write to `matter-service`.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.task.tasks.assign",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.task.tasks.assign",
      "module": "matter",
      "roleFolder": "tasks",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "AssignTaskInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/task/procedures/tasks/assignTask.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/procedures/tasks/assignTask.mutation.ts#L12"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/task/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/router.ts#L28"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "task.tasks.assign",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:task.tasks.assign",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/assignTask.mutation.ts#L12",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "69a984a5",
      "interpretation": {
        "sig": "69a984a5",
        "summary": "Assigns a task to an identity, or unassigns it by passing null, delegating the write to `matter-service`.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.task.tasks.updateMatter",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.task.tasks.updateMatter",
      "module": "matter",
      "roleFolder": "tasks",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "UpdateTaskMatterInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/task/procedures/tasks/updateTaskMatter.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/procedures/tasks/updateTaskMatter.mutation.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/task/router.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/router.ts#L29"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "task.tasks.updateMatter",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:task.tasks.updateMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/updateTaskMatter.mutation.ts#L10",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "27bd0496",
      "interpretation": {
        "sig": "27bd0496",
        "summary": "Moves a task to a different matter, or detaches it from any matter by passing null, delegating the write to `matter-service`.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.task.tasks.updateKeyDate",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.task.tasks.updateKeyDate",
      "module": "matter",
      "roleFolder": "tasks",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/task/procedures/tasks/updateTaskKeyDate.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/procedures/tasks/updateTaskKeyDate.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/task/router.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/router.ts#L30"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "task.tasks.updateKeyDate",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:task.tasks.updateKeyDate",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/tasks/updateTaskKeyDate.mutation.ts#L14",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e7235858",
      "interpretation": {
        "sig": "e7235858",
        "summary": "Links a task to a key date, or unlinks it by passing null, delegating the write to `matter-service`.",
        "models": [
          {
            "model": "Task",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.task.keyDates.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.task.keyDates.list",
      "module": "matter",
      "roleFolder": "key-dates",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/task/procedures/key-dates/listKeyDates.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/procedures/key-dates/listKeyDates.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/task/router.ts",
        "line": 33,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/router.ts#L33"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "task.keyDates.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:task.keyDates.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/key-dates/listKeyDates.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "56bfc1b9",
      "interpretation": {
        "sig": "56bfc1b9",
        "summary": "Lists key dates for a matter (or across matters, filtered by due-date range), passing the request straight through to `matter-service`.",
        "models": [
          {
            "model": "KeyDate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.task.keyDates.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.task.keyDates.create",
      "module": "matter",
      "roleFolder": "key-dates",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/task/procedures/key-dates/createKeyDate.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/procedures/key-dates/createKeyDate.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/task/router.ts",
        "line": 34,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/router.ts#L34"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "task.keyDates.create",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:task.keyDates.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/key-dates/createKeyDate.mutation.ts#L14",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "472547b5",
      "interpretation": {
        "sig": "472547b5",
        "summary": "Adds a new key date (name and due date) to a matter, delegating the write to `matter-service`.",
        "models": [
          {
            "model": "KeyDate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.task.keyDates.rename",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.task.keyDates.rename",
      "module": "matter",
      "roleFolder": "key-dates",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/task/procedures/key-dates/renameKeyDate.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/procedures/key-dates/renameKeyDate.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/task/router.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/router.ts#L35"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "task.keyDates.rename",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:task.keyDates.rename",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/key-dates/renameKeyDate.mutation.ts#L14",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6d7e4cff",
      "interpretation": {
        "sig": "6d7e4cff",
        "summary": "Renames an existing key date by id, delegating the write to `matter-service`.",
        "models": [
          {
            "model": "KeyDate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.task.keyDates.schedule",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.task.keyDates.schedule",
      "module": "matter",
      "roleFolder": "key-dates",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/task/procedures/key-dates/scheduleKeyDate.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/procedures/key-dates/scheduleKeyDate.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/task/router.ts",
        "line": 36,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/router.ts#L36"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "task.keyDates.schedule",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:task.keyDates.schedule",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/key-dates/scheduleKeyDate.mutation.ts#L14",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1522ef2e",
      "interpretation": {
        "sig": "1522ef2e",
        "summary": "Changes the due date of an existing key date, delegating the write to `matter-service`.",
        "models": [
          {
            "model": "KeyDate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.task.keyDates.delete",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.task.keyDates.delete",
      "module": "matter",
      "roleFolder": "key-dates",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/task/procedures/key-dates/deleteKeyDate.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/procedures/key-dates/deleteKeyDate.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/task/router.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/task/router.ts#L37"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "task.keyDates.delete",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:task.keyDates.delete",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/task/procedures/key-dates/deleteKeyDate.mutation.ts#L14",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "18bf8e50",
      "interpretation": {
        "sig": "18bf8e50",
        "summary": "Deletes a key date, optionally also deleting the tasks linked to it, delegating the write to `matter-service`.",
        "models": [
          {
            "model": "KeyDate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.permissions",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.permissions",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/lawyer/getMatterPermissions.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/lawyer/getMatterPermissions.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 78,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L78"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "permissions",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:permissions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/permissions/getMatterPermissions.query.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c6198835",
      "interpretation": {
        "sig": "c6198835",
        "summary": "Returns what the calling lawyer is allowed to do on a matter, checked from the FIRM side.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.client.mapParticipants",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.client.mapParticipants",
      "module": "matter",
      "roleFolder": "client",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "clientProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/client/mapParticipants.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/client/mapParticipants.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 81,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L81"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "client.mapParticipants",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:client.mapParticipants",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/mapParticipants.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "4a6a35",
      "interpretation": {
        "sig": "4a6a35",
        "summary": "Maps a matter's participants for a client caller, used to resolve who's on a matter from the client side.",
        "flags": [
          "not called by any app; used only service-to-service"
        ],
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.lawyer.countMatters",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.lawyer.countMatters",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "MatterCountScopeExternalInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/lawyer/countLawyerMatters.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/lawyer/countLawyerMatters.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 85,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L85"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.countMatters",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.countMatters",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/countLawyerMatters.query.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d89e4873",
      "interpretation": {
        "sig": "d89e4873",
        "summary": "Returns a count of matters for the firm, scoped by the input's matter-count filters (e.g. by lawyer, status).",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.lawyer.createMatter",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.lawyer.createMatter",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/lawyer/createMatter.mutation.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/lawyer/createMatter.mutation.ts#L20"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 86,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L86"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "field.applications.preValidate",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:field.applications.preValidate",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/pre-validate.mutation.ts#L5",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "lawyer.createMatter",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:lawyer.createMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/createMatter.mutation.ts#L6",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "matterNote.lawyer.createMatterNote",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterNote.lawyer.createMatterNote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/lawyer/createMatterNote.mutation.ts#L13",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "field.applications.bulkApply",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:field.applications.bulkApply",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/bulk-apply.mutation.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [
        "matter-service/matter.created",
        "matter-service/note.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2dc3020b",
      "interpretation": {
        "sig": "2dc3020b",
        "summary": "Creates a new matter for the firm in `OPENING` status, assigns the lead lawyer, and applies any custom field values and an initial note. Validates the firm and lead lawyer exist first, and pre-validates custom fields so a bad field value doesn't leave an orphan matter; if the follow-up note or field-apply step fails after the matter is created, it throws but the matter itself stays created.",
        "flags": [
          "partial-failure: note/field writes can fail after the matter is already committed"
        ],
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "MatterNote",
            "service": "matter-service"
          },
          {
            "model": "Firm",
            "service": "identity-service"
          },
          {
            "model": "FieldApplication",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.lawyer.getMatter",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.lawyer.getMatter",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/lawyer/getMatter.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/lawyer/getMatter.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 87,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L87"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/getMatter.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3196ad7f",
      "interpretation": {
        "sig": "3196ad7f",
        "summary": "Fetches a single matter by id for the lawyer.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.lawyer.getReassignmentHistory",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.lawyer.getReassignmentHistory",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/lawyer/getReassignmentHistory.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/lawyer/getReassignmentHistory.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 88,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L88"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.getReassignmentHistory",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.getReassignmentHistory",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reassignment/procedures/getReassignmentHistory.query.ts#L4",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4a6c35de",
      "interpretation": {
        "sig": "4a6c35de",
        "summary": "Returns the history of lawyer reassignments on a matter.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.lawyer.listMatters",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.lawyer.listMatters",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ListLawyerMattersInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/lawyer/listLawyerMatters.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/lawyer/listLawyerMatters.query.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 89,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L89"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.listMatters",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.listMatters",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/listLawyerMatters.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "firm.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/listFirms.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1a9bee9c",
      "interpretation": {
        "sig": "1a9bee9c",
        "summary": "Lists matters for the firm (or just the viewer's own, depending on scope and permission), then enriches each result with the owning firm's name looked up from `identity-service`. If the firm lookup fails, matters are still returned, just without firm names.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "Firm",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.lawyer.listMatterClients",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.lawyer.listMatterClients",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/lawyer/listLawyerMatterClients.query.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/lawyer/listLawyerMatterClients.query.ts#L11"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 90,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L90"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.listMatters",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.listMatters",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/listLawyerMatters.query.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "13add112",
      "interpretation": {
        "sig": "13add112",
        "summary": "Builds a deduped list of client contacts (name and email) across all of the lawyer's matters, for recipient suggestions in the inbox composer. Pulls the raw matter list from `matter-service` and reduces it client-contact-side, excluding the caller themselves.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.lawyer.overview",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.lawyer.overview",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/matter/overview/procedures/lawyer/get-matter-overview.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/overview/procedures/lawyer/get-matter-overview.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 91,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L91"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "8ae20d12",
      "interpretation": {
        "sig": "8ae20d12",
        "summary": "Returns the overview data shown on a matter's summary page, built by `MatterOverviewService` rather than proxied to `matter-service` directly.",
        "flags": [
          "domain unclassified in facts"
        ]
      }
    },
    {
      "id": "platform-api:matter.lawyer.updateMatterStatus",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.lawyer.updateMatterStatus",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "UpdateMatterStatusSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/lawyer/updateMatterStatus.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/lawyer/updateMatterStatus.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 92,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L92"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.updateMatterStatus",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:lawyer.updateMatterStatus",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/updateMatterStatus.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a668b37d",
      "interpretation": {
        "sig": "a668b37d",
        "summary": "Changes a matter's status, after checking the caller has manage permission on that specific matter.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.lawyer.updateMatterTitle",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.lawyer.updateMatterTitle",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/lawyer/updateMatterTitle.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/lawyer/updateMatterTitle.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 93,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L93"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.updateMatterTitle",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:lawyer.updateMatterTitle",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/updateMatterTitle.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "33d0fa0b",
      "interpretation": {
        "sig": "33d0fa0b",
        "summary": "Renames a matter's title.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.lawyer.applyMatterTemplate",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.lawyer.applyMatterTemplate",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "InputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/lawyer/applyMatterTemplate.mutation.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/lawyer/applyMatterTemplate.mutation.ts#L16"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 94,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L94"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterTemplate.get",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterTemplate.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTemplate/procedures/get.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "lawyer.applyMatterTemplate",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:lawyer.applyMatterTemplate",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/applyMatterTemplate.mutation.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "field.applications.listForEntity",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:field.applications.listForEntity",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/list-entity-fields.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "field.definitions.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:field.definitions.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/list-definitions.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "field.applications.bulkApply",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:field.applications.bulkApply",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/bulk-apply.mutation.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e5aaf978",
      "interpretation": {
        "sig": "e5aaf978",
        "summary": "Lets a firm lawyer apply an `ACTIVE` matter template to a matter: it links the template's published version to the matter, then applies any custom field definitions from the template that aren't already on the matter (skipping ones already applied).",
        "models": [
          {
            "model": "MatterTemplate",
            "service": "matter-service"
          },
          {
            "model": "FieldDefinition",
            "service": "identity-service"
          }
        ],
        "flags": [
          "partial-failure risk: template apply succeeds even if bulk field apply throws"
        ]
      }
    },
    {
      "id": "platform-api:matter.lawyer.removeAppliedMatterTemplate",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.lawyer.removeAppliedMatterTemplate",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "InputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/lawyer/removeAppliedMatterTemplate.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/lawyer/removeAppliedMatterTemplate.mutation.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 95,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L95"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.removeAppliedMatterTemplate",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:lawyer.removeAppliedMatterTemplate",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/removeAppliedMatterTemplate.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7f1d3e33",
      "interpretation": {
        "sig": "7f1d3e33",
        "summary": "Lets a firm lawyer detach a previously applied matter template from a matter.",
        "models": [
          {
            "model": "MatterTemplate",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.lawyer.canCloseMatter",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.lawyer.canCloseMatter",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/lawyer/canCloseMatter.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/lawyer/canCloseMatter.query.ts#L4"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 96,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L96"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "work-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "feeAgreement.listMatterFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listMatterFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterFeeAgreements.query.ts#L6",
            "domain": "deal"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "b780b7d7",
      "interpretation": {
        "sig": "b780b7d7",
        "summary": "Checks whether a matter is eligible to close: returns `canClose` false with a reason if the matter isn't `ACTIVE`, or if any of its fee agreements aren't `COMPLETED` or `CANCELLED` yet.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.lawyer.closeMatter",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.lawyer.closeMatter",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/lawyer/closeMatter.mutation.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/lawyer/closeMatter.mutation.ts#L4"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 97,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L97"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "work-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "feeAgreement.listMatterFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listMatterFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterFeeAgreements.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "matter-service",
            "path": "internal.closeMatter",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:internal.closeMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/closeMatter.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "95f3ca17",
      "interpretation": {
        "sig": "95f3ca17",
        "summary": "Closes a matter for a firm lawyer, but only after re-running the same eligibility check as `canCloseMatter` (`ACTIVE` status, all fee agreements `COMPLETED` or `CANCELLED`); rejects with `BAD_REQUEST` otherwise.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.lawyer.finalizeArtifactFile",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.lawyer.finalizeArtifactFile",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/finalizeArtifactFile.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/finalizeArtifactFile.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 98,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L98"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.finalizeArtifactFile",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.finalizeArtifactFile",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/finalizeArtifactFile.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/file.uploaded"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "87f2bedb",
      "interpretation": {
        "sig": "87f2bedb",
        "summary": "Finalizes a generated matter artifact (e.g. a drafted PDF or DOCX) into a real matter file, setting its display name, uploader, visibility (`ALL` or `FIRM_SIDE_ONLY`) and optional folder.",
        "flags": [
          "listed Inngest trigger matter-service/file.uploaded is the effect of this write, not something this procedure listens for"
        ]
      }
    },
    {
      "id": "platform-api:matter.lawyer.unfinalizeArtifactFile",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matter.lawyer.unfinalizeArtifactFile",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/unfinalizeArtifactFile.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/unfinalizeArtifactFile.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 99,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L99"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.unfinalizeArtifactFile",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.unfinalizeArtifactFile",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/unfinalizeArtifactFile.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "a73eb1de",
      "interpretation": {
        "sig": "a73eb1de",
        "summary": "Reverts a finalized matter artifact back to draft state, undoing `finalizeArtifactFile`."
      }
    },
    {
      "id": "platform-api:identity.conflictCheck.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.conflictCheck.create",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CreateConflictCheckLawyerInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/conflict-check/procedures/lawyer/create.mutation.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/conflict-check/procedures/lawyer/create.mutation.ts#L11"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/conflict-check/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/conflict-check/router.ts#L12"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "conflictCheck.create",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:conflictCheck.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/procedures/create.mutation.ts#L8",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "matterContact.listCoCounselFirmIds",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterContact.listCoCounselFirmIds",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/list-co-counsel-firm-ids.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "contact.listForConflictCheck",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.listForConflictCheck",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list-for-conflict-check.query.ts#L19",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "matterContact.listForConflictCheck",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterContact.listForConflictCheck",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/list-for-conflict-check.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "conflictCheck.saveSearch",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:conflictCheck.saveSearch",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/procedures/save-search.mutation.ts#L9",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "95491374",
      "interpretation": {
        "sig": "95491374",
        "summary": "Creates a new conflict check for the firm and immediately runs the initial search over the supplied terms, matching against contacts in the firm and any co-counsel firms and saving the results.",
        "models": [
          {
            "model": "ConflictCheck",
            "service": "identity-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "platform-api:identity.conflictCheck.runSearch",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.conflictCheck.runSearch",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "RunSearchInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/conflict-check/procedures/lawyer/run-search.mutation.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/conflict-check/procedures/lawyer/run-search.mutation.ts#L11"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/conflict-check/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/conflict-check/router.ts#L13"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterContact.listCoCounselFirmIds",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterContact.listCoCounselFirmIds",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/list-co-counsel-firm-ids.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "contact.listForConflictCheck",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.listForConflictCheck",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list-for-conflict-check.query.ts#L19",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "matterContact.listForConflictCheck",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterContact.listForConflictCheck",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/list-for-conflict-check.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "conflictCheck.saveSearch",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:conflictCheck.saveSearch",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/procedures/save-search.mutation.ts#L9",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "f120d925",
      "interpretation": {
        "sig": "f120d925",
        "summary": "Re-runs a conflict check search against an existing conflict check with a new set of terms, matching contacts across the firm and co-counsel firms against their matters, and overwrites the saved search results.",
        "models": [
          {
            "model": "ConflictCheck",
            "service": "identity-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "platform-api:identity.conflictCheck.update",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.conflictCheck.update",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/conflict-check/procedures/lawyer/update.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/conflict-check/procedures/lawyer/update.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/conflict-check/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/conflict-check/router.ts#L14"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "conflictCheck.update",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:conflictCheck.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/procedures/update.mutation.ts#L10",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "71fbd83b",
      "interpretation": {
        "sig": "71fbd83b",
        "summary": "Updates fields on an existing conflict check record (scoped to the caller's firm).",
        "models": [
          {
            "model": "ConflictCheck",
            "service": "identity-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "platform-api:identity.conflictCheck.complete",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.conflictCheck.complete",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CompleteConflictCheckLawyerInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/conflict-check/procedures/lawyer/complete.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/conflict-check/procedures/lawyer/complete.mutation.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/conflict-check/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/conflict-check/router.ts#L15"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "conflictCheck.complete",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:conflictCheck.complete",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/procedures/complete.mutation.ts#L10",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "64080451",
      "interpretation": {
        "sig": "64080451",
        "summary": "Marks a conflict check as complete, recording which lawyer completed it.",
        "models": [
          {
            "model": "ConflictCheck",
            "service": "identity-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "platform-api:identity.conflictCheck.delete",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.conflictCheck.delete",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "DeleteConflictCheckLawyerInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/conflict-check/procedures/lawyer/delete.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/conflict-check/procedures/lawyer/delete.mutation.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/conflict-check/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/conflict-check/router.ts#L16"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "conflictCheck.delete",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:conflictCheck.delete",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/procedures/delete.mutation.ts#L9",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "9f89c33d",
      "interpretation": {
        "sig": "9f89c33d",
        "summary": "Deletes a conflict check record for the firm, recording who deleted it. No caller in the codebase currently calls this route.",
        "models": [
          {
            "model": "ConflictCheck",
            "service": "identity-service"
          }
        ],
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "platform-api:identity.conflictCheck.get",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.conflictCheck.get",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/identity/conflict-check/procedures/lawyer/get.query.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/conflict-check/procedures/lawyer/get.query.ts#L11"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/conflict-check/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/conflict-check/router.ts#L17"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "conflictCheck.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:conflictCheck.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/procedures/get.query.ts#L9",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "internal.listMatters",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.listMatters",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/listMatters.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "identity.getPeople",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.getPeople",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentities.query.ts#L8",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "matterContact.listCoCounselFirmIds",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterContact.listCoCounselFirmIds",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/list-co-counsel-firm-ids.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "contact.listByIds",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.listByIds",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list-by-ids.query.ts#L17",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "9dea05c",
      "interpretation": {
        "sig": "9dea05c",
        "summary": "Loads a single conflict check and its saved search results, then enriches each result with matter details (status, title, human-readable ID) and the lead lawyer's name, dropping any row whose matter or lead lawyer can no longer be found.",
        "models": [
          {
            "model": "ConflictCheck",
            "service": "identity-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "platform-api:identity.conflictCheck.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.conflictCheck.list",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/identity/conflict-check/procedures/lawyer/list.query.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/conflict-check/procedures/lawyer/list.query.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/conflict-check/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/conflict-check/router.ts#L18"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "conflictCheck.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:conflictCheck.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/procedures/list.query.ts#L43",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "internal.listMatters",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.listMatters",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/listMatters.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "160748e3",
      "interpretation": {
        "sig": "160748e3",
        "summary": "Lists conflict checks for the firm and enriches each attached matter reference with the full matter record.",
        "models": [
          {
            "model": "ConflictCheck",
            "service": "identity-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "platform-api:identity.conflictCheck.attach",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.conflictCheck.attach",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ConflictCheckMatterInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/conflict-check/procedures/lawyer/attach.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/conflict-check/procedures/lawyer/attach.mutation.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/conflict-check/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/conflict-check/router.ts#L19"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "conflictCheck.attach",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:conflictCheck.attach",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/procedures/attach.mutation.ts#L10",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "cc843b43",
      "interpretation": {
        "sig": "cc843b43",
        "summary": "Links a conflict check to a specific matter, after checking the caller can manage that matter.",
        "models": [
          {
            "model": "ConflictCheck",
            "service": "identity-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "platform-api:identity.conflictCheck.detach",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.conflictCheck.detach",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ConflictCheckMatterInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/conflict-check/procedures/lawyer/detach.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/conflict-check/procedures/lawyer/detach.mutation.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/conflict-check/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/conflict-check/router.ts#L20"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "conflictCheck.detach",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:conflictCheck.detach",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/conflict-check/procedures/detach.mutation.ts#L10",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ca50c871",
      "interpretation": {
        "sig": "ca50c871",
        "summary": "Unlinks a conflict check from a matter, after checking the caller can manage that matter.",
        "models": [
          {
            "model": "ConflictCheck",
            "service": "identity-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "platform-api:identity.firmLetterhead.get",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.firmLetterhead.get",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firmLetterhead/procedures/getFirmLetterhead.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmLetterhead/procedures/getFirmLetterhead.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/firmLetterhead/router.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmLetterhead/router.ts#L6"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmLetterhead.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmLetterhead.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmLetterhead/procedures/getFirmLetterhead.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "8513eec1",
      "interpretation": {
        "sig": "8513eec1",
        "summary": "Fetches the firm's letterhead configuration (used for generating documents on firm branding) for a given firm ID. Pure passthrough to `identity-service` with no extra logic.",
        "models": [
          {
            "model": "FirmLetterhead",
            "service": "identity-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "platform-api:identity.contact.lawyer.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.contact.lawyer.create",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CreateContactInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/identity/contact/procedures/lawyer/create.mutation.ts",
        "line": 59,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/procedures/lawyer/create.mutation.ts#L59"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/contact/router.ts",
        "line": 33,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/router.ts#L33"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "contact.listByIds",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.listByIds",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list-by-ids.query.ts#L17",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "matterContactSlot.get",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterContactSlot.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContactSlot/procedures/get.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "contact.create",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:contact.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/create.mutation.ts#L22",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "contact.relations.create",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:contact.relations.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/create-relation.mutation.ts#L63",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "matterContactSlot.fill",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterContactSlot.fill",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContactSlot/procedures/fill.mutation.ts#L5",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "matterContact.create",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterContact.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/create.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "45d14484",
      "interpretation": {
        "sig": "45d14484",
        "summary": "Creates a new contact (person or company) for the firm, and optionally links it to an existing company as a related contact, and/or attaches it to a matter by filling a specific contact slot or by adding it directly as a matter contact with a role. Checks the parent contact belongs to the firm and, if filling a slot, that the slot is still open on the given matter.",
        "models": [
          {
            "model": "Contact",
            "service": "identity-service"
          },
          {
            "model": "MatterContact",
            "service": "matter-service"
          },
          {
            "model": "MatterContactSlot",
            "service": "matter-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "platform-api:identity.contact.lawyer.update",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.contact.lawyer.update",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "UpdateContactLawyerInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/identity/contact/procedures/lawyer/update.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/procedures/lawyer/update.mutation.ts#L14"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/contact/router.ts",
        "line": 34,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/router.ts#L34"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "contact.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/get.query.ts#L20",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "contact.update",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:contact.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/update.mutation.ts#L26",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "64e3a2ae",
      "interpretation": {
        "sig": "64e3a2ae",
        "summary": "Updates an existing contact's details, after confirming the contact belongs to the caller's firm (returns `NOT_FOUND` otherwise).",
        "models": [
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "platform-api:identity.contact.lawyer.get",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.contact.lawyer.get",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "GetContactInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/identity/contact/procedures/lawyer/get.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/procedures/lawyer/get.query.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/contact/router.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/router.ts#L35"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "contact.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/get.query.ts#L20",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "8ee71676",
      "interpretation": {
        "sig": "8ee71676",
        "summary": "Fetches a single contact by ID, returning `NOT_FOUND` if the contact does not belong to the caller's firm.",
        "models": [
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "platform-api:identity.contact.lawyer.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.contact.lawyer.list",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ListContactsForFirmInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/identity/contact/procedures/lawyer/list.query.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/procedures/lawyer/list.query.ts#L27"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/contact/router.ts",
        "line": 36,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/router.ts#L36"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "contact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list.query.ts#L31",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "38a12c82",
      "interpretation": {
        "sig": "38a12c82",
        "summary": "Lists contacts for the caller's firm with filters for parent company, search term, active/deleted state, contact type, pagination and sort order.",
        "models": [
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "platform-api:identity.field.definitions.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.field.definitions.create",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CreateFieldDefinitionRequestSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/field/procedures/lawyer/definitions/create.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/procedures/lawyer/definitions/create.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/field/router.ts",
        "line": 52,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/router.ts#L52"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "field.definitions.create",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:field.definitions.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/create-definition.mutation.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7fde6128",
      "interpretation": {
        "sig": "7fde6128",
        "summary": "Creates a new custom field definition for the firm (a firm-level admin needs `can_manage_firm` permission), used to build custom data fields for the firm's records.",
        "models": [
          {
            "model": "FieldDefinition",
            "service": "identity-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "platform-api:identity.field.definitions.update",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.field.definitions.update",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "InputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/field/procedures/lawyer/definitions/update.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/procedures/lawyer/definitions/update.mutation.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/field/router.ts",
        "line": 53,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/router.ts#L53"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "field.definitions.update",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:field.definitions.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/update-definition.mutation.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "af9f82d7",
      "interpretation": {
        "sig": "af9f82d7",
        "summary": "Updates an existing custom field definition, scoped to the caller's own firm so a lawyer cannot edit another firm's definitions.",
        "models": [
          {
            "model": "FieldDefinition",
            "service": "identity-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "platform-api:identity.field.definitions.archive",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.field.definitions.archive",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "InputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/field/procedures/lawyer/definitions/archive.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/procedures/lawyer/definitions/archive.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/field/router.ts",
        "line": 54,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/router.ts#L54"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "field.definitions.archive",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:field.definitions.archive",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/archive-definition.mutation.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e4aef744",
      "interpretation": {
        "sig": "e4aef744",
        "summary": "Archives a custom field definition for the firm, so it stops appearing as an option to apply to new entities. Requires `can_manage_firm` permission.",
        "models": [
          {
            "model": "FieldDefinition",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.field.definitions.unarchive",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.field.definitions.unarchive",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "InputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/field/procedures/lawyer/definitions/unarchive.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/procedures/lawyer/definitions/unarchive.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/field/router.ts",
        "line": 55,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/router.ts#L55"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "field.definitions.unarchive",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:field.definitions.unarchive",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/unarchive-definition.mutation.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2e7ae675",
      "interpretation": {
        "sig": "2e7ae675",
        "summary": "Restores a previously archived custom field definition so it's available again to apply to entities. Requires `can_manage_firm` permission.",
        "models": [
          {
            "model": "FieldDefinition",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.field.definitions.get",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.field.definitions.get",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "InputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/field/procedures/lawyer/definitions/get.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/procedures/lawyer/definitions/get.query.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/field/router.ts",
        "line": 56,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/router.ts#L56"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "field.definitions.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:field.definitions.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/get-definition.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "419a3bcb",
      "interpretation": {
        "sig": "419a3bcb",
        "summary": "Fetches a single custom field definition by id for the firm.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:identity.field.definitions.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.field.definitions.list",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/field/procedures/lawyer/definitions/list.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/procedures/lawyer/definitions/list.query.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/field/router.ts",
        "line": 57,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/router.ts#L57"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "field.definitions.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:field.definitions.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/list-definitions.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ad121773",
      "interpretation": {
        "sig": "ad121773",
        "summary": "Lists the firm's custom field definitions, optionally filtered by entity type, with archived ones excluded unless requested.",
        "models": [
          {
            "model": "FieldDefinition",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.field.matter.apply",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.field.matter.apply",
      "module": "identity",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ApplyInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/field/make-field-entity-router.ts",
        "line": 102,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/make-field-entity-router.ts#L102"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/field/make-field-entity-router.ts",
        "line": 102,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/make-field-entity-router.ts#L102"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "field.applications.apply",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:field.applications.apply",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/apply-field.mutation.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "dd7fcb9f",
      "interpretation": {
        "sig": "dd7fcb9f",
        "summary": "Attaches a custom field definition to a matter, creating a field application the firm can then set a value on.",
        "flags": [
          "looks unused"
        ],
        "models": [
          {
            "model": "FieldApplication",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.field.matter.remove",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.field.matter.remove",
      "module": "identity",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "RemoveInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/field/make-field-entity-router.ts",
        "line": 115,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/make-field-entity-router.ts#L115"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/field/make-field-entity-router.ts",
        "line": 115,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/make-field-entity-router.ts#L115"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "field.applications.remove",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:field.applications.remove",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/remove-application.mutation.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "371908ad",
      "interpretation": {
        "sig": "371908ad",
        "summary": "Removes a custom field application from a matter, detaching that field from the matter.",
        "flags": [
          "looks unused"
        ],
        "models": [
          {
            "model": "FieldApplication",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.field.matter.setValue",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.field.matter.setValue",
      "module": "identity",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "SetValueInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/field/make-field-entity-router.ts",
        "line": 128,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/make-field-entity-router.ts#L128"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/field/make-field-entity-router.ts",
        "line": 128,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/make-field-entity-router.ts#L128"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.internal.findMatterDocumentIdsInFirm",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterDocument.internal.findMatterDocumentIdsInFirm",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/internal/findMatterDocumentIdsInFirm.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "matterFile.internal.findMatterFileIdsInFirm",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterFile.internal.findMatterFileIdsInFirm",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/internal/findMatterFileIdsInFirm.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "field.applications.setValue",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:field.applications.setValue",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/set-value.mutation.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "665de497",
      "interpretation": {
        "sig": "665de497",
        "summary": "Sets the value of a custom field already applied to a matter. If the value is a document reference, first checks the referenced matter documents or files actually belong to the firm before writing the value.",
        "flags": [
          "looks unused"
        ],
        "models": [
          {
            "model": "FieldApplication",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.field.matter.clearValue",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.field.matter.clearValue",
      "module": "identity",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ClearValueInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/field/make-field-entity-router.ts",
        "line": 141,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/make-field-entity-router.ts#L141"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/field/make-field-entity-router.ts",
        "line": 141,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/make-field-entity-router.ts#L141"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "field.applications.clearValue",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:field.applications.clearValue",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/clear-value.mutation.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "3d556a39",
      "interpretation": {
        "sig": "3d556a39",
        "summary": "Clears the stored value of a custom field application on a matter, leaving the field applied but empty.",
        "flags": [
          "looks unused"
        ],
        "models": [
          {
            "model": "FieldApplication",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.field.matter.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.field.matter.list",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ListInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/field/make-field-entity-router.ts",
        "line": 152,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/make-field-entity-router.ts#L152"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/field/make-field-entity-router.ts",
        "line": 152,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/make-field-entity-router.ts#L152"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "field.applications.listForEntity",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:field.applications.listForEntity",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/list-entity-fields.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "e90b30fd",
      "interpretation": {
        "sig": "e90b30fd",
        "summary": "Lists the custom field applications and their values currently set on a given matter.",
        "models": [
          {
            "model": "FieldApplication",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.field.contact.apply",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.field.contact.apply",
      "module": "identity",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ApplyInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/field/make-field-entity-router.ts",
        "line": 102,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/make-field-entity-router.ts#L102"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/field/make-field-entity-router.ts",
        "line": 102,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/make-field-entity-router.ts#L102"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "field.applications.apply",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:field.applications.apply",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/apply-field.mutation.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "79f6138",
      "interpretation": {
        "sig": "79f6138",
        "summary": "Attaches a custom field definition to a contact, creating a field application the firm can then set a value on.",
        "flags": [
          "looks unused"
        ],
        "models": [
          {
            "model": "FieldApplication",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.field.contact.remove",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.field.contact.remove",
      "module": "identity",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "RemoveInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/field/make-field-entity-router.ts",
        "line": 115,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/make-field-entity-router.ts#L115"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/field/make-field-entity-router.ts",
        "line": 115,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/make-field-entity-router.ts#L115"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "field.applications.remove",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:field.applications.remove",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/remove-application.mutation.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "2718a632",
      "interpretation": {
        "sig": "2718a632",
        "summary": "Removes a custom field application from a contact, detaching that field from the contact.",
        "flags": [
          "looks unused"
        ],
        "models": [
          {
            "model": "FieldApplication",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.field.contact.setValue",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.field.contact.setValue",
      "module": "identity",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "SetValueInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/field/make-field-entity-router.ts",
        "line": 128,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/make-field-entity-router.ts#L128"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/field/make-field-entity-router.ts",
        "line": 128,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/make-field-entity-router.ts#L128"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterDocument.internal.findMatterDocumentIdsInFirm",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterDocument.internal.findMatterDocumentIdsInFirm",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterDocuments/procedures/internal/findMatterDocumentIdsInFirm.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "matterFile.internal.findMatterFileIdsInFirm",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterFile.internal.findMatterFileIdsInFirm",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/internal/findMatterFileIdsInFirm.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "field.applications.setValue",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:field.applications.setValue",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/set-value.mutation.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "87d2e6c0",
      "interpretation": {
        "sig": "87d2e6c0",
        "summary": "Sets the value of a custom field already applied to a contact. If the value is a document reference, first checks the referenced matter documents or files actually belong to the firm before writing the value.",
        "flags": [
          "looks unused"
        ],
        "models": [
          {
            "model": "FieldApplication",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.field.contact.clearValue",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.field.contact.clearValue",
      "module": "identity",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ClearValueInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/field/make-field-entity-router.ts",
        "line": 141,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/make-field-entity-router.ts#L141"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/field/make-field-entity-router.ts",
        "line": 141,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/make-field-entity-router.ts#L141"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "field.applications.clearValue",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:field.applications.clearValue",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/clear-value.mutation.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "5d10d8c6",
      "interpretation": {
        "sig": "5d10d8c6",
        "summary": "Clears the stored value of a custom field application on a contact, leaving the field applied but empty.",
        "flags": [
          "looks unused"
        ],
        "models": [
          {
            "model": "FieldApplication",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.field.contact.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.field.contact.list",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ListInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/field/make-field-entity-router.ts",
        "line": 152,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/make-field-entity-router.ts#L152"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/field/make-field-entity-router.ts",
        "line": 152,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/make-field-entity-router.ts#L152"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "field.applications.listForEntity",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:field.applications.listForEntity",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/list-entity-fields.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "dc0e5044",
      "interpretation": {
        "sig": "dc0e5044",
        "summary": "Lists the custom field applications and their values currently set on a given contact.",
        "flags": [
          "looks unused"
        ],
        "models": [
          {
            "model": "FieldApplication",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.field.options.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.field.options.list",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "InputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/field/procedures/lawyer/options/list.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/procedures/lawyer/options/list.query.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/field/router.ts",
        "line": 68,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/router.ts#L68"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "field.options.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:field.options.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/list-options.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "69629f3b",
      "interpretation": {
        "sig": "69629f3b",
        "summary": "Lists the option values (e.g. dropdown choices) configured for the firm's custom fields.",
        "models": [
          {
            "model": "FieldOption",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.field.options.listForDefinition",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.field.options.listForDefinition",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "InputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/field/procedures/lawyer/options/list-for-definition.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/procedures/lawyer/options/list-for-definition.query.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/field/router.ts",
        "line": 69,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/field/router.ts#L69"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "field.options.listForDefinition",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:field.options.listForDefinition",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/field/procedures/list-options-for-definition.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7e49c8d3",
      "interpretation": {
        "sig": "7e49c8d3",
        "summary": "Lists the option values available for one specific custom field definition, for populating a dropdown when filling in that field.",
        "models": [
          {
            "model": "FieldOption",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.firm.permissions",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.firm.permissions",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firms/procedures/lawyer/getFirmPermissions.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/procedures/lawyer/getFirmPermissions.query.ts#L4"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 68,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L68"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2a81b5ad",
      "interpretation": {
        "sig": "2a81b5ad",
        "summary": "Returns the calling lawyer's permission set for their active firm, used to gate which team/firm actions the UI shows.",
        "models": [
          {
            "model": "Firm",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.team.lawyer.listTeams",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.team.lawyer.listTeams",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "listTeamsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/teams/procedures/lawyer/listTeams.query.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teams/procedures/lawyer/listTeams.query.ts#L15"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/teams/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teams/router.ts#L15"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "bea9f7de",
      "interpretation": {
        "sig": "bea9f7de",
        "summary": "Lists teams for the lawyer's firm, or the teams a given person belongs to within that firm, by delegating to `identity-service`'s `team.list`.",
        "models": [
          {
            "model": "Team",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.team.lawyer.listFirmTeams",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.team.lawyer.listFirmTeams",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/teams/procedures/lawyer/listFirmTeams.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teams/procedures/lawyer/listFirmTeams.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/teams/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teams/router.ts#L16"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "matterTeamAccess.lawyer.countMattersForTeams",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterTeamAccess.lawyer.countMattersForTeams",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTeamAccess/matter-team-access-controller.ts#L63",
            "domain": "matters"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "bd24c657",
      "interpretation": {
        "sig": "bd24c657",
        "summary": "Lists all teams in the lawyer's firm and adds each team's count of active matters, pulled from `matter-service`.",
        "models": [
          {
            "model": "Team",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.team.lawyer.createTeam",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.team.lawyer.createTeam",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "createTeamInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/teams/procedures/lawyer/createTeam.mutation.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teams/procedures/lawyer/createTeam.mutation.ts#L11"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/teams/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teams/router.ts#L17"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.create",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:team.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/createTeam.mutation.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "1e0a0ddd",
      "interpretation": {
        "sig": "1e0a0ddd",
        "summary": "Creates a new team in the lawyer's firm via `identity-service`, after checking the caller has `CanManageTeams`.",
        "models": [
          {
            "model": "Team",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.team.lawyer.getTeam",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.team.lawyer.getTeam",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "getTeamInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/teams/procedures/lawyer/getTeam.query.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teams/procedures/lawyer/getTeam.query.ts#L11"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/teams/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teams/router.ts#L18"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/getTeam.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "e7cef0a2",
      "interpretation": {
        "sig": "e7cef0a2",
        "summary": "Fetches a single team's details from `identity-service`, gated on the caller having view access to that team.",
        "models": [
          {
            "model": "Team",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.team.lawyer.updateTeam",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.team.lawyer.updateTeam",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "updateTeamInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/teams/procedures/lawyer/updateTeam.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teams/procedures/lawyer/updateTeam.mutation.ts#L12"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/teams/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teams/router.ts#L19"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.update",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:team.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/updateTeam.mutation.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "ec05ee0e",
      "interpretation": {
        "sig": "ec05ee0e",
        "summary": "Renames a team via `identity-service`'s `team.update`, after checking the caller can manage teams.",
        "models": [
          {
            "model": "Team",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.team.lawyer.deleteTeam",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.team.lawyer.deleteTeam",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "deleteTeamInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/teams/procedures/lawyer/deleteTeam.mutation.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teams/procedures/lawyer/deleteTeam.mutation.ts#L11"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/teams/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teams/router.ts#L20"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.delete",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:team.delete",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/deleteTeam.mutation.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "35a5bbc",
      "interpretation": {
        "sig": "35a5bbc",
        "summary": "Deletes a team via `identity-service`'s `team.delete`, after checking the caller can manage teams.",
        "models": [
          {
            "model": "Team",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.team.lawyer.permissions",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.team.lawyer.permissions",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "getTeamPermissionsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/teams/procedures/lawyer/getTeamPermissions.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teams/procedures/lawyer/getTeamPermissions.query.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/teams/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teams/router.ts#L21"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "be6379e6",
      "interpretation": {
        "sig": "be6379e6",
        "summary": "Returns the caller's permission set for a given team by calling `TeamPermissionService` directly.",
        "flags": [
          "usage.dead: no callers found in apps or services"
        ]
      }
    },
    {
      "id": "platform-api:identity.teamMember.lawyer.addTeamMember",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.teamMember.lawyer.addTeamMember",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "addTeamMemberInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/teamMembers/procedures/lawyer/addTeamMember.mutation.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teamMembers/procedures/lawyer/addTeamMember.mutation.ts#L15"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/teamMembers/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teamMembers/router.ts#L18"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.getByFirmPerson",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getByFirmPerson",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getByFirmIdentity.query.ts#L21",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "teamMember.add",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:teamMember.add",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/teamMember/procedures/addTeamMember.mutation.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "team.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/getTeam.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "firm.getEnrolledToMarketplace",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.getEnrolledToMarketplace",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmEnrolledToMarketplace.query.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "28d3560c",
      "interpretation": {
        "sig": "28d3560c",
        "summary": "Adds a person to a firm team with a role (default `MEMBER`) after confirming they belong to the firm, then notifies the person via Knock that they were added to the team.",
        "flags": [
          "notification side-effect on success path (best-effort, failure only logged)"
        ],
        "models": [
          {
            "model": "TeamMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.teamMember.lawyer.removeTeamMember",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.teamMember.lawyer.removeTeamMember",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "removeTeamMemberInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/teamMembers/procedures/lawyer/removeTeamMember.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teamMembers/procedures/lawyer/removeTeamMember.mutation.ts#L12"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/teamMembers/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teamMembers/router.ts#L19"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "teamMember.delete",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:teamMember.delete",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/teamMember/procedures/deleteTeamMember.mutation.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "team.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/getTeam.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "firm.getEnrolledToMarketplace",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.getEnrolledToMarketplace",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmEnrolledToMarketplace.query.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "439975ee",
      "interpretation": {
        "sig": "439975ee",
        "summary": "Removes a person from a team via `identity-service`, then notifies the removed member via Knock that their team membership changed.",
        "flags": [
          "notification side-effect on success path (best-effort, failure only logged)"
        ],
        "models": [
          {
            "model": "TeamMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.teamMember.lawyer.updateTeamMemberRole",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.teamMember.lawyer.updateTeamMemberRole",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "updateTeamMemberRoleInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/teamMembers/procedures/lawyer/updateTeamMemberRole.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teamMembers/procedures/lawyer/updateTeamMemberRole.mutation.ts#L14"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/teamMembers/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teamMembers/router.ts#L20"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "teamMember.updateRole",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:teamMember.updateRole",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/teamMember/procedures/updateTeamMemberRole.mutation.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "a1716e80",
      "interpretation": {
        "sig": "a1716e80",
        "summary": "Changes a team member's role (e.g. between `OWNER` and `MEMBER`) via `identity-service`'s `teamMember.updateRole`.",
        "models": [
          {
            "model": "TeamMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.lawyer.getLawhiveFirm",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.lawyer.getLawhiveFirm",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firms/procedures/lawyer/getLawhiveFirm.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/procedures/lawyer/getLawhiveFirm.query.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 73,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L73"
      },
      "hops": {
        "direct": 3,
        "services": [
          "identity-service",
          "matter-service",
          "transaction-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "matterParticipant.admin.countMattersForPersons",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterParticipant.admin.countMattersForPersons",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/admin/countMattersForPersons.query.ts#L17",
            "domain": "matters"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "540a3c79",
      "interpretation": {
        "sig": "540a3c79",
        "summary": "Returns Lawhive's own firm record (the market's designated internal firm) with each member's active matter count and the firm's invoice bank account, resolved via `identity-service`, `matter-service` and `transaction-service`.",
        "models": [
          {
            "model": "Firm",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.lawyer.getFirm",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.lawyer.getFirm",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firms/procedures/lawyer/getFirm.query.ts",
        "line": 34,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/procedures/lawyer/getFirm.query.ts#L34"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 74,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L74"
      },
      "hops": {
        "direct": 3,
        "services": [
          "identity-service",
          "matter-service",
          "transaction-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "matterParticipant.admin.countMattersForPersons",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterParticipant.admin.countMattersForPersons",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/admin/countMattersForPersons.query.ts#L17",
            "domain": "matters"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "56dec927",
      "interpretation": {
        "sig": "56dec927",
        "summary": "Returns a firm's full profile for a lawyer, with each member's active matter count and the firm's invoice bank account attached, pulled from `identity-service`, `matter-service` and `transaction-service`.",
        "models": [
          {
            "model": "Firm",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.lawyer.getMe",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.lawyer.getMe",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "crossFirmLawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/procedures/getMe.query.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/procedures/getMe.query.ts#L20"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 75,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L75"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firm.listFirmMemberships",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.listFirmMemberships",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "ffa3a2cf",
      "interpretation": {
        "sig": "ffa3a2cf",
        "summary": "Returns the current identity plus the list of firms they belong to, using a deduped lookup against `identity-service` so concurrent calls in the same request share one result.",
        "models": [
          {
            "model": "Firm",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.lawyer.ensurePeopleSynced",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.lawyer.ensurePeopleSynced",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/procedures/ensurePeopleSynced.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/procedures/ensurePeopleSynced.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 76,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L76"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.ensurePeopleSynced",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.ensurePeopleSynced",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/ensureIdentitiesSynced.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "c480e2fb",
      "interpretation": {
        "sig": "c480e2fb",
        "summary": "Asks `identity-service` to make sure the given identity IDs have synced person records; despite being a query it triggers a sync-on-demand operation on `identity-service`.",
        "flags": [
          "usage.dead: no callers found in apps or services",
          "query whose downstream call performs a sync, not a pure read"
        ]
      }
    },
    {
      "id": "platform-api:identity.lawyer.checkIsFirmOfRecordForActiveFirm",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.lawyer.checkIsFirmOfRecordForActiveFirm",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firms/procedures/lawyer/checkIsFirmOfRecordForActiveFirm.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/procedures/lawyer/checkIsFirmOfRecordForActiveFirm.query.ts#L4"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 77,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L77"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "marketConfig.checkIsFirmOfRecord",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:marketConfig.checkIsFirmOfRecord",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/marketConfig/procedures/checkIsFirmOfRecord.query.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "5128c389",
      "interpretation": {
        "sig": "5128c389",
        "summary": "Checks whether the lawyer's active firm is the firm of record for the current market, via `identity-service`'s `marketConfig.checkIsFirmOfRecord`.",
        "models": [
          {
            "model": "MarketConfig",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.lawyer.firmBankAccounts.listForFirm",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.lawyer.firmBankAccounts.listForFirm",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firmBankAccounts/procedures/lawyer/listFirmBankAccounts.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmBankAccounts/procedures/lawyer/listFirmBankAccounts.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 79,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L79"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmBankAccounts.listForFirm",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.listForFirm",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L64",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "18a6d020",
      "interpretation": {
        "sig": "18a6d020",
        "summary": "Lists the authed firm's bank accounts for the Accounts tab, scoped to the caller's own firm via `ctx.firmId`.",
        "models": [
          {
            "model": "FirmBankAccount",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.lawyer.firmBankAccounts.get",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.lawyer.firmBankAccounts.get",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firmBankAccounts/procedures/lawyer/getFirmBankAccount.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmBankAccounts/procedures/lawyer/getFirmBankAccount.query.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 80,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L80"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmBankAccounts.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L31",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "f93d1bdf",
      "interpretation": {
        "sig": "f93d1bdf",
        "summary": "Fetches one firm bank account by id, 404ing if it belongs to another firm so cross-firm accounts never leak. No app or service currently calls it.",
        "models": [
          {
            "model": "FirmBankAccount",
            "service": "identity-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:identity.lawyer.firmBankAccounts.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.lawyer.firmBankAccounts.create",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firmBankAccounts/procedures/lawyer/createFirmBankAccount.mutation.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmBankAccounts/procedures/lawyer/createFirmBankAccount.mutation.ts#L16"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 81,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L81"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmBankAccounts.create",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L83",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "32956790",
      "interpretation": {
        "sig": "32956790",
        "summary": "Adds a new bank account (role, currency, opening balance metadata) to the caller's firm. Requires `can_manage_firm`; the opening balance's non-negative check lives in the input schema.",
        "models": [
          {
            "model": "FirmBankAccount",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.lawyer.firmBankAccounts.updateBankMetadata",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.lawyer.firmBankAccounts.updateBankMetadata",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firmBankAccounts/procedures/lawyer/updateFirmBankAccount.mutation.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmBankAccounts/procedures/lawyer/updateFirmBankAccount.mutation.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 82,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L82"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmBankAccounts.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L31",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.updateBankMetadata",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.updateBankMetadata",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L127",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3da8e4a7",
      "interpretation": {
        "sig": "3da8e4a7",
        "summary": "Updates a firm bank account's bank metadata (e.g. name, balance) after confirming the account belongs to the caller's firm. Requires `can_manage_firm`.",
        "models": [
          {
            "model": "FirmBankAccount",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.lawyer.firmBankAccounts.archive",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.lawyer.firmBankAccounts.archive",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firmBankAccounts/procedures/lawyer/archiveFirmBankAccount.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmBankAccounts/procedures/lawyer/archiveFirmBankAccount.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 83,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L83"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmBankAccounts.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L31",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.archive",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.archive",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L136",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "eeff6360",
      "interpretation": {
        "sig": "eeff6360",
        "summary": "Archives a firm bank account after confirming it belongs to the caller's firm. Requires `can_manage_firm`.",
        "models": [
          {
            "model": "FirmBankAccount",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.lawyer.apiKeys.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.lawyer.apiKeys.list",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "firmManagerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/identity/api-keys/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/api-keys/router.ts#L21"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/api-keys/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/api-keys/router.ts#L21"
      },
      "hops": {
        "direct": 1,
        "services": [
          "auth-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "auth-service",
            "path": "apiKeys.list",
            "kind": "read",
            "inferred": false,
            "targetId": "auth-service:apiKeys.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/auth-service/src/api-keys/api-keys.router.ts#L51",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "6213b86c",
      "interpretation": {
        "sig": "6213b86c",
        "summary": "Lists the firm's API keys (summary view only, no secrets). Requires `can_manage_firm`.",
        "models": [
          {
            "model": "ApiKey",
            "service": "auth-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.lawyer.apiKeys.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.lawyer.apiKeys.create",
      "module": "identity",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "firmManagerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CreateAPIKeyInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/identity/api-keys/router.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/api-keys/router.ts#L29"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/api-keys/router.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/api-keys/router.ts#L29"
      },
      "hops": {
        "direct": 1,
        "services": [
          "auth-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "auth-service",
            "path": "apiKeys.create",
            "kind": "write",
            "inferred": false,
            "targetId": "auth-service:apiKeys.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/auth-service/src/api-keys/api-keys.router.ts#L37",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "1b4fa3e",
      "interpretation": {
        "sig": "1b4fa3e",
        "summary": "Issues a new API key for the firm; the acting identity is bound server-side from the auth context, not from client input. Requires `can_manage_firm`.",
        "models": [
          {
            "model": "ApiKey",
            "service": "auth-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.lawyer.apiKeys.revoke",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.lawyer.apiKeys.revoke",
      "module": "identity",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "firmManagerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/identity/api-keys/router.ts",
        "line": 41,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/api-keys/router.ts#L41"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/api-keys/router.ts",
        "line": 41,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/api-keys/router.ts#L41"
      },
      "hops": {
        "direct": 1,
        "services": [
          "auth-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "auth-service",
            "path": "apiKeys.revoke",
            "kind": "write",
            "inferred": false,
            "targetId": "auth-service:apiKeys.revoke",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/auth-service/src/api-keys/api-keys.router.ts#L65",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b04c05aa",
      "interpretation": {
        "sig": "b04c05aa",
        "summary": "Revokes one of the firm's API keys by id, making it unusable for further calls. Requires `can_manage_firm`.",
        "models": [
          {
            "model": "ApiKey",
            "service": "auth-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.lawyer.firmMembers.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.lawyer.firmMembers.list",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "inputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firms/procedures/lawyer/listFirmMembers.query.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/procedures/lawyer/listFirmMembers.query.ts#L16"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 87,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L87"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.listFirmMembers",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.listFirmMembers",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/listFirmMembers.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "matterParticipant.admin.countMattersForPersons",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterParticipant.admin.countMattersForPersons",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/admin/countMattersForPersons.query.ts#L17",
            "domain": "matters"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "40d54d24",
      "interpretation": {
        "sig": "40d54d24",
        "summary": "Lists the firm's members with search, paging, and an `identityIds` bypass for hydrating a known selection, joining in each member's active and lead matter counts to compute `canUpdate`/`canDelete`/`canReactivate` flags per row.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          },
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.lawyer.firmMembers.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.lawyer.firmMembers.create",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CreateFirmMemberInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firms/procedures/lawyer/createFirmMember.mutation.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/procedures/lawyer/createFirmMember.mutation.ts#L17"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 88,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L88"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.createFirmMemberAndIdentity",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmMember.createFirmMemberAndIdentity",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/createFirmMemberAndIdentity.mutation.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "4c847d36",
      "interpretation": {
        "sig": "4c847d36",
        "summary": "Creates a new firm member and identity record (name, email, role, job title) and, unless `sendInvite` is false, sends a `firmMemberInvite` notification through Knock; the notification failure is caught and logged, not surfaced to the caller. Requires `can_manage_members`.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.lawyer.firmMembers.update",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.lawyer.firmMembers.update",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "UpdateFirmMemberInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firms/procedures/lawyer/updateFirmMember.mutation.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/procedures/lawyer/updateFirmMember.mutation.ts#L17"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 89,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L89"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.getFirmMember",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getFirmMember",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getFirmMember.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "firmMember.updateFirmMember",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmMember.updateFirmMember",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/updateFirmMember.mutation.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "a12767f4",
      "interpretation": {
        "sig": "a12767f4",
        "summary": "Updates a firm member's name, contact details, job title, and role, blocking edits to members of another firm or to the caller's own record. Requires `can_manage_members`.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.lawyer.firmMembers.changeRole",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.lawyer.firmMembers.changeRole",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ChangeFirmMemberRoleInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firms/procedures/lawyer/changeFirmMemberRole.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/procedures/lawyer/changeFirmMemberRole.mutation.ts#L12"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 90,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L90"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.getFirmMember",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getFirmMember",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getFirmMember.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "firmMember.updateRole",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmMember.updateRole",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/updateRole.mutation.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "bf96ee8",
      "interpretation": {
        "sig": "bf96ee8",
        "summary": "Changes a firm member's role, blocking cross-firm targets and self-role-changes. Requires `can_manage_members`.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.lawyer.firmMembers.delete",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.lawyer.firmMembers.delete",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "DeleteFirmMemberInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firms/procedures/lawyer/deleteFirmMember.mutation.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/procedures/lawyer/deleteFirmMember.mutation.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 91,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L91"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.getFirmMember",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getFirmMember",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getFirmMember.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "matterParticipant.admin.countMattersForPersons",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterParticipant.admin.countMattersForPersons",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/admin/countMattersForPersons.query.ts#L17",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "firmMember.delete",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmMember.delete",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/deleteFirmMember.mutation.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c0410888",
      "interpretation": {
        "sig": "c0410888",
        "summary": "Deactivates a firm member after checking they aren't the lead firm contact, aren't the caller, and have no active matters assigned; blocked with a `BAD_REQUEST` if any of those hold.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          },
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.lawyer.firmMembers.reactivate",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.lawyer.firmMembers.reactivate",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "inputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firms/procedures/lawyer/reactivateFirmMember.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/procedures/lawyer/reactivateFirmMember.mutation.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 92,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L92"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.getFirmMember",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getFirmMember",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getFirmMember.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "firmMember.reactivate",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmMember.reactivate",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/reactivateFirmMember.mutation.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "1326e751",
      "interpretation": {
        "sig": "1326e751",
        "summary": "Reactivates a previously deactivated firm member, blocking cross-firm targets and self-reactivation. Requires `can_manage_members`.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.lawyer.firmMembers.checkDeactivation",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.lawyer.firmMembers.checkDeactivation",
      "module": "identity",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "inputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firms/procedures/lawyer/checkFirmMemberDeactivation.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/procedures/lawyer/checkFirmMemberDeactivation.query.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 93,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L93"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.getFirmMember",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getFirmMember",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getFirmMember.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "matterParticipant.admin.countMattersForPersons",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterParticipant.admin.countMattersForPersons",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/admin/countMattersForPersons.query.ts#L17",
            "domain": "matters"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "9c1900e6",
      "interpretation": {
        "sig": "9c1900e6",
        "summary": "Pre-flight check the UI calls before showing a deactivate action: returns whether a member can be deactivated, and if not, a specific reason (self, lead firm contact, active matters, or wrong firm).",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          },
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.outOfOfficeSchedule.upsert",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.outOfOfficeSchedule.upsert",
      "module": "identity",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "upsertOutOfOfficeScheduleInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/outOfOfficeSchedule/procedures/upsert.mutation.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/outOfOfficeSchedule/procedures/upsert.mutation.ts#L16"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/outOfOfficeSchedule/router.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/outOfOfficeSchedule/router.ts#L5"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "outOfOfficeSchedule.upsert",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:outOfOfficeSchedule.upsert",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/outOfOfficeSchedule/procedures/upsertOutOfOfficeSchedule.mutation.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "6076846d",
      "interpretation": {
        "sig": "6076846d",
        "summary": "Creates or updates the caller's out-of-office schedule (start date, end date, optional message) for their own identity.",
        "models": [
          {
            "model": "OutOfOfficeSchedule",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.outOfOfficeSchedule.getNext",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "identity.outOfOfficeSchedule.getNext",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/outOfOfficeSchedule/procedures/getNext.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/outOfOfficeSchedule/procedures/getNext.query.ts#L4"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/outOfOfficeSchedule/router.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/outOfOfficeSchedule/router.ts#L6"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "outOfOfficeSchedule.getNext",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:outOfOfficeSchedule.getNext",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/outOfOfficeSchedule/procedures/getNextOutOfOfficeSchedule.query.ts#L4",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7c6926ba",
      "interpretation": {
        "sig": "7c6926ba",
        "summary": "Lets a logged-in lawyer fetch their own currently active out-of-office schedule from the identity service, if one is set.",
        "models": [
          {
            "model": "OutOfOfficeSchedule",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matterArtifacts.lawyer.getMatterLegalFormArtifact",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matterArtifacts.lawyer.getMatterLegalFormArtifact",
      "module": "matterArtifacts",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/getMatterLegalFormArtifact.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/getMatterLegalFormArtifact.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L20"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.getMatterLegalFormArtifact",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.getMatterLegalFormArtifact",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/getMatterLegalFormArtifact.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "79d97643",
      "interpretation": {
        "sig": "79d97643",
        "summary": "Lets a firm lawyer fetch a single matter artifact that was generated from a legal form, forwarding straight to `matter-service` with no local transformation.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matterArtifacts.lawyer.getMatterArtifact",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matterArtifacts.lawyer.getMatterArtifact",
      "module": "matterArtifacts",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/getMatterArtifact.query.ts",
        "line": 48,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/getMatterArtifact.query.ts#L48"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L21"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.getMatterArtifact",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.getMatterArtifact",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/getMatterArtifact.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "a8129014",
      "interpretation": {
        "sig": "a8129014",
        "summary": "Fetches one matter artifact plus its version history for a lawyer, then stitches in the display name of whoever created each version by looking up identities.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          },
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matterArtifacts.lawyer.getMatterArtifactVersions",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matterArtifacts.lawyer.getMatterArtifactVersions",
      "module": "matterArtifacts",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/getMatterArtifactVersions.query.ts",
        "line": 47,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/getMatterArtifactVersions.query.ts#L47"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L22"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.getMatterArtifactVersions",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.getMatterArtifactVersions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/getMatterArtifactVersions.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "18f6af39",
      "interpretation": {
        "sig": "18f6af39",
        "summary": "Lists every version of a matter artifact for a lawyer, adding each version's creator name from the identity service.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          },
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ],
        "flags": [
          "not used by front-end apps directly, only by other services"
        ]
      }
    },
    {
      "id": "platform-api:matterArtifacts.lawyer.listMatterArtifacts",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matterArtifacts.lawyer.listMatterArtifacts",
      "module": "matterArtifacts",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/listMatterArtifacts.query.ts",
        "line": 47,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/listMatterArtifacts.query.ts#L47"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L23"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.listMatterArtifacts",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.listMatterArtifacts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/listMatterArtifacts.query.ts#L7",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "54075bc7",
      "interpretation": {
        "sig": "54075bc7",
        "summary": "Lists all artifacts on a matter for a lawyer, attaching the creator name for each artifact's latest version via the identity service.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          },
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matterArtifacts.lawyer.acceptDraftArtifact",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matterArtifacts.lawyer.acceptDraftArtifact",
      "module": "matterArtifacts",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/acceptDraftArtifact.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/acceptDraftArtifact.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L24"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.acceptDraftArtifact",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.acceptDraftArtifact",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/acceptDraftArtifact.mutation.ts#L7",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "1d67ebf",
      "interpretation": {
        "sig": "1d67ebf",
        "summary": "Accepts a drafted matter artifact, turning it from a draft into the artifact's confirmed state. The write happens in `matter-service`.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matterArtifacts.lawyer.discardDraftArtifact",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matterArtifacts.lawyer.discardDraftArtifact",
      "module": "matterArtifacts",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/discardDraftArtifact.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/discardDraftArtifact.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L25"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.discardDraftArtifact",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.discardDraftArtifact",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/discardDraftArtifact.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "43b53539",
      "interpretation": {
        "sig": "43b53539",
        "summary": "Discards a drafted matter artifact a lawyer no longer wants, deleting it via `matter-service`.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matterArtifacts.lawyer.createMatterArtifactFilePreviewUrl",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matterArtifacts.lawyer.createMatterArtifactFilePreviewUrl",
      "module": "matterArtifacts",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterArtifactPreviewUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/createMatterArtifactPreviewUrl.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/createMatterArtifactPreviewUrl.mutation.ts#L14"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L26"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.createMatterArtifactFilePreviewUrl",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.createMatterArtifactFilePreviewUrl",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/createMatterArtifactPreviewUrl.mutation.ts#L14",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "20a698a2",
      "interpretation": {
        "sig": "20a698a2",
        "summary": "Generates a preview URL for a matter artifact file so a lawyer can view it, via `matter-service`.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matterArtifacts.lawyer.updateMatterArtifactVersion",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matterArtifacts.lawyer.updateMatterArtifactVersion",
      "module": "matterArtifacts",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/updateMatterArtifactVersion.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/updateMatterArtifactVersion.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L27"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.updateMatterArtifactVersion",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.updateMatterArtifactVersion",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/updateMatterArtifactVersion.mutation.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "70aa2d90",
      "interpretation": {
        "sig": "70aa2d90",
        "summary": "Saves new HTML content for a matter artifact version, letting a lawyer set letterhead (`LAWHIVE` or `FIRM`) and page size, creating or updating the version in `matter-service`.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matterArtifacts.lawyer.updateMatterArtifactVersionName",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matterArtifacts.lawyer.updateMatterArtifactVersionName",
      "module": "matterArtifacts",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/updateMatterArtifactVersionName.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/updateMatterArtifactVersionName.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L28"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.updateMatterArtifactVersionName",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.updateMatterArtifactVersionName",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/updateMatterArtifactVersionName.mutation.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "dc6b2bc7",
      "interpretation": {
        "sig": "dc6b2bc7",
        "summary": "Renames a specific matter artifact version.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matterArtifacts.lawyer.createMatterArtifact",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matterArtifacts.lawyer.createMatterArtifact",
      "module": "matterArtifacts",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterArtifactInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/createMatterArtifact.mutation.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/createMatterArtifact.mutation.ts#L15"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L29"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.createMatterArtifact",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.createMatterArtifact",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/createMatterArtifact.mutation.ts#L19",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "ae5d8e61",
      "interpretation": {
        "sig": "ae5d8e61",
        "summary": "Creates a new matter artifact of type `BLANK`, `FILLED_FORM`, or `FROM_PRECEDENT` with the given name and content, optionally tied to a legal form or a document template, via `matter-service`.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matterArtifacts.lawyer.exportMatterArtifactDocx",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matterArtifacts.lawyer.exportMatterArtifactDocx",
      "module": "matterArtifacts",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/exportMatterArtifactDocx.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/exportMatterArtifactDocx.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L30"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.exportMatterArtifactDocx",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.exportMatterArtifactDocx",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/exportMatterArtifactDocx.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "21a15ced",
      "interpretation": {
        "sig": "21a15ced",
        "summary": "Exports a matter artifact as a DOCX file (a4 or letter page size) through `matter-service`.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matterArtifacts.lawyer.exportMatterArtifactPdf",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matterArtifacts.lawyer.exportMatterArtifactPdf",
      "module": "matterArtifacts",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/exportMatterArtifactPdf.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/exportMatterArtifactPdf.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L31"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.exportMatterArtifactPdf",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.exportMatterArtifactPdf",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/exportMatterArtifactPdf.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "1806ea1b",
      "interpretation": {
        "sig": "1806ea1b",
        "summary": "Exports a matter artifact as a PDF file (a4 or letter page size) through `matter-service`.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matterArtifacts.lawyer.updateMatterArtifactName",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matterArtifacts.lawyer.updateMatterArtifactName",
      "module": "matterArtifacts",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/updateMatterArtifactName.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/updateMatterArtifactName.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 32,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L32"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.updateMatterArtifactName",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.updateMatterArtifactName",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/updateMatterArtifactName.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "8a16ffd7",
      "interpretation": {
        "sig": "8a16ffd7",
        "summary": "Renames a matter artifact itself (not a specific version).",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matterArtifacts.lawyer.finalizeArtifactFile",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matterArtifacts.lawyer.finalizeArtifactFile",
      "module": "matterArtifacts",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/finalizeArtifactFile.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/finalizeArtifactFile.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 33,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L33"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.finalizeArtifactFile",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.finalizeArtifactFile",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/finalizeArtifactFile.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/file.uploaded"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "6b87fcba",
      "interpretation": {
        "sig": "6b87fcba",
        "summary": "Finalizes a matter artifact's exported file (pdf or docx) as a real matter file, setting its display name, uploader, visibility (`ALL` or `FIRM_SIDE_ONLY`), and optional folder. Can accept the PDF bytes directly and is also triggered when `matter-service` emits `file.uploaded`.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          },
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matterArtifacts.lawyer.unfinalizeArtifactFile",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matterArtifacts.lawyer.unfinalizeArtifactFile",
      "module": "matterArtifacts",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/unfinalizeArtifactFile.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/unfinalizeArtifactFile.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 34,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L34"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.unfinalizeArtifactFile",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.unfinalizeArtifactFile",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/unfinalizeArtifactFile.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "999d9843",
      "interpretation": {
        "sig": "999d9843",
        "summary": "Reverses finalization of a matter artifact's file, moving it back out of the finalized matter-file state.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matterArtifacts.lawyer.listFinalisedMatterArtifacts",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "matterArtifacts.lawyer.listFinalisedMatterArtifacts",
      "module": "matterArtifacts",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/listFinalisedMatterArtifacts.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/procedures/lawyer/listFinalisedMatterArtifacts.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterArtifacts/router.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterArtifacts/router.ts#L35"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterArtifact.lawyer.listFinalisedMatterArtifacts",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterArtifact.lawyer.listFinalisedMatterArtifacts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterArtifacts/procedures/lawyer/listFinalisedMatterArtifacts.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "14c9b006",
      "interpretation": {
        "sig": "14c9b006",
        "summary": "Lists the matter artifacts on a matter that have been finalized into real files, straight from `matter-service`.",
        "models": [
          {
            "model": "MatterArtifact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:knock.lawyer.getKnockToken",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "knock.lawyer.getKnockToken",
      "module": "knock",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/knock/procedures/getKnockToken.procedure.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/knock/procedures/getKnockToken.procedure.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/knock/router.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/knock/router.ts#L9"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "daac0313",
      "interpretation": {
        "sig": "daac0313",
        "summary": "Signs and returns a Knock user token for the current lawyer's identity, letting the lawyer's client app authenticate to Knock and subscribe to their in-app notification feed."
      }
    },
    {
      "id": "platform-api:knock.lawyer.getActivityFeedMatterSummaries",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "knock.lawyer.getActivityFeedMatterSummaries",
      "module": "knock",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/knock/procedures/getActivityFeedMatterSummaries.procedure.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/knock/procedures/getActivityFeedMatterSummaries.procedure.ts#L25"
      },
      "router": {
        "file": "apis/platform-api/src/modules/knock/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/knock/router.ts#L10"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "internal.getMatterStatuses",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatterStatuses",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatterStatuses.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "internal.getMatterLabels",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatterLabels",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatterLabels.query.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "16c77d50",
      "interpretation": {
        "sig": "16c77d50",
        "summary": "Given a lawyer's notification feed item IDs, looks up the underlying Knock messages, pulls out any matter IDs referenced in them, and returns each matter's status and label so the activity feed can show matter context alongside notifications.",
        "models": [
          {
            "model": "MatterStatusSummary",
            "service": "matter-service"
          },
          {
            "model": "MatterLabel",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:assignment.lawyer.getMatterAssignment",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "assignment.lawyer.getMatterAssignment",
      "module": "assignment",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/assignment/procedures/lawyer/getMatterAssignment.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/assignment/procedures/lawyer/getMatterAssignment.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/assignment/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/assignment/router.ts#L14"
      },
      "hops": {
        "direct": 1,
        "services": [
          "assignment-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "assignment-service",
            "path": "getAssignment",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:getAssignment",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/getAssignment.query.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "3420defd",
      "interpretation": {
        "sig": "3420defd",
        "summary": "Fetches the current assignment record for a matter from the assignment service, by matter ID.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:assignment.lawyer.listAssignments",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "assignment.lawyer.listAssignments",
      "module": "assignment",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "ListAssignmentsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/assignment/procedures/lawyer/listAssignments.query.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/assignment/procedures/lawyer/listAssignments.query.ts#L13"
      },
      "router": {
        "file": "apis/platform-api/src/modules/assignment/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/assignment/router.ts#L15"
      },
      "hops": {
        "direct": 3,
        "services": [
          "assignment-service",
          "identity-service",
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "assignment-service",
            "path": "listAssignments",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:listAssignments",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/listAssignments.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "work-service",
            "path": "feeAgreement.listFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listFeeAgreements.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "firm.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/listFirms.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "97f40660",
      "interpretation": {
        "sig": "97f40660",
        "summary": "Lists a matter's assignment (reassignment) history for a firm lawyer, enriched with the person, fee agreement, and firm on each record.",
        "models": [
          {
            "model": "Assignment",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:assignment.lawyer.listFirmReassignableLawyers",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "assignment.lawyer.listFirmReassignableLawyers",
      "module": "assignment",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ListFirmReassignableLawyersInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/assignment/procedures/lawyer/listFirmReassignableLawyers.query.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/assignment/procedures/lawyer/listFirmReassignableLawyers.query.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/assignment/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/assignment/router.ts#L16"
      },
      "hops": {
        "direct": 4,
        "services": [
          "work-service",
          "matter-service",
          "identity-service",
          "assignment-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service",
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "feeAgreement.listMatterIncompleteFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listMatterIncompleteFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterIncompleteFeeAgreements.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          },
          {
            "service": "assignment-service",
            "path": "listAssignments",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:listAssignments",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/listAssignments.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "assignment-service",
            "path": "listAssignableLawyers",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:listAssignableLawyers",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/firmEmployeeToProduct/procedures/listAssignableLawyers.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "firmMember.listFirmMembers",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.listFirmMembers",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/listFirmMembers.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "4bfd17e8",
      "interpretation": {
        "sig": "4bfd17e8",
        "summary": "Lists which lawyers inside the firm a matter could be reassigned to, based on the matter's incomplete fee agreements, marketplace enrollment, and current lead lawyer, for use in the firm's reassignment picker.",
        "flags": []
      }
    },
    {
      "id": "platform-api:assignment.lawyer.createFirmReassignment",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "assignment.lawyer.createFirmReassignment",
      "module": "assignment",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CreateFirmReassignmentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/assignment/procedures/lawyer/createFirmReassignment.mutation.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/assignment/procedures/lawyer/createFirmReassignment.mutation.ts#L11"
      },
      "router": {
        "file": "apis/platform-api/src/modules/assignment/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/assignment/router.ts#L17"
      },
      "hops": {
        "direct": 4,
        "services": [
          "work-service",
          "identity-service",
          "matter-service",
          "assignment-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service",
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "feeAgreement.listMatterIncompleteFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listMatterIncompleteFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterIncompleteFeeAgreements.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "firmMember.getFirmMember",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getFirmMember",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getFirmMember.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "assignment-service",
            "path": "isLawyerAssignable",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:isLawyerAssignable",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/firmEmployeeToProduct/procedures/isLawyerAssignable.query.ts#L12",
            "domain": "deal"
          },
          {
            "service": "matter-service",
            "path": "lawyer.reassignMatter",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:lawyer.reassignMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reassignment/reassignment-controller.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "deal",
      "triggers": [
        "platform-api/matter.reassigned"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "cd9a6a71",
      "interpretation": {
        "sig": "cd9a6a71",
        "summary": "Reassigns a matter to another lawyer within the same firm: validates the new lawyer is eligible, then calls `matter-service` to reassign the matter, sends Knock notifications to the new and old lawyer and client (marketplace matters only), and fires the `platform-api/matter.reassigned` event.",
        "models": [
          {
            "model": "Assignment",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:assignment.lawyer.bulkFirmReassignment",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "assignment.lawyer.bulkFirmReassignment",
      "module": "assignment",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "BulkFirmReassignmentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/assignment/procedures/lawyer/bulkFirmReassignment.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/assignment/procedures/lawyer/bulkFirmReassignment.mutation.ts#L12"
      },
      "router": {
        "file": "apis/platform-api/src/modules/assignment/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/assignment/router.ts#L18"
      },
      "hops": {
        "direct": 4,
        "services": [
          "work-service",
          "identity-service",
          "matter-service",
          "assignment-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service",
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "feeAgreement.listMatterIncompleteFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listMatterIncompleteFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterIncompleteFeeAgreements.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "firmMember.getFirmMember",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getFirmMember",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getFirmMember.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "assignment-service",
            "path": "isLawyerAssignable",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:isLawyerAssignable",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/firmEmployeeToProduct/procedures/isLawyerAssignable.query.ts#L12",
            "domain": "deal"
          },
          {
            "service": "matter-service",
            "path": "lawyer.reassignMatter",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:lawyer.reassignMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reassignment/reassignment-controller.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "deal",
      "triggers": [
        "platform-api/matter.reassigned"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "738518a1",
      "interpretation": {
        "sig": "738518a1",
        "summary": "Reassigns a list of matters to one lawyer within the firm by looping `createFirmReassignment` per matter, collecting which ones succeeded and which failed with an error message. Currently has no caller.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:content.template.lawyer.applyTemplateYjsUpdate",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.template.lawyer.applyTemplateYjsUpdate",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "templateEditProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ApplyTemplateYjsUpdateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/template/procedures/lawyer/applyTemplateYjsUpdate.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/procedures/lawyer/applyTemplateYjsUpdate.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/template/router.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/router.ts#L25"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.applyTemplateYjsUpdate",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:template.applyTemplateYjsUpdate",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/applyTemplateYjsUpdate.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "content",
      "triggers": [
        "content-service/content.updatePersisted"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "27c73dbc",
      "interpretation": {
        "sig": "27c73dbc",
        "summary": "Applies a Yjs CRDT update to a template's live document, merging a lawyer's edits (from the collaborative editor) into the persisted content.",
        "models": [
          {
            "model": "TemplateContent",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.template.lawyer.createTemplate",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.template.lawyer.createTemplate",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CreateTemplateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/template/procedures/lawyer/createTemplate.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/procedures/lawyer/createTemplate.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/template/router.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/router.ts#L26"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.createTemplate",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:template.createTemplate",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/createTemplate.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "4a5bd16e",
      "interpretation": {
        "sig": "4a5bd16e",
        "summary": "Creates a new document template for a firm's lawyer to start drafting from.",
        "models": [
          {
            "model": "Template",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.template.lawyer.createTemplateVersionFromCurrentState",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.template.lawyer.createTemplateVersionFromCurrentState",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "templateEditProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CreateTemplateVersionFromCurrentStateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/template/procedures/lawyer/createTemplateVersionFromCurrentState.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/procedures/lawyer/createTemplateVersionFromCurrentState.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/template/router.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/router.ts#L27"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.createTemplateVersionFromCurrentState",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:template.createTemplateVersionFromCurrentState",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/createTemplateVersionFromCurrentState.mutation.ts#L6",
            "domain": "content"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "8fba46c2",
      "interpretation": {
        "sig": "8fba46c2",
        "summary": "Snapshots a template's current editor content as a new version in its history.",
        "flags": [
          "looks unused"
        ],
        "models": [
          {
            "model": "TemplateVersion",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.template.lawyer.listTemplates",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.template.lawyer.listTemplates",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ListTemplatesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/template/procedures/lawyer/listTemplates.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/procedures/lawyer/listTemplates.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/template/router.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/router.ts#L29"
      },
      "hops": {
        "direct": 2,
        "services": [
          "content-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.listTemplates",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:template.listTemplates",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/listTemplates.query.ts#L5",
            "domain": "content"
          },
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.getIdentities",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.getIdentities",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentities.query.ts#L8",
            "domain": "people"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "4315a751",
      "interpretation": {
        "sig": "4315a751",
        "summary": "Lists templates available to the firm's library, then enriches each with the identity and team info of who created or last touched it.",
        "models": [
          {
            "model": "Template",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.template.lawyer.getTemplate",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.template.lawyer.getTemplate",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "GetTemplateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/template/procedures/lawyer/getTemplate.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/procedures/lawyer/getTemplate.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/template/router.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/router.ts#L30"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.getTemplate",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:template.getTemplate",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/getTemplate.query.ts#L4",
            "domain": "content"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "5a1a560b",
      "interpretation": {
        "sig": "5a1a560b",
        "summary": "Fetches a single template's metadata and current status for display or editing.",
        "models": [
          {
            "model": "Template",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.template.lawyer.getTemplateContentYjs",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.template.lawyer.getTemplateContentYjs",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "GetTemplateContentYjsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/template/procedures/lawyer/getTemplateContentYjs.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/procedures/lawyer/getTemplateContentYjs.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/template/router.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/router.ts#L31"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.getTemplateContentYjs",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:template.getTemplateContentYjs",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/getTemplateContentYjs.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "b73dec18",
      "interpretation": {
        "sig": "b73dec18",
        "summary": "Loads a template's document body as a Yjs binary update so the collaborative editor can render and sync it.",
        "models": [
          {
            "model": "TemplateContent",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.template.lawyer.listTemplateEditors",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.template.lawyer.listTemplateEditors",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/template/procedures/lawyer/listTemplateEditors.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/procedures/lawyer/listTemplateEditors.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/template/router.ts",
        "line": 32,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/router.ts#L32"
      },
      "hops": {
        "direct": 2,
        "services": [
          "content-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.listTemplateEditors",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:template.listTemplateEditors",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/listTemplateEditors.query.ts#L4",
            "domain": "content"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "61982598",
      "interpretation": {
        "sig": "61982598",
        "summary": "Lists the people currently allowed to edit a template, resolved against identity records so names and team membership show alongside the raw editor list.",
        "models": [
          {
            "model": "TemplateEditor",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.template.lawyer.listTemplateVersions",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.template.lawyer.listTemplateVersions",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ListTemplateVersionsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/template/procedures/lawyer/listTemplateVersions.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/procedures/lawyer/listTemplateVersions.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/template/router.ts",
        "line": 33,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/router.ts#L33"
      },
      "hops": {
        "direct": 2,
        "services": [
          "content-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.listTemplateVersions",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:template.listTemplateVersions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/listTemplateVersions.query.ts#L5",
            "domain": "content"
          },
          {
            "service": "content-service",
            "path": "template.getTemplate",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:template.getTemplate",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/getTemplate.query.ts#L4",
            "domain": "content"
          },
          {
            "service": "identity-service",
            "path": "identity.getPeople",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.getPeople",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentities.query.ts#L8",
            "domain": "people"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "8fba4888",
      "interpretation": {
        "sig": "8fba4888",
        "summary": "Lists a template's saved version history with the author of each version resolved to a real name, for the version-history panel.",
        "models": [
          {
            "model": "TemplateVersion",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.template.lawyer.permissions",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.template.lawyer.permissions",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "getTemplatePermissionsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/template/procedures/lawyer/getTemplatePermissions.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/procedures/lawyer/getTemplatePermissions.query.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/template/router.ts",
        "line": 34,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/router.ts#L34"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "482e703a",
      "interpretation": {
        "sig": "482e703a",
        "summary": "Looks up whether the calling lawyer can view or edit a specific template.",
        "flags": [
          "looks unused"
        ],
        "models": [
          {
            "model": "Template",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.template.lawyer.publishTemplate",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.template.lawyer.publishTemplate",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "PublishTemplateInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/template/procedures/lawyer/publishTemplate.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/procedures/lawyer/publishTemplate.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/template/router.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/router.ts#L35"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.publishTemplate",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:template.publishTemplate",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/publishTemplate.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "f1c0ae57",
      "interpretation": {
        "sig": "f1c0ae57",
        "summary": "Publishes a template, marking it `PUBLISHED` so it becomes available for lawyers to use when drafting documents.",
        "models": [
          {
            "model": "Template",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.template.lawyer.restoreTemplateVersion",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.template.lawyer.restoreTemplateVersion",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "RestoreTemplateVersionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/template/procedures/lawyer/restoreTemplateVersion.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/procedures/lawyer/restoreTemplateVersion.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/template/router.ts",
        "line": 36,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/router.ts#L36"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.restoreTemplateVersion",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:template.restoreTemplateVersion",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/restoreTemplateVersion.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "42f6b44c",
      "interpretation": {
        "sig": "42f6b44c",
        "summary": "Rolls a template's content back to an earlier saved version, replacing the current draft with that version's state.",
        "models": [
          {
            "model": "Template",
            "service": "content-service"
          },
          {
            "model": "TemplateVersion",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.template.lawyer.setTemplateActiveVersion",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.template.lawyer.setTemplateActiveVersion",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "templateEditProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "SetTemplateActiveVersionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/template/procedures/lawyer/setTemplateActiveVersion.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/procedures/lawyer/setTemplateActiveVersion.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/template/router.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/router.ts#L37"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.setTemplateActiveVersion",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:template.setTemplateActiveVersion",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/setTemplateActiveVersion.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "b0dcd480",
      "interpretation": {
        "sig": "b0dcd480",
        "summary": "Sets which saved version of a template is the active one that lawyers draft from.",
        "flags": [
          "looks unused"
        ],
        "models": [
          {
            "model": "Template",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.template.lawyer.setTemplateEditors",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.template.lawyer.setTemplateEditors",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "templateEditProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "SetTemplateEditorsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/template/procedures/lawyer/setTemplateEditors.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/procedures/lawyer/setTemplateEditors.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/template/router.ts",
        "line": 38,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/router.ts#L38"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.setTemplateEditors",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:template.setTemplateEditors",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/setTemplateEditors.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "60e09120",
      "interpretation": {
        "sig": "60e09120",
        "summary": "Replaces the list of people allowed to edit a template, controlling who can open it in the collaborative editor.",
        "models": [
          {
            "model": "TemplateEditor",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.template.lawyer.updateTemplateInfo",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.template.lawyer.updateTemplateInfo",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "templateEditProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "UpdateTemplateInfoInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/template/procedures/lawyer/updateTemplateInfo.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/procedures/lawyer/updateTemplateInfo.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/template/router.ts",
        "line": 39,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/router.ts#L39"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.updateTemplateInfo",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:template.updateTemplateInfo",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/updateTemplateInfo.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "849db84d",
      "interpretation": {
        "sig": "849db84d",
        "summary": "Updates a template's name, description, or other metadata fields.",
        "models": [
          {
            "model": "Template",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.template.lawyer.updateTemplateStatus",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.template.lawyer.updateTemplateStatus",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "templateEditProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "UpdateTemplateStatusInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/template/procedures/lawyer/updateTemplateStatus.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/procedures/lawyer/updateTemplateStatus.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/template/router.ts",
        "line": 40,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/router.ts#L40"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.updateTemplateStatus",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:template.updateTemplateStatus",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/updateTemplateStatus.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "46910f8f",
      "interpretation": {
        "sig": "46910f8f",
        "summary": "Changes a template's lifecycle status, for example moving it between `DRAFT`, `PUBLISHED`, or `ARCHIVED`.",
        "models": [
          {
            "model": "Template",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.template.lawyer.addTemplateCategory",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.template.lawyer.addTemplateCategory",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "templateEditProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/template/procedures/lawyer/addTemplateCategory.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/procedures/lawyer/addTemplateCategory.mutation.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/template/router.ts",
        "line": 41,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/router.ts#L41"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.addTemplateCategory",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:template.addTemplateCategory",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/addTemplateCategory.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "db746863",
      "interpretation": {
        "sig": "db746863",
        "summary": "Adds a category tag to a template, so it appears grouped correctly in the template library. The server computes the caller's actor scopes from their firm and identity rather than trusting the client.",
        "models": [
          {
            "model": "Template",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.template.lawyer.removeTemplateCategory",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.template.lawyer.removeTemplateCategory",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "templateEditProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "RemoveTemplateCategoryInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/template/procedures/lawyer/removeTemplateCategory.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/procedures/lawyer/removeTemplateCategory.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/template/router.ts",
        "line": 42,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/router.ts#L42"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.removeTemplateCategory",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:template.removeTemplateCategory",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/removeTemplateCategory.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "69f40dde",
      "interpretation": {
        "sig": "69f40dde",
        "summary": "Lets a firm lawyer delete a template category from their firm's document templates, removing it as an organizing tag for templates. Delegates entirely to `content-service`, which does the actual write.",
        "models": [
          {
            "model": "TemplateCategory",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.template.lawyer.categories.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.template.lawyer.categories.list",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ListTemplateCategoriesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/template/procedures/lawyer/listTemplateCategories.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/procedures/lawyer/listTemplateCategories.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/template/router.ts",
        "line": 44,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/router.ts#L44"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.categories.list",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:template.categories.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/listTemplateCategories.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "7bae8f99",
      "interpretation": {
        "sig": "7bae8f99",
        "summary": "Lists the template categories a firm has set up for organizing its document templates.",
        "models": [
          {
            "model": "TemplateCategory",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.template.lawyer.categories.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.template.lawyer.categories.create",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CreateTemplateCategoryInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/template/procedures/lawyer/createTemplateCategory.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/procedures/lawyer/createTemplateCategory.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/template/router.ts",
        "line": 45,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/router.ts#L45"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.categories.create",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:template.categories.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/createTemplateCategory.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "dc24dc86",
      "interpretation": {
        "sig": "dc24dc86",
        "summary": "Lets a firm lawyer create a new template category to organize the firm's document templates. Delegates the write to `content-service`.",
        "models": [
          {
            "model": "TemplateCategory",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.template.lawyer.categories.rename",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.template.lawyer.categories.rename",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "RenameTemplateCategoryInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/template/procedures/lawyer/renameTemplateCategory.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/procedures/lawyer/renameTemplateCategory.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/template/router.ts",
        "line": 46,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/router.ts#L46"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.categories.rename",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:template.categories.rename",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/renameTemplateCategory.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "58746084",
      "interpretation": {
        "sig": "58746084",
        "summary": "Lets a firm lawyer rename an existing template category. Delegates the write to `content-service`.",
        "models": [
          {
            "model": "TemplateCategory",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.template.lawyer.categories.softDelete",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.template.lawyer.categories.softDelete",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "SoftDeleteTemplateCategoryInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/template/procedures/lawyer/softDeleteTemplateCategory.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/procedures/lawyer/softDeleteTemplateCategory.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/template/router.ts",
        "line": 47,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/template/router.ts#L47"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "template.categories.softDelete",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:template.categories.softDelete",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/template/procedures/softDeleteTemplateCategory.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "efde2a3b",
      "interpretation": {
        "sig": "efde2a3b",
        "summary": "Lets a firm lawyer soft-delete a template category, marking it removed without hard-deleting the record. Delegates the write to `content-service`.",
        "models": [
          {
            "model": "TemplateCategory",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.form.lawyer.listFirmForms",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.form.lawyer.listFirmForms",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/form/procedures/lawyer/listFirmForms.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/form/procedures/lawyer/listFirmForms.query.ts#L4"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/form/router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/form/router.ts#L8"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "form.listFirmForms",
            "kind": "read",
            "inferred": false,
            "targetId": "content-service:form.listFirmForms",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/form/procedures/listFirmForms.query.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "cb6678ce",
      "interpretation": {
        "sig": "cb6678ce",
        "summary": "Lists the forms belonging to the calling lawyer's firm. The firm scope is taken from the firm-context middleware, not from client input, so a lawyer can only see their own firm's forms.",
        "models": [
          {
            "model": "Form",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.form.lawyer.updateFirmFormJurisdictions",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.form.lawyer.updateFirmFormJurisdictions",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "UpdateFirmFormJurisdictionsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/form/procedures/lawyer/updateFirmFormJurisdictions.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/form/procedures/lawyer/updateFirmFormJurisdictions.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/form/router.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/form/router.ts#L9"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "form.updateFirmFormJurisdictions",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:form.updateFirmFormJurisdictions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/form/procedures/updateFirmFormJurisdictions.mutation.ts#L6",
            "domain": "content"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "1d54e6a9",
      "interpretation": {
        "sig": "1d54e6a9",
        "summary": "Lets a firm lawyer update which jurisdictions a firm form is available in. Delegates the write to `content-service`.",
        "models": [
          {
            "model": "Form",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.form.lawyer.addFirmFormCategory",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.form.lawyer.addFirmFormCategory",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "AddFirmFormCategoryInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/form/procedures/lawyer/addFirmFormCategory.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/form/procedures/lawyer/addFirmFormCategory.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/form/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/form/router.ts#L10"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "form.addFirmFormCategory",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:form.addFirmFormCategory",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/form/procedures/addFirmFormCategory.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "7a776db7",
      "interpretation": {
        "sig": "7a776db7",
        "summary": "Lets a firm lawyer tag a firm form with a category. Delegates the write to `content-service`.",
        "models": [
          {
            "model": "Form",
            "service": "content-service"
          },
          {
            "model": "FormCategory",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:content.form.lawyer.removeFirmFormCategory",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "content.form.lawyer.removeFirmFormCategory",
      "module": "content",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "RemoveFirmFormCategoryInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/content/form/procedures/lawyer/removeFirmFormCategory.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/form/procedures/lawyer/removeFirmFormCategory.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/content/form/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/content/form/router.ts#L11"
      },
      "hops": {
        "direct": 1,
        "services": [
          "content-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "content-service",
            "path": "form.removeFirmFormCategory",
            "kind": "write",
            "inferred": false,
            "targetId": "content-service:form.removeFirmFormCategory",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/content-service/src/domains/form/procedures/removeFirmFormCategory.mutation.ts#L5",
            "domain": "content"
          }
        ]
      },
      "domain": "content",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "515631f2",
      "interpretation": {
        "sig": "515631f2",
        "summary": "Lets a firm lawyer remove a category tag from a firm form. Delegates the write to `content-service`.",
        "models": [
          {
            "model": "Form",
            "service": "content-service"
          },
          {
            "model": "FormCategory",
            "service": "content-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:email.lawyer.drafts.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.drafts.create",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CreateMessageDraftInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/drafts/createMessageDraft.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/drafts/createMessageDraft.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 49,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L49"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "drafts.create",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:drafts.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/drafts/createMessageDraft.mutation.ts#L5",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "85ca341d",
      "interpretation": {
        "sig": "85ca341d",
        "summary": "Lets a lawyer create a new email draft (subject, body, recipients) by delegating straight to the email service, which does the write.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.lawyer.drafts.createAttachment",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.drafts.createAttachment",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CreateMessageDraftAttachmentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/drafts/createMessageDraftAttachment.mutation.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/drafts/createMessageDraftAttachment.mutation.ts#L15"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 50,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L50"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "drafts.createAttachment",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:drafts.createAttachment",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/drafts/createMessageDraftAttachment.mutation.ts#L5",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4a5148d6",
      "interpretation": {
        "sig": "4a5148d6",
        "summary": "Attaches a file to an existing draft. Passes the file buffer, name, size and content type through to the email service to store.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.lawyer.drafts.createFromMessage",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.drafts.createFromMessage",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CreateMessageDraftFromMessageInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/drafts/createMessageDraftFromMessage.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/drafts/createMessageDraftFromMessage.mutation.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 51,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L51"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "drafts.createFromMessage",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:drafts.createFromMessage",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/drafts/createMessageDraftFromMessage.mutation.ts#L10",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7dd5f8ec",
      "interpretation": {
        "sig": "7dd5f8ec",
        "summary": "Creates a reply draft seeded from an existing message (and optionally scoped to a matter), delegating creation to the email service.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.lawyer.drafts.delete",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.drafts.delete",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/drafts/deleteMessageDraft.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/drafts/deleteMessageDraft.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 52,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L52"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "drafts.delete",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:drafts.delete",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/drafts/deleteMessageDraft.mutation.ts#L5",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "593f054",
      "interpretation": {
        "sig": "593f054",
        "summary": "Deletes a draft by id via the email service.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.lawyer.drafts.deleteAttachment",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.drafts.deleteAttachment",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "DeleteMessageDraftAttachmentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/drafts/deleteMessageDraftAttachment.mutation.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/drafts/deleteMessageDraftAttachment.mutation.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 53,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L53"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "drafts.deleteAttachment",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:drafts.deleteAttachment",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/drafts/deleteMessageDraftAttachment.mutation.ts#L9",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ed12d6bb",
      "interpretation": {
        "sig": "ed12d6bb",
        "summary": "Removes an attachment from a draft via the email service.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.lawyer.drafts.get",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.drafts.get",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "GetMessageDraftInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/drafts/getMessageDraft.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/drafts/getMessageDraft.query.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 54,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L54"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "drafts.get",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:drafts.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/drafts/getMessageDraft.query.ts#L9",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "d0a6702c",
      "interpretation": {
        "sig": "d0a6702c",
        "summary": "Fetches a single draft by id from the email service. Read-only.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.lawyer.drafts.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.drafts.list",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ListMessageDraftsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/drafts/listMessageDrafts.query.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/drafts/listMessageDrafts.query.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 55,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L55"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "drafts.list",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:drafts.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/drafts/listMessageDrafts.query.ts#L10",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "61123c91",
      "interpretation": {
        "sig": "61123c91",
        "summary": "Lists a lawyer's drafts, optionally filtered by matter and ordered oldest-first. Read-only.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.lawyer.drafts.send",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.drafts.send",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/drafts/sendMessageDraft.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/drafts/sendMessageDraft.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 56,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L56"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "drafts.send",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:drafts.send",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/drafts/sendMessageDraft.mutation.ts#L12",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [
        "email-service/sent-message.settle-body"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "94995602",
      "interpretation": {
        "sig": "94995602",
        "summary": "Sends a draft. The email service turns the draft into a sent message, and the `email-service/sent-message.settle-body` Inngest function fires afterward to finalize the message body.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.lawyer.drafts.update",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.drafts.update",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "UpdateMessageDraftInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/drafts/updateMessageDraft.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/drafts/updateMessageDraft.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 57,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L57"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "drafts.update",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:drafts.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/drafts/updateMessageDraft.mutation.ts#L5",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "894305a6",
      "interpretation": {
        "sig": "894305a6",
        "summary": "Updates a draft's fields (subject, body, recipients, etc) via the email service.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.lawyer.folders.getMessageFolders",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.folders.getMessageFolders",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/folders/getMessageFolders.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/folders/getMessageFolders.query.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 60,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L60"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "folders.getMessageFolders",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:folders.getMessageFolders",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/folders/getMessageFolders.query.ts#L6",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "4fecc0f7",
      "interpretation": {
        "sig": "4fecc0f7",
        "summary": "Lists a lawyer's email folders, optionally scoped to a matter and excluding given folder types. Read-only.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.lawyer.messages.ignoreThreadForFiling",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.messages.ignoreThreadForFiling",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/messages/ignoreThreadForFiling.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/messages/ignoreThreadForFiling.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 63,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L63"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "messages.ignoreThreadForFiling",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:messages.ignoreThreadForFiling",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/ignoreThreadForFiling.mutation.ts#L10",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1a471551",
      "interpretation": {
        "sig": "1a471551",
        "summary": "Marks an email thread as ignored for matter-filing purposes, so it stops being suggested as unfiled. Writes via the email service, scoped to the caller's identity.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.lawyer.messages.updateMessageUnreadStatus",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.messages.updateMessageUnreadStatus",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/messages/updateMessageUnreadStatus.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/messages/updateMessageUnreadStatus.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 64,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L64"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "messages.updateMessageUnreadStatus",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:messages.updateMessageUnreadStatus",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/updateMessageUnreadStatus.mutation.ts#L11",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "ede7f768",
      "interpretation": {
        "sig": "ede7f768",
        "summary": "Marks a single message read or unread for the caller. No app currently calls this (usage detected only via services), so it may be dead from the UI's perspective.",
        "flags": [
          "looks unused from apps"
        ]
      }
    },
    {
      "id": "platform-api:email.lawyer.messages.updateThreadReadStatus",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.messages.updateThreadReadStatus",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/messages/updateThreadReadStatus.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/messages/updateThreadReadStatus.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 65,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L65"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "messages.updateThreadReadStatus",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:messages.updateThreadReadStatus",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/updateThreadReadStatus.mutation.ts#L11",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "eb0e8b06",
      "interpretation": {
        "sig": "eb0e8b06",
        "summary": "Marks one or more threads read or unread in bulk for the caller, via the email service.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.lawyer.messages.personal.createAttachmentUrl",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.messages.personal.createAttachmentUrl",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/messages/createPersonalAttachmentUrl.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/messages/createPersonalAttachmentUrl.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 67,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L67"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "messages.createAttachmentUrl",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:messages.createAttachmentUrl",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/createAttachmentUrl.mutation.ts#L11",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "40009c2b",
      "interpretation": {
        "sig": "40009c2b",
        "summary": "Generates a download or view URL for a message attachment, scoped to the caller's identity. Named a mutation because it's a side-effecting action (URL generation), not because it persists new data.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.lawyer.messages.personal.getAttachmentUrls",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.messages.personal.getAttachmentUrls",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/messages/getPersonalAttachmentUrls.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/messages/getPersonalAttachmentUrls.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 68,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L68"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "messages.getAttachmentUrls",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:messages.getAttachmentUrls",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/getAttachmentUrls.query.ts#L11",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [
        "email-service/attachment.uploadRequested"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "32993a6a",
      "interpretation": {
        "sig": "32993a6a",
        "summary": "Fetches attachment URLs for a message (optionally just inline ones), scoped to the caller's identity. Read-only; the `email-service/attachment.uploadRequested` Inngest event fires alongside it but is a trigger, not something this query writes.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.lawyer.messages.personal.getMessage",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.messages.personal.getMessage",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/messages/getPersonalMessage.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/messages/getPersonalMessage.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 69,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L69"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "messages.getMessage",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:messages.getMessage",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/getMessage.query.ts#L10",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c150687f",
      "interpretation": {
        "sig": "c150687f",
        "summary": "Fetches a single email message by id, scoped to the caller's identity. Read-only.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.lawyer.messages.personal.getThreadMessages",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.messages.personal.getThreadMessages",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/messages/getPersonalThreadMessages.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/messages/getPersonalThreadMessages.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 70,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L70"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "messages.getThreadMessages",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:messages.getThreadMessages",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/getThreadMessages.query.ts#L13",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "2a15abda",
      "interpretation": {
        "sig": "2a15abda",
        "summary": "Lists the messages in one or more of a lawyer's own personal email threads (paginated, by Nylas thread ID), delegating straight to `email-service`.",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:email.lawyer.messages.personal.getThreads",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.messages.personal.getThreads",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/messages/getPersonalThreads.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/messages/getPersonalThreads.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 71,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L71"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "messages.getThreads",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:messages.getThreads",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/getThreads.query.ts#L10",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "e94a47c1",
      "interpretation": {
        "sig": "e94a47c1",
        "summary": "Lists a lawyer's personal email threads for a given mailbox folder, with options to filter unfiled-only threads and page through results.",
        "models": [
          {
            "model": "Thread",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:email.lawyer.messages.personal.deleteMessage",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.messages.personal.deleteMessage",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/messages/deletePersonalMessage.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/messages/deletePersonalMessage.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 72,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L72"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "messages.deleteMessage",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:messages.deleteMessage",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/deleteMessage.mutation.ts#L10",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "5942121b",
      "interpretation": {
        "sig": "5942121b",
        "summary": "Deletes one message from a lawyer's personal mailbox by ID via `email-service`.",
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "platform-api:email.lawyer.messages.personal.deleteThread",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.messages.personal.deleteThread",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/messages/deletePersonalThread.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/messages/deletePersonalThread.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 73,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L73"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "messages.deleteThread",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:messages.deleteThread",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/deleteThread.mutation.ts#L11",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "635627c6",
      "interpretation": {
        "sig": "635627c6",
        "summary": "Deletes (or, with `softDelete`, archives) a whole personal email thread for the calling lawyer."
      }
    },
    {
      "id": "platform-api:email.lawyer.messages.personal.restoreThread",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.messages.personal.restoreThread",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/messages/restorePersonalThread.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/messages/restorePersonalThread.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 74,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L74"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "messages.restoreThread",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:messages.restoreThread",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/restoreThread.mutation.ts#L10",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "46bd0aef",
      "interpretation": {
        "sig": "46bd0aef",
        "summary": "Restores a previously deleted personal email thread back into the lawyer's mailbox."
      }
    },
    {
      "id": "platform-api:email.lawyer.messages.personal.searchThreads",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.messages.personal.searchThreads",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "SearchThreadsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/messages/searchPersonalThreads.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/messages/searchPersonalThreads.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 75,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L75"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "messages.searchThreads",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:messages.searchThreads",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/messages/searchThreads.query.ts#L10",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "a13f3313",
      "interpretation": {
        "sig": "a13f3313",
        "summary": "Searches the lawyer's personal email threads and returns a paginated list of matches, using `email-service`'s search input/output schemas directly."
      }
    },
    {
      "id": "platform-api:email.lawyer.messages.matter.createAttachmentUrl",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.messages.matter.createAttachmentUrl",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/messages/createMatterAttachmentUrl.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/messages/createMatterAttachmentUrl.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 78,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L78"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "matter.createAttachmentUrl",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:matter.createAttachmentUrl",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/createAttachmentUrl.mutation.ts#L11",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "48742f74",
      "interpretation": {
        "sig": "48742f74",
        "summary": "Generates a download (or inline view) URL for an email attachment filed against a matter, scoped to that matter."
      }
    },
    {
      "id": "platform-api:email.lawyer.messages.matter.getAttachmentUrls",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.messages.matter.getAttachmentUrls",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/messages/getMatterAttachmentUrls.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/messages/getMatterAttachmentUrls.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 79,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L79"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "matter.getAttachmentUrls",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:matter.getAttachmentUrls",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/getAttachmentUrls.query.ts#L11",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [
        "email-service/attachment.uploadRequested"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "dc26697",
      "interpretation": {
        "sig": "dc26697",
        "summary": "Returns view/download URLs for the attachments on a matter-filed message; it only reads, it does not itself request the upload even though an `attachment.uploadRequested` Inngest trigger is associated with this domain area.",
        "flags": [
          "read-that-triggers"
        ]
      }
    },
    {
      "id": "platform-api:email.lawyer.messages.matter.getMessage",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.messages.matter.getMessage",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/messages/getMatterMessage.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/messages/getMatterMessage.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 80,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L80"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "matter.getMessage",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:matter.getMessage",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/getMessage.query.ts#L10",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6dc0190a",
      "interpretation": {
        "sig": "6dc0190a",
        "summary": "Fetches a single email message that has been filed under a specific matter."
      }
    },
    {
      "id": "platform-api:email.lawyer.messages.matter.getThreadMessages",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.messages.matter.getThreadMessages",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/messages/getMatterThreadMessages.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/messages/getMatterThreadMessages.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 81,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L81"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "matter.getThreadMessages",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:matter.getThreadMessages",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/getThreadMessages.query.ts#L16",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "fa9c4363",
      "interpretation": {
        "sig": "fa9c4363",
        "summary": "Lists the messages in one or more email threads filed under a specific matter, paginated."
      }
    },
    {
      "id": "platform-api:email.lawyer.messages.matter.getThreads",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.messages.matter.getThreads",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/messages/getMatterThreads.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/messages/getMatterThreads.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 82,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L82"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "matter.getThreads",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:matter.getThreads",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/getThreads.query.ts#L13",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "62e64088",
      "interpretation": {
        "sig": "62e64088",
        "summary": "Lists the email threads filed under a specific matter, paginated by folder and other filters."
      }
    },
    {
      "id": "platform-api:email.lawyer.matter.updateMessagesMatter",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.matter.updateMessagesMatter",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/matter/updateMessagesMatter.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/matter/updateMessagesMatter.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 86,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L86"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "matter.updateMessagesMatter",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:matter.updateMessagesMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/updateMessagesMatter.mutation.ts#L13",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [
        "email-service/attachment.refiled",
        "email-service/attachment.removed",
        "email-service/message.filed",
        "email-service/message.refiled",
        "email-service/message.removed"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "666c0e2c",
      "interpretation": {
        "sig": "666c0e2c",
        "summary": "Re-files a set of individual messages (and optionally their attachments) from one matter to another, or unfiles them if `newMatterId` is null. Filing changes fire `email-service` Inngest events (`message.filed`, `message.refiled`, `message.removed`, and matching attachment events).",
        "models": [
          {
            "model": "Message",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:email.lawyer.matter.updateThreadMatter",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.matter.updateThreadMatter",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/matter/updateThreadMatter.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/matter/updateThreadMatter.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 87,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L87"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "matter.updateThreadMatter",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:matter.updateThreadMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/updateThreadMatter.mutation.ts#L13",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [
        "email-service/attachment.refiled",
        "email-service/attachment.removed",
        "email-service/message.filed",
        "email-service/message.refiled",
        "email-service/message.removed"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "436c07b0",
      "interpretation": {
        "sig": "436c07b0",
        "summary": "Re-files a whole email thread (and optionally its attachments) from one matter to another, or unfiles it if `newMatterId` is null. Same filing events fire as for the per-message version.",
        "models": [
          {
            "model": "Thread",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:email.lawyer.grants.getGrant",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.grants.getGrant",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/getGrantForPerson.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/getGrantForPerson.query.ts#L4"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 90,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L90"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "grants.getForPerson",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:grants.getForPerson",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/grants/getPersonGrant.query.ts#L5",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "bff12715",
      "interpretation": {
        "sig": "bff12715",
        "summary": "Returns the calling lawyer's connected email account (Nylas grant) status: whether one exists and, if so, its address, display name, and backfill progress. Trims the raw `email-service` response down to a small public shape."
      }
    },
    {
      "id": "platform-api:email.lawyer.grants.getContacts",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.grants.getContacts",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/grants/getGrantContacts.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/grants/getGrantContacts.query.ts#L4"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 91,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L91"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "grants.getContacts",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:grants.getContacts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/grants/getGrantContacts.query.ts#L9",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "dcda8f46",
      "interpretation": {
        "sig": "dcda8f46",
        "summary": "Returns the contacts synced from the lawyer's connected email account."
      }
    },
    {
      "id": "platform-api:email.lawyer.grants.requestConnectVerification",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.grants.requestConnectVerification",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/grants/requestConnectVerification.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/grants/requestConnectVerification.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 92,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L92"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "grants.requestConnectVerification",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:grants.requestConnectVerification",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/grants/requestConnectVerification.mutation.ts#L5",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "3da10de",
      "interpretation": {
        "sig": "3da10de",
        "summary": "Kicks off verification for connecting a lawyer's email address to the firm, sending the request to `email-service` with the lawyer's identity and firm ID."
      }
    },
    {
      "id": "platform-api:email.lawyer.grants.confirmConnectVerification",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "email.lawyer.grants.confirmConnectVerification",
      "module": "email",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/lawyer/grants/confirmConnectVerification.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/lawyer/grants/confirmConnectVerification.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 93,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L93"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "grants.confirmConnectVerification",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:grants.confirmConnectVerification",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/grants/confirmConnectVerification.mutation.ts#L5",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [
        "email-service/grant.messageBackfill.requested"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "8e4c415b",
      "interpretation": {
        "sig": "8e4c415b",
        "summary": "Lets a signed-in lawyer submit the verification code from their inbox provider to finish connecting their email account, and kicks off a backfill of past messages once confirmed.",
        "flags": []
      }
    },
    {
      "id": "platform-api:outlook.email.fileMessages",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "outlook.email.fileMessages",
      "module": "outlook",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "outlook-addin",
        "member": "Outlook add-in",
        "kind": "outlook",
        "builder": "outlookProcedure",
        "base": "outlookProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/outlook/procedures/fileMessages.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/outlook/procedures/fileMessages.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/outlook/router.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/outlook/router.ts#L9"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "outlook.fileMessages",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:outlook.fileMessages",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/outlook/fileMessages.mutation.ts#L26",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [
        "email-service/attachment.refiled",
        "email-service/attachment.removed",
        "email-service/message.filed",
        "email-service/message.refiled",
        "email-service/message.removed",
        "matter-service/email.matched"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "f7a16d20",
      "interpretation": {
        "sig": "f7a16d20",
        "summary": "Files selected email messages and attachments from an Outlook thread onto a matter, delegating the actual write to `email-service`. Used by the Outlook add-in when a solicitor attaches an email thread to a matter.",
        "models": [
          {
            "model": "Email/Attachment filing",
            "service": "email-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:outlook.email.getThreadMessagePreviews",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "outlook.email.getThreadMessagePreviews",
      "module": "outlook",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "outlook-addin",
        "member": "Outlook add-in",
        "kind": "outlook",
        "builder": "outlookProcedure",
        "base": "outlookProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/outlook/procedures/getThreadMessagePreviews.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/outlook/procedures/getThreadMessagePreviews.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/outlook/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/outlook/router.ts#L10"
      },
      "hops": {
        "direct": 2,
        "services": [
          "email-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "outlook.getThreadMessagePreviews",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:outlook.getThreadMessagePreviews",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/outlook/getOutlookThreadMessagePreviews.query.ts#L14",
            "domain": "email"
          },
          {
            "service": "matter-service",
            "path": "internal.listMatters",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.listMatters",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/listMatters.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "ac2b9ae7",
      "interpretation": {
        "sig": "ac2b9ae7",
        "summary": "Returns preview data for messages in an Outlook thread, enriched with the linked matter's human-readable ID and status where a message has already been filed to one.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:outlook.email.unfileMessages",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "outlook.email.unfileMessages",
      "module": "outlook",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "outlook-addin",
        "member": "Outlook add-in",
        "kind": "outlook",
        "builder": "outlookProcedure",
        "base": "outlookProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/outlook/procedures/unfileMessages.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/outlook/procedures/unfileMessages.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/outlook/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/outlook/router.ts#L11"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "outlook.unfileMessages",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:outlook.unfileMessages",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/outlook/unfileMessages.mutation.ts#L23",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [
        "email-service/attachment.refiled",
        "email-service/attachment.removed",
        "email-service/message.filed",
        "email-service/message.refiled",
        "email-service/message.removed"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "f21fe3b9",
      "interpretation": {
        "sig": "f21fe3b9",
        "summary": "Removes previously filed messages and attachments from a matter via `email-service`. No caller currently reaches this procedure from the app or another service, so it looks unused despite being a live write path.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:outlook.matter.getMatterFileFolders",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "outlook.matter.getMatterFileFolders",
      "module": "outlook",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "outlook-addin",
        "member": "Outlook add-in",
        "kind": "outlook",
        "builder": "outlookProcedure",
        "base": "outlookProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/outlook/procedures/getMatterFileFolders.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/outlook/procedures/getMatterFileFolders.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/outlook/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/outlook/router.ts#L14"
      },
      "hops": {
        "direct": 2,
        "services": [
          "email-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "outlook.getPersonId",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:outlook.getPersonId",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/outlook/getOutlookPersonId.query.ts#L12",
            "domain": "email"
          },
          {
            "service": "matter-service",
            "path": "matterFileFolder.internal.listMatterFileFoldersWithAuth",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterFileFolder.internal.listMatterFileFoldersWithAuth",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/procedures/internal/listMatterFileFoldersWithAuth.query.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "610d8cb1",
      "interpretation": {
        "sig": "610d8cb1",
        "summary": "Looks up the file folders configured on a matter that the current Outlook user is authorised to see, resolving the user's person ID first and then listing folders scoped to that access.",
        "models": [
          {
            "model": "MatterFileFolder",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:outlook.matter.getThreadMatters",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "outlook.matter.getThreadMatters",
      "module": "outlook",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "outlook-addin",
        "member": "Outlook add-in",
        "kind": "outlook",
        "builder": "outlookProcedure",
        "base": "outlookProcedure",
        "middlewares": []
      },
      "middleware": [],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/outlook/procedures/getThreadMatters.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/outlook/procedures/getThreadMatters.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/outlook/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/outlook/router.ts#L15"
      },
      "hops": {
        "direct": 2,
        "services": [
          "email-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "email-service",
            "path": "outlook.getEmailAddressesInvlovedInThread",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:outlook.getEmailAddressesInvlovedInThread",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/outlook/getOutlookEmailAddressesInvlovedInThread.query.ts#L13",
            "domain": "email"
          },
          {
            "service": "email-service",
            "path": "outlook.getPersonId",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:outlook.getPersonId",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/outlook/getOutlookPersonId.query.ts#L12",
            "domain": "email"
          },
          {
            "service": "matter-service",
            "path": "matterParticipant.internal.getMattersForPersonWithParticipantsWithEmail",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterParticipant.internal.getMattersForPersonWithParticipantsWithEmail",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/internal/getMattersForPersonWithParticipantsWithEmail.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "internal.listPersonMatters",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.listPersonMatters",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/listPersonMatters.query.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "email",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "134cca5c",
      "interpretation": {
        "sig": "134cca5c",
        "summary": "Suggests which matters an Outlook email thread most likely belongs to, ranking matters whose participants match the thread's email addresses above the user's other matters (sorted by recent activity).",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:feedback.lawyer.sendFeedback",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "feedback.lawyer.sendFeedback",
      "module": "feedback",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/feedback/procedures/lawyer/sendFeedback.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/feedback/procedures/lawyer/sendFeedback.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/feedback/modules/router.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/feedback/modules/router.ts#L6"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "internal.listPersonMatters",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.listPersonMatters",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/listPersonMatters.query.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "people",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "f51ae904",
      "interpretation": {
        "sig": "f51ae904",
        "summary": "Lets a logged-in firm member submit free-text feedback, which posts a Slack message to the feedback channel and, if an Intercom market can be resolved for their identity, opens an Intercom ticket. It writes nothing to the database: no feedback row is persisted anywhere.",
        "flags": [
          "read-that-writes",
          "no persistence"
        ]
      }
    },
    {
      "id": "platform-api:transaction.calculateTotal",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "transaction.calculateTotal",
      "module": "transaction",
      "roleFolder": "shared",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "apiUserIdentityProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "priceInstructionSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/shared/calculateTotal.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/shared/calculateTotal.query.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L35"
      },
      "hops": {
        "direct": 1,
        "services": [
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "calculateTotal",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:calculateTotal",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/calculateTotal.query.ts#L10",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "34af8658",
      "interpretation": {
        "sig": "34af8658",
        "summary": "Given a set of price instructions, returns the calculated total (amounts, tax, fees) for a transaction without creating or changing anything.",
        "models": [
          {
            "model": "transaction-service:calculateTotal",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.lawyer.listTransactionIntents",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "transaction.lawyer.listTransactionIntents",
      "module": "transaction",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "ListTransactionsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/lawyer/listTransactionIntents.query.ts",
        "line": 83,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/lawyer/listTransactionIntents.query.ts#L83"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L37"
      },
      "hops": {
        "direct": 1,
        "services": [
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "f8903f7d",
      "interpretation": {
        "sig": "f8903f7d",
        "summary": "Lists transaction intents (client/firm money transfers) for a matter, filtered by status or IDs, with sender and receiver details attached for display in the firm's billing view.",
        "models": [
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.lawyer.listTransactionTemplates",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "transaction.lawyer.listTransactionTemplates",
      "module": "transaction",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/lawyer/listTransactionTemplates.query.ts",
        "line": 42,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/lawyer/listTransactionTemplates.query.ts#L42"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 38,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L38"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "7932fafd",
      "interpretation": {
        "sig": "7932fafd",
        "summary": "Returns a hardcoded list of three sample bank-account templates (HMRC, Court Fees, a personal account) with fake account numbers; nothing in the codebase calls it.",
        "flags": [
          "usage.dead",
          "hardcoded-fixture-data"
        ]
      }
    },
    {
      "id": "platform-api:transaction.lawyer.listReconciliations",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "transaction.lawyer.listReconciliations",
      "module": "transaction",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/lawyer/listReconciliations.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/lawyer/listReconciliations.query.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 39,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L39"
      },
      "hops": {
        "direct": 3,
        "services": [
          "transaction-service",
          "payment-service",
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "reconciliation.list",
            "kind": "read",
            "inferred": false,
            "targetId": "payment-service:reconciliation.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/reconciliation/procedures/listReconciliations.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "31d7015e",
      "interpretation": {
        "sig": "31d7015e",
        "summary": "Looks up bank reconciliations tied to an invoice (or by explicit reconciliation IDs) and attaches the name of the person who reconciled each one, but nothing calls this procedure.",
        "flags": [
          "usage.dead"
        ],
        "models": [
          {
            "model": "Reconciliation",
            "service": "payment-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.lawyer.listLedgerInvoiceIds",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "transaction.lawyer.listLedgerInvoiceIds",
      "module": "transaction",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/lawyer/listLedgerInvoiceIds.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/lawyer/listLedgerInvoiceIds.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 40,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L40"
      },
      "hops": {
        "direct": 2,
        "services": [
          "payment-service",
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "payment-service",
            "path": "reconciliation.list",
            "kind": "read",
            "inferred": false,
            "targetId": "payment-service:reconciliation.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/reconciliation/procedures/listReconciliations.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "64699450",
      "interpretation": {
        "sig": "64699450",
        "summary": "Given a list of reconciliation IDs, resolves and returns the invoice ID tied to each one (via its underlying transaction intent), for matching bank ledger entries back to invoices.",
        "models": [
          {
            "model": "Reconciliation",
            "service": "payment-service"
          },
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.lawyer.requestClientFunds",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "transaction.lawyer.requestClientFunds",
      "module": "transaction",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "RequestClientFundsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/lawyer/requestClientFunds.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/lawyer/requestClientFunds.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 41,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L41"
      },
      "hops": {
        "direct": 3,
        "services": [
          "matter-service",
          "transaction-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/getMatter.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "transaction-service",
            "path": "getIdentityCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getIdentityCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getIdentityCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "invoice.create",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:invoice.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/createInvoice.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "invoice.set",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:invoice.set",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/setInvoice.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "getCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getCounterparty.query.ts#L9",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.getOrCreateDefault",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.getOrCreateDefault",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L95",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.create",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/createTransactionIntent.mutation.ts#L8",
            "domain": "money"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "494fe6f8",
      "interpretation": {
        "sig": "494fe6f8",
        "summary": "Lets a lawyer create or update a `CLIENT_FUNDS` invoice for a matter's lead client and, if the invoice status is `PENDING`, also creates a matching transaction intent so the client can be charged.",
        "models": [
          {
            "model": "Invoice",
            "service": "transaction-service"
          },
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.lawyer.raiseBill",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "transaction.lawyer.raiseBill",
      "module": "transaction",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "RaiseBillInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/lawyer/raiseBill.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/lawyer/raiseBill.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 42,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L42"
      },
      "hops": {
        "direct": 3,
        "services": [
          "matter-service",
          "transaction-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/getMatter.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "invoice.create",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:invoice.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/createInvoice.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "invoice.set",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:invoice.set",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/setInvoice.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "getCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getCounterparty.query.ts#L9",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.getOrCreateDefault",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.getOrCreateDefault",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L95",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.create",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/createTransactionIntent.mutation.ts#L8",
            "domain": "money"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "72fdb96a",
      "interpretation": {
        "sig": "72fdb96a",
        "summary": "Lets a lawyer create or update a `BILL` invoice from the firm to a chosen counterparty and, when the invoice is `PENDING`, also creates the transaction intent to collect payment.",
        "models": [
          {
            "model": "Invoice",
            "service": "transaction-service"
          },
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.lawyer.releaseFunds",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "transaction.lawyer.releaseFunds",
      "module": "transaction",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "ReleaseFundsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/lawyer/releaseFunds.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/lawyer/releaseFunds.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 43,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L43"
      },
      "hops": {
        "direct": 3,
        "services": [
          "matter-service",
          "transaction-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/getMatter.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "getOrCreateExternalCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:getOrCreateExternalCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getOrCreateExternalCounterparty.mutation.ts#L5",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "getCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getCounterparty.query.ts#L9",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.getOrCreateDefault",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.getOrCreateDefault",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L95",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.create",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/createTransactionIntent.mutation.ts#L8",
            "domain": "money"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "fc797282",
      "interpretation": {
        "sig": "fc797282",
        "summary": "Lets a lawyer pay out firm funds to an external individual or company by creating (or reusing) an external counterparty with the given bank details, then creating a `PENDING` transaction intent for the payout.",
        "models": [
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.lawyer.getFirmCounterparties",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "transaction.lawyer.getFirmCounterparties",
      "module": "transaction",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "GetFirmCounterpartiesInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/lawyer/getFirmCounterparties.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/lawyer/getFirmCounterparties.query.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 44,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L44"
      },
      "hops": {
        "direct": 1,
        "services": [
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "getFirmCounterparties",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparties",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparties.query.ts#L5",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "75145821",
      "interpretation": {
        "sig": "75145821",
        "summary": "Returns the list of counterparties (payees/payers) set up for a firm, for populating selection lists when raising bills or releasing funds.",
        "models": [
          {
            "model": "Counterparty",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.lawyer.getCounterpartyDetails",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "transaction.lawyer.getCounterpartyDetails",
      "module": "transaction",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/lawyer/getCounterpartyDetails.query.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/lawyer/getCounterpartyDetails.query.ts#L15"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 45,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L45"
      },
      "hops": {
        "direct": 2,
        "services": [
          "transaction-service",
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "getCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getCounterparty.query.ts#L9",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "5d1d65a5",
      "interpretation": {
        "sig": "5d1d65a5",
        "summary": "Looks up a counterparty and resolves its display name, email, and address by fetching the underlying firm or person record; falls back to the counterparty's own stored name fields if it isn't linked to a firm or person.",
        "models": [
          {
            "model": "Counterparty",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.lawyer.generateInvoicePreviewPdf",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "transaction.lawyer.generateInvoicePreviewPdf",
      "module": "transaction",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "GenerateInvoicePreviewPdfInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/lawyer/generateInvoicePreviewPdf.mutation.ts",
        "line": 56,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/lawyer/generateInvoicePreviewPdf.mutation.ts#L56"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 46,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L46"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "752ae4d7",
      "interpretation": {
        "sig": "752ae4d7",
        "summary": "Renders a bill/invoice preview as a PDF (base64 string or buffer) from the supplied line items, totals, and party details, purely for on-screen preview before the bill is raised.",
        "flags": [
          "mutation-only-reads"
        ]
      }
    },
    {
      "id": "platform-api:reviewRequests.lawyer.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "reviewRequests.lawyer.create",
      "module": "reviewRequests",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "CreateReviewRequestInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/reviewRequests/procedures/lawyer/createReviewRequest.mutation.ts",
        "line": 36,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/reviewRequests/procedures/lawyer/createReviewRequest.mutation.ts#L36"
      },
      "router": {
        "file": "apis/platform-api/src/modules/reviewRequests/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/reviewRequests/router.ts#L12"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "work-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "reviewRequest.lawyer.create",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:reviewRequest.lawyer.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/lawyer/createReviewRequest.mutation.ts#L30",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "feeAgreement.getFeeAgreement",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.getFeeAgreement",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/getFeeAgreement.query.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "b3a045a5",
      "interpretation": {
        "sig": "b3a045a5",
        "summary": "Lets a lawyer submit a review request against a matter (e.g. a `REASSIGNMENT` or `FEE_AGREEMENT_COMPLETION` request) via `matter-service`, then sends a Slack notification for reassignment requests or for fee-agreement-completion requests that flag follow-on work.",
        "models": [
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:reviewRequests.lawyer.update",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "reviewRequests.lawyer.update",
      "module": "reviewRequests",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "UpdateReviewRequestInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/reviewRequests/procedures/lawyer/updateReviewRequest.mutation.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/reviewRequests/procedures/lawyer/updateReviewRequest.mutation.ts#L35"
      },
      "router": {
        "file": "apis/platform-api/src/modules/reviewRequests/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/reviewRequests/router.ts#L13"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "work-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "reviewRequest.lawyer.update",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:reviewRequest.lawyer.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/lawyer/updateReviewRequest.mutation.ts#L30",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "feeAgreement.getFeeAgreement",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.getFeeAgreement",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/getFeeAgreement.query.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "9f21183e",
      "interpretation": {
        "sig": "9f21183e",
        "summary": "Lets a lawyer edit an existing review request via `matter-service`, and sends a Slack follow-on-work notification (marked as an edit) when a `FEE_AGREEMENT_COMPLETION` request indicates follow-on work.",
        "models": [
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:product.lawyer.listCategories",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "product.lawyer.listCategories",
      "module": "product",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/product/procedures/lawyer/listCategories.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/product/procedures/lawyer/listCategories.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/product/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/product/router.ts#L12"
      },
      "hops": {
        "direct": 1,
        "services": [
          "product-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "product-service",
            "path": "categories.listCategoriesWithHierarchy",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:categories.listCategoriesWithHierarchy",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listCategoriesWithHierarchy.query.ts#L6",
            "domain": null
          }
        ]
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "d75efb43",
      "interpretation": {
        "sig": "d75efb43",
        "summary": "Lets a lawyer browse the legal product catalog's category tree, optionally filtered by jurisdiction and market. Pure read, delegates to `product-service`.",
        "models": [
          {
            "model": "Category",
            "service": "product-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:product.lawyer.listJurisdictions",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "product.lawyer.listJurisdictions",
      "module": "product",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/product/procedures/lawyer/listJurisdictions.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/product/procedures/lawyer/listJurisdictions.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/product/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/product/router.ts#L13"
      },
      "hops": {
        "direct": 1,
        "services": [
          "product-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "product-service",
            "path": "jurisdictions.listJurisdictions",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:jurisdictions.listJurisdictions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listJurisdictions.query.ts#L6",
            "domain": null
          }
        ]
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "88161cbc",
      "interpretation": {
        "sig": "88161cbc",
        "summary": "Returns the list of jurisdictions available for a given market, so a lawyer can pick where a product applies. Pure read, delegates to `product-service`.",
        "models": [
          {
            "model": "Jurisdiction",
            "service": "product-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:product.lawyer.listProducts",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "product.lawyer.listProducts",
      "module": "product",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/product/procedures/lawyer/listProducts.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/product/procedures/lawyer/listProducts.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/product/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/product/router.ts#L14"
      },
      "hops": {
        "direct": 1,
        "services": [
          "product-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "product-service",
            "path": "products.listProducts",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:products.listProducts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listProducts.query.ts#L5",
            "domain": null
          }
        ]
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "69f43514",
      "interpretation": {
        "sig": "69f43514",
        "summary": "Searches and filters legal products for a lawyer by category, jurisdiction, product IDs, or free-text query. Pure read, delegates to `product-service`.",
        "models": [
          {
            "model": "Product",
            "service": "product-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:product.lawyer.listProductsWithLineItems",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "product.lawyer.listProductsWithLineItems",
      "module": "product",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/product/procedures/lawyer/listProducts.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/product/procedures/lawyer/listProducts.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/product/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/product/router.ts#L15"
      },
      "hops": {
        "direct": 1,
        "services": [
          "product-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "product-service",
            "path": "products.listProducts",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:products.listProducts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listProducts.query.ts#L5",
            "domain": null
          }
        ]
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "3d037efa",
      "interpretation": {
        "sig": "3d037efa",
        "summary": "Same product search as `product.lawyer.listProducts` (same query file and service), meant to also return line items, but nothing in the apps or services calls it.",
        "models": [
          {
            "model": "Product",
            "service": "product-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:product.lawyer.getJurisdiction",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "product.lawyer.getJurisdiction",
      "module": "product",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "GetJurisdictionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/product/procedures/lawyer/getJurisdiction.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/product/procedures/lawyer/getJurisdiction.query.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/product/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/product/router.ts#L16"
      },
      "hops": {
        "direct": 1,
        "services": [
          "product-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "product-service",
            "path": "jurisdictions.getJurisdiction",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:jurisdictions.getJurisdiction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/getJurisdiction.query.ts#L9",
            "domain": null
          }
        ]
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "49d56fd",
      "interpretation": {
        "sig": "49d56fd",
        "summary": "Fetches a single jurisdiction's details by ID for a lawyer. Pure read, delegates to `product-service`.",
        "models": [
          {
            "model": "Jurisdiction",
            "service": "product-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:messaging.getMessages",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "messaging.getMessages",
      "module": "messaging",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "GetMessagesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/messaging/procedures/lawyer/getMessages.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/procedures/lawyer/getMessages.query.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/messaging/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/router.ts#L21"
      },
      "hops": {
        "direct": 1,
        "services": [
          "messaging-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "messaging-service",
            "path": "message.internal.getMessages",
            "kind": "read",
            "inferred": false,
            "targetId": "messaging-service:message.internal.getMessages",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getMessagesInternal.query.ts#L8",
            "domain": "chat"
          },
          {
            "service": "messaging-service",
            "path": "message.getMessages",
            "kind": "read",
            "inferred": false,
            "targetId": "messaging-service:message.getMessages",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getMessages.query.ts#L8",
            "domain": "chat"
          }
        ]
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "e1efbfc2",
      "interpretation": {
        "sig": "d302c019",
        "summary": "Lets a lawyer read a chat channel's messages, either as a participant or (with `can_view_all_matters` and `asObserver`) as a firm-wide observer, delegating to `messaging-service` and remapping `identityId` to `personId`. No caller found in apps or services.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:messaging.getRealtimeToken",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "messaging.getRealtimeToken",
      "module": "messaging",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "GetRealtimeTokenInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/messaging/procedures/lawyer/getRealtimeToken.query.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/procedures/lawyer/getRealtimeToken.query.ts#L12"
      },
      "router": {
        "file": "apis/platform-api/src/modules/messaging/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/router.ts#L22"
      },
      "hops": {
        "direct": 1,
        "services": [
          "messaging-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "messaging-service",
            "path": "channel.getRealtimeToken",
            "kind": "read",
            "inferred": false,
            "targetId": "messaging-service:channel.getRealtimeToken",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/channel/procedures/getRealtimeToken.query.ts#L9",
            "domain": "chat"
          }
        ]
      },
      "domain": "chat",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "8bc093b8",
      "interpretation": {
        "sig": "45f2dd7f",
        "summary": "Fetches a realtime token for a chat channel from `messaging-service` so a client can subscribe to live message updates for that channel. No caller found.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:messaging.createMessage",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "messaging.createMessage",
      "module": "messaging",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "LawyerCreateMessageInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/messaging/procedures/lawyer/createMessage.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/procedures/lawyer/createMessage.mutation.ts#L14"
      },
      "router": {
        "file": "apis/platform-api/src/modules/messaging/router.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/router.ts#L23"
      },
      "hops": {
        "direct": 1,
        "services": [
          "messaging-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "messaging-service",
            "path": "message.createMessage",
            "kind": "write",
            "inferred": false,
            "targetId": "messaging-service:message.createMessage",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/createMessage.mutation.ts#L8",
            "domain": "chat"
          }
        ]
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created",
        "platform-api/message.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "e128cfbe",
      "interpretation": {
        "sig": "7ca33d61",
        "summary": "Posts a new chat message to a channel via `messaging-service`, and if a `matterId` is supplied, fires a `platform-api/message.created` Inngest event so downstream functions can react (e.g. notifications). No caller found in apps or services.",
        "models": [
          {
            "model": "Message",
            "service": "messaging-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:messaging.validateAccess",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "messaging.validateAccess",
      "module": "messaging",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "ValidateChannelAccessInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/messaging/procedures/lawyer/validateAccess.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/procedures/lawyer/validateAccess.query.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/messaging/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/router.ts#L24"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterChannel.validateChannelAccess",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterChannel.validateChannelAccess",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterChannel/procedures/validateChannelAccess.query.ts#L8",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "a0685e39",
      "interpretation": {
        "sig": "790f462",
        "summary": "Checks whether the caller has access to a matter's chat channel by asking `matter-service` to validate channel access for that `matterId`. Read-only despite living under the chat domain grouping.",
        "flags": []
      }
    },
    {
      "id": "platform-api:messaging.updateReadStatus",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "messaging.updateReadStatus",
      "module": "messaging",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "UpdateReadStatusInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/messaging/procedures/lawyer/updateReadStatus.mutation.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/procedures/lawyer/updateReadStatus.mutation.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/messaging/router.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/router.ts#L25"
      },
      "hops": {
        "direct": 1,
        "services": [
          "messaging-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "messaging-service",
            "path": "message.updateReadStatus",
            "kind": "write",
            "inferred": false,
            "targetId": "messaging-service:message.updateReadStatus",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/updateReadStatus.mutation.ts#L8",
            "domain": "chat"
          }
        ]
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "fe5333c8",
      "interpretation": {
        "sig": "c916eaed",
        "summary": "Marks messages as read for the caller by forwarding the request to `messaging-service`'s `updateReadStatus`. No caller found in apps or services.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:messaging.getUnreadMessages",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "messaging.getUnreadMessages",
      "module": "messaging",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/messaging/procedures/lawyer/getUnreadMessages.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/procedures/lawyer/getUnreadMessages.query.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/messaging/router.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/router.ts#L26"
      },
      "hops": {
        "direct": 1,
        "services": [
          "messaging-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "messaging-service",
            "path": "message.getUnreadMessages",
            "kind": "read",
            "inferred": false,
            "targetId": "messaging-service:message.getUnreadMessages",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getUnreadMessages.query.ts#L8",
            "domain": "chat"
          }
        ]
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "53023893",
      "interpretation": {
        "sig": "2ebf0ce8",
        "summary": "Returns the caller's unread messages by calling `messaging-service`, using the identity from the request context rather than a client-supplied `identityId`.",
        "flags": []
      }
    },
    {
      "id": "platform-api:messaging.editMessage",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "messaging.editMessage",
      "module": "messaging",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "LawyerEditMessageInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/messaging/procedures/lawyer/editMessage.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/procedures/lawyer/editMessage.mutation.ts#L14"
      },
      "router": {
        "file": "apis/platform-api/src/modules/messaging/router.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/router.ts#L27"
      },
      "hops": {
        "direct": 1,
        "services": [
          "messaging-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "messaging-service",
            "path": "message.editMessage",
            "kind": "write",
            "inferred": false,
            "targetId": "messaging-service:message.editMessage",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/editMessage.mutation.ts#L9",
            "domain": "chat"
          }
        ]
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "52a40a7a",
      "interpretation": {
        "sig": "c9d88d43",
        "summary": "Edits the content of an existing chat message via `messaging-service`'s `editMessage` call. No caller found in apps or services.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:messaging.deleteMessage",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "messaging.deleteMessage",
      "module": "messaging",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "LawyerDeleteMessageInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/messaging/procedures/lawyer/deleteMessage.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/procedures/lawyer/deleteMessage.mutation.ts#L14"
      },
      "router": {
        "file": "apis/platform-api/src/modules/messaging/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/router.ts#L28"
      },
      "hops": {
        "direct": 1,
        "services": [
          "messaging-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "messaging-service",
            "path": "message.deleteMessage",
            "kind": "write",
            "inferred": false,
            "targetId": "messaging-service:message.deleteMessage",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/deleteMessage.mutation.ts#L9",
            "domain": "chat"
          }
        ]
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "245aaf8d",
      "interpretation": {
        "sig": "b5559c96",
        "summary": "Deletes a chat message via `messaging-service`'s `deleteMessage` call. No caller found in apps or services.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:ledger.lawyer.transactions.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "ledger.lawyer.transactions.list",
      "module": "ledger",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/ledger/procedures/lawyer/listTransactions.query.ts",
        "line": 39,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/procedures/lawyer/listTransactions.query.ts#L39"
      },
      "router": {
        "file": "apis/platform-api/src/modules/ledger/router.lawyer.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/router.lawyer.ts#L12"
      },
      "hops": {
        "direct": 3,
        "services": [
          "matter-service",
          "ledger-service",
          "transaction-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/getMatter.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "ledger-service",
            "path": "transactions.list",
            "kind": "read",
            "inferred": false,
            "targetId": "ledger-service:transactions.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/procedures/listTransactions.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "51956e91",
      "interpretation": {
        "sig": "51956e91",
        "summary": "Lists the ledger transactions for a matter's account, joined with counterparty and reversal-link info. Feature-flagged: reads via the V2 path (`Transaction` -> `TransactionIntent` -> `Counterparty`) when enabled for the matter, otherwise falls back to the legacy V1 listing with null counterparty/reversal fields.",
        "flags": [
          "read-only despite dual code paths"
        ]
      }
    },
    {
      "id": "platform-api:ledger.lawyer.transactions.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "ledger.lawyer.transactions.create",
      "module": "ledger",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "createTransactionSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/ledger/procedures/lawyer/createTransaction.mutation.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/procedures/lawyer/createTransaction.mutation.ts#L16"
      },
      "router": {
        "file": "apis/platform-api/src/modules/ledger/router.lawyer.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/router.lawyer.ts#L13"
      },
      "hops": {
        "direct": 5,
        "services": [
          "matter-service",
          "transaction-service",
          "payment-service",
          "identity-service",
          "ledger-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/getMatter.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "getOrCreateExternalCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:getOrCreateExternalCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getOrCreateExternalCounterparty.mutation.ts#L5",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "payments.getOrCreateBankCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:payments.getOrCreateBankCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/getOrCreateBankCounterparty.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "getCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getCounterparty.query.ts#L9",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.getOrCreateDefault",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.getOrCreateDefault",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L95",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.create",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/createTransactionIntent.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "payments.createBankPayment",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:payments.createBankPayment",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/createBankPayment.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "reconciliation.create",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:reconciliation.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/reconciliation/procedures/createReconciliation.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "ledger-service",
            "path": "transactions.create",
            "kind": "write",
            "inferred": false,
            "targetId": "ledger-service:transactions.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/transaction/transaction-controller.ts#L29",
            "domain": "money"
          },
          {
            "service": "matter-service",
            "path": "matterFile.internal.attachMatterFileToTransaction",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFile.internal.attachMatterFileToTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/internal/attachMatterFileToTransaction.mutation.ts#L11",
            "domain": "matters"
          }
        ]
      },
      "domain": "money",
      "triggers": [
        "payment-service/bankPayment.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "f9bc4b8d",
      "interpretation": {
        "sig": "f9bc4b8d",
        "summary": "Lets a firm admin (`can_manage_firm`) record a manual ledger entry (bill, invoice, or refund) on an active matter. Resolves or creates the external counterparty and bank counterparties, mints a `PAID` `TransactionIntent`, creates a `BankPayment` and its reconciliation, then writes the ledger `Transaction` and optionally attaches a matter file to it.",
        "models": [
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          },
          {
            "model": "Transaction",
            "service": "ledger-service"
          },
          {
            "model": "BankPayment",
            "service": "payment-service"
          },
          {
            "model": "Reconciliation",
            "service": "payment-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:ledger.lawyer.transactions.createFromFba",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "ledger.lawyer.transactions.createFromFba",
      "module": "ledger",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "createTransactionFromFbaSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/ledger/procedures/lawyer/createTransactionFromFba.mutation.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/procedures/lawyer/createTransactionFromFba.mutation.ts#L16"
      },
      "router": {
        "file": "apis/platform-api/src/modules/ledger/router.lawyer.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/router.lawyer.ts#L14"
      },
      "hops": {
        "direct": 5,
        "services": [
          "matter-service",
          "identity-service",
          "transaction-service",
          "payment-service",
          "ledger-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/getMatter.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L31",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "getOrCreateExternalCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:getOrCreateExternalCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getOrCreateExternalCounterparty.mutation.ts#L5",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "payments.getOrCreateBankCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:payments.getOrCreateBankCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/getOrCreateBankCounterparty.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "getCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getCounterparty.query.ts#L9",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.getOrCreateDefault",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.getOrCreateDefault",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L95",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.create",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/createTransactionIntent.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "payments.createBankPayment",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:payments.createBankPayment",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/createBankPayment.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "reconciliation.create",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:reconciliation.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/reconciliation/procedures/createReconciliation.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "ledger-service",
            "path": "transactions.create",
            "kind": "write",
            "inferred": false,
            "targetId": "ledger-service:transactions.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/transaction/transaction-controller.ts#L29",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [
        "payment-service/bankPayment.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "d04907d3",
      "interpretation": {
        "sig": "d04907d3",
        "summary": "Lets a firm admin record a manual ledger entry against a specific firm bank account (FBA) rather than the firm's default account. Validates the FBA belongs to the matter's firm, is `ACTIVE`, and matches the transaction currency, then follows the same counterparty/`TransactionIntent`/`BankPayment`/reconciliation/ledger-`Transaction` write chain as the plain `create` mutation, tagging both sides with the chosen FBA.",
        "models": [
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          },
          {
            "model": "Transaction",
            "service": "ledger-service"
          },
          {
            "model": "BankPayment",
            "service": "payment-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:ledger.lawyer.transactions.transfer",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "ledger.lawyer.transactions.transfer",
      "module": "ledger",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "transferFundsSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/ledger/procedures/lawyer/transferFunds.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/procedures/lawyer/transferFunds.mutation.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/ledger/router.lawyer.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/router.lawyer.ts#L15"
      },
      "hops": {
        "direct": 4,
        "services": [
          "matter-service",
          "identity-service",
          "transaction-service",
          "ledger-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/getMatter.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L31",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.create",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/createTransactionIntent.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "ledger-service",
            "path": "transactions.create",
            "kind": "write",
            "inferred": false,
            "targetId": "ledger-service:transactions.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/transaction/transaction-controller.ts#L29",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "cd3f73e2",
      "interpretation": {
        "sig": "cd3f73e2",
        "summary": "Lets a firm admin move funds between two of the firm's own bank accounts on a matter (e.g. `CLIENT` to `OFFICE`) as an internal book transfer. Validates both FBAs are active and share a currency, then mints a `PAID` `TransactionIntent` and writes a single ledger `Transaction` directly, with no `BankPayment` or reconciliation involved.",
        "models": [
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          },
          {
            "model": "Transaction",
            "service": "ledger-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:ledger.lawyer.transactions.updateDescription",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "ledger.lawyer.transactions.updateDescription",
      "module": "ledger",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/ledger/procedures/lawyer/updateTransactionDescription.mutation.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/procedures/lawyer/updateTransactionDescription.mutation.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/ledger/router.lawyer.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/router.lawyer.ts#L16"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "ledger-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/getMatter.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "ledger-service",
            "path": "transactions.getById",
            "kind": "read",
            "inferred": false,
            "targetId": "ledger-service:transactions.getById",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/procedures/getTransaction.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "ledger-service",
            "path": "transactions.updateDescription",
            "kind": "write",
            "inferred": false,
            "targetId": "ledger-service:transactions.updateDescription",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/transaction/transaction-controller.ts#L82",
            "domain": "money"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "16290d4",
      "interpretation": {
        "sig": "16290d4",
        "summary": "Lets a firm admin edit the free-text description on an existing ledger transaction, after checking the transaction belongs to a matter in the caller's own firm.",
        "models": [
          {
            "model": "Transaction",
            "service": "ledger-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:ledger.lawyer.transactions.reverse",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "ledger.lawyer.transactions.reverse",
      "module": "ledger",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "reverseTransactionSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/ledger/procedures/lawyer/reverseTransaction.mutation.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/procedures/lawyer/reverseTransaction.mutation.ts#L11"
      },
      "router": {
        "file": "apis/platform-api/src/modules/ledger/router.lawyer.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/router.lawyer.ts#L17"
      },
      "hops": {
        "direct": 3,
        "services": [
          "matter-service",
          "ledger-service",
          "transaction-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/getMatter.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "ledger-service",
            "path": "transactions.getById",
            "kind": "read",
            "inferred": false,
            "targetId": "ledger-service:transactions.getById",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/procedures/getTransaction.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.get",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/getTransactionIntent.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.create",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/createTransactionIntent.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "ledger-service",
            "path": "transactions.create",
            "kind": "write",
            "inferred": false,
            "targetId": "ledger-service:transactions.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/transaction/transaction-controller.ts#L29",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "bffef37",
      "interpretation": {
        "sig": "bffef37",
        "summary": "Lets a firm admin reverse a ledger transaction as an audit-preserving correction: never edits or deletes the original, instead mints a new `TransactionIntent` linked via `reversesTransactionIntentId` and writes a `Transaction` with source/destination swapped on every posting. Warns (unless acknowledged) if the entry was already reversed; reversals themselves can be reversed again.",
        "models": [
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          },
          {
            "model": "Transaction",
            "service": "ledger-service"
          }
        ],
        "flags": [
          "non-atomic: a failure after minting the reversal intent can leave it dangling without a matching ledger write"
        ]
      }
    },
    {
      "id": "platform-api:ledger.lawyer.transactions.getReversalState",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "ledger.lawyer.transactions.getReversalState",
      "module": "ledger",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/ledger/procedures/lawyer/getReversalState.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/procedures/lawyer/getReversalState.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/ledger/router.lawyer.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/router.lawyer.ts#L18"
      },
      "hops": {
        "direct": 2,
        "services": [
          "ledger-service",
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "ledger-service",
            "path": "transactions.getById",
            "kind": "read",
            "inferred": false,
            "targetId": "ledger-service:transactions.getById",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/procedures/getTransaction.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "91a7212c",
      "interpretation": {
        "sig": "91a7212c",
        "summary": "Checks whether a given transaction already has a reversal recorded against it, used to drive the \"already reversed\" confirmation warning before a reversal is submitted."
      }
    },
    {
      "id": "platform-api:ledger.lawyer.accounts.listForMatter",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "ledger.lawyer.accounts.listForMatter",
      "module": "ledger",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/ledger/procedures/lawyer/listMatterClientAccountsWithBalance.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/procedures/lawyer/listMatterClientAccountsWithBalance.query.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/ledger/router.lawyer.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/router.lawyer.ts#L21"
      },
      "hops": {
        "direct": 4,
        "services": [
          "matter-service",
          "identity-service",
          "ledger-service",
          "transaction-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "lawyer.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/getMatter.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.listForFirm",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.listForFirm",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L64",
            "domain": "people"
          },
          {
            "service": "ledger-service",
            "path": "accounts.balanceBatch",
            "kind": "read",
            "inferred": false,
            "targetId": "ledger-service:accounts.balanceBatch",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/account/account-controller.ts#L98",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.listPendingForMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.listPendingForMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listPendingForMatter.query.ts#L25",
            "domain": "money"
          },
          {
            "service": "ledger-service",
            "path": "accounts.list",
            "kind": "read",
            "inferred": false,
            "targetId": "ledger-service:accounts.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/procedures/listAccounts.query.ts#L9",
            "domain": "money"
          },
          {
            "service": "ledger-service",
            "path": "accounts.getBalance",
            "kind": "read",
            "inferred": false,
            "targetId": "ledger-service:accounts.getBalance",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/procedures/getAccountsBalance.mutation.ts#L17",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "3d968d1f",
      "interpretation": {
        "sig": "3d968d1f",
        "summary": "Lists a matter's client/office ledger accounts together with their current balances and any pending transaction intents, after confirming the caller has access to the matter.",
        "flags": [
          "read-only"
        ]
      }
    },
    {
      "id": "platform-api:telephony.lawyer.analytics.get",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "telephony.lawyer.analytics.get",
      "module": "telephony",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/telephony/procedures/lawyer/getAnalytics.query.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/procedures/lawyer/getAnalytics.query.ts#L24"
      },
      "router": {
        "file": "apis/platform-api/src/modules/telephony/router.lawyer.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/router.lawyer.ts#L19"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "calls.analytics",
            "kind": "read",
            "inferred": false,
            "targetId": "telephony-service:calls.analytics",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/call/call-controller.ts#L106",
            "domain": "voice"
          }
        ]
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "95b53624",
      "interpretation": {
        "sig": "95b53624",
        "summary": "Returns the phone-agent analytics dashboard for the caller's firm: call totals with a previous-window comparison, zero-filled call volume buckets, and the call log. A firm without telephony provisioned gets `enabled: false` instead of an error, so the frontend can render an empty state.",
        "models": [
          {
            "model": "Firm",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:telephony.lawyer.numbers.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "telephony.lawyer.numbers.list",
      "module": "telephony",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/telephony/procedures/lawyer/listPhoneNumbers.query.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/procedures/lawyer/listPhoneNumbers.query.ts#L11"
      },
      "router": {
        "file": "apis/platform-api/src/modules/telephony/router.lawyer.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/router.lawyer.ts#L22"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "numbers.list",
            "kind": "read",
            "inferred": false,
            "targetId": "telephony-service:numbers.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/number/number-controller.ts#L11",
            "domain": "voice"
          }
        ]
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "3192bf73",
      "interpretation": {
        "sig": "3192bf73",
        "summary": "Lists the caller's firm's telephony phone numbers and which voice agent each is assigned to.",
        "models": [
          {
            "model": "PhoneNumber",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:telephony.lawyer.settings.get",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "telephony.lawyer.settings.get",
      "module": "telephony",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/telephony/procedures/lawyer/getSettings.query.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/procedures/lawyer/getSettings.query.ts#L15"
      },
      "router": {
        "file": "apis/platform-api/src/modules/telephony/router.lawyer.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/router.lawyer.ts#L25"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "firms.get",
            "kind": "read",
            "inferred": false,
            "targetId": "telephony-service:firms.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/firm/firm-controller.ts#L11",
            "domain": "voice"
          }
        ]
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "56506244",
      "interpretation": {
        "sig": "56506244",
        "summary": "Returns the firm's telephony settings: timezone plus call-handling config (locale, recording notice, AI fallback, answering-machine detection, dial timeout). Returns `enabled: false` instead of an error when telephony isn't provisioned for the firm.",
        "models": [
          {
            "model": "Firm",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:telephony.lawyer.settings.update",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "telephony.lawyer.settings.update",
      "module": "telephony",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": "inputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/telephony/procedures/lawyer/updateSettings.mutation.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/procedures/lawyer/updateSettings.mutation.ts#L22"
      },
      "router": {
        "file": "apis/platform-api/src/modules/telephony/router.lawyer.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/router.lawyer.ts#L26"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "firms.update",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:firms.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/firm/firm-controller.ts#L41",
            "domain": "voice"
          },
          {
            "service": "telephony-service",
            "path": "voiceConfig.update",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:voiceConfig.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/voice-config/voice-config-controller.ts#L15",
            "domain": "voice"
          },
          {
            "service": "telephony-service",
            "path": "firms.get",
            "kind": "read",
            "inferred": false,
            "targetId": "telephony-service:firms.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/firm/firm-controller.ts#L11",
            "domain": "voice"
          }
        ]
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "368f0e6",
      "interpretation": {
        "sig": "368f0e6",
        "summary": "Updates the firm's telephony timezone and/or call-handling settings, then returns the refreshed settings. Timezone and voice config are written in two separate service calls (not atomic), each idempotent so a retry converges to the correct state.",
        "models": [
          {
            "model": "Firm",
            "service": "telephony-service"
          },
          {
            "model": "VoiceConfig",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:telephony.lawyer.hours.get",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "telephony.lawyer.hours.get",
      "module": "telephony",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/telephony/procedures/lawyer/getHours.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/procedures/lawyer/getHours.query.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/telephony/router.lawyer.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/router.lawyer.ts#L29"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "hours.get",
            "kind": "read",
            "inferred": false,
            "targetId": "telephony-service:hours.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/hours/hours-controller.ts#L11",
            "domain": "voice"
          }
        ]
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "58947ab2",
      "interpretation": {
        "sig": "58947ab2",
        "summary": "Returns the firm's weekly opening schedule (split shifts allowed, closed on days with no intervals) plus its configured holidays.",
        "models": [
          {
            "model": "BusinessHours",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:telephony.lawyer.hours.replace",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "telephony.lawyer.hours.replace",
      "module": "telephony",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/telephony/procedures/lawyer/replaceHours.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/procedures/lawyer/replaceHours.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/telephony/router.lawyer.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/router.lawyer.ts#L30"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "hours.replace",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:hours.replace",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/hours/hours-controller.ts#L27",
            "domain": "voice"
          }
        ]
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1467e01d",
      "interpretation": {
        "sig": "1467e01d",
        "summary": "Replaces the firm's entire weekly opening schedule in one atomic call to the telephony service.",
        "models": [
          {
            "model": "BusinessHours",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:telephony.lawyer.holidays.add",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "telephony.lawyer.holidays.add",
      "module": "telephony",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/telephony/procedures/lawyer/addHoliday.mutation.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/procedures/lawyer/addHoliday.mutation.ts#L13"
      },
      "router": {
        "file": "apis/platform-api/src/modules/telephony/router.lawyer.ts",
        "line": 33,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/router.lawyer.ts#L33"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "hours.addHoliday",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:hours.addHoliday",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/hours/hours-controller.ts#L31",
            "domain": "voice"
          }
        ]
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "523f4e75",
      "interpretation": {
        "sig": "523f4e75",
        "summary": "Adds a holiday for the firm. Without open/close times the firm is closed all day; with both, that window overrides the weekly schedule for that day only. No caller in the codebase currently invokes this procedure.",
        "flags": [
          "usage.dead"
        ],
        "models": [
          {
            "model": "Holiday",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:telephony.lawyer.holidays.remove",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "telephony.lawyer.holidays.remove",
      "module": "telephony",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/telephony/procedures/lawyer/removeHoliday.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/procedures/lawyer/removeHoliday.mutation.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/telephony/router.lawyer.ts",
        "line": 34,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/router.lawyer.ts#L34"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "hours.removeHoliday",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:hours.removeHoliday",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/hours/hours-controller.ts#L35",
            "domain": "voice"
          }
        ]
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "acd975fc",
      "interpretation": {
        "sig": "acd975fc",
        "summary": "Removes a holiday from the firm's schedule; a holiday id from another firm resolves as not found rather than being deletable across firms. No caller in the codebase currently invokes this procedure.",
        "flags": [
          "usage.dead"
        ],
        "models": [
          {
            "model": "Holiday",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:telephony.lawyer.routing.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "telephony.lawyer.routing.list",
      "module": "telephony",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/telephony/procedures/lawyer/listRoutingDestinations.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/procedures/lawyer/listRoutingDestinations.query.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/telephony/router.lawyer.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/router.lawyer.ts#L37"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "routing.list",
            "kind": "read",
            "inferred": false,
            "targetId": "telephony-service:routing.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/routing/routing-controller.ts#L7",
            "domain": "voice"
          }
        ]
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "afb0e0ba",
      "interpretation": {
        "sig": "afb0e0ba",
        "summary": "Lists the firm's human hunt groups: who answers calls `IN_HOURS_HUMAN` and who the AI escalates to (`ESCALATION_HUMAN`), in priority order.",
        "models": [
          {
            "model": "RoutingDestination",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:telephony.lawyer.routing.replace",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "telephony.lawyer.routing.replace",
      "module": "telephony",
      "roleFolder": "lawyer",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/telephony/procedures/lawyer/replaceRoutingDestinations.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/procedures/lawyer/replaceRoutingDestinations.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/telephony/router.lawyer.ts",
        "line": 38,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/router.lawyer.ts#L38"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "routing.replace",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:routing.replace",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/routing/routing-controller.ts#L16",
            "domain": "voice"
          }
        ]
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "921f3821",
      "interpretation": {
        "sig": "921f3821",
        "summary": "Replaces both hunt groups (in-hours answering and escalation) for the firm in one atomic call.",
        "models": [
          {
            "model": "RoutingDestination",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:intercom.lawyer.getIntercomToken",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "intercom.lawyer.getIntercomToken",
      "module": "intercom",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/intercom/procedures/getIntercomToken.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/intercom/procedures/getIntercomToken.query.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/intercom/router.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/intercom/router.ts#L8"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "80a67894",
      "interpretation": {
        "sig": "80a67894",
        "summary": "Issues a signed Intercom identity token and app ID for a logged-in firm member, so their browser can open an authenticated Intercom chat widget. Resolves the person's market from their firm memberships (majority market wins) and signs the JWT with that market's Intercom secret.",
        "models": []
      }
    },
    {
      "id": "platform-api:invoice.lawyer.getInvoice",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "invoice.lawyer.getInvoice",
      "module": "invoice",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "GetInvoiceInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/invoice/procedures/lawyer/getInvoice.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/invoice/procedures/lawyer/getInvoice.query.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/invoice/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/invoice/router.ts#L14"
      },
      "hops": {
        "direct": 2,
        "services": [
          "transaction-service",
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "invoice.get",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:invoice.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/getInvoice.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          },
          {
            "service": "work-service",
            "path": "quote.getQuote",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuote.query.ts#L6",
            "domain": "deal"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "51d49bb5",
      "interpretation": {
        "sig": "51d49bb5",
        "summary": "Lets a firm member pull one invoice with its payment status, showing total, amount already paid and outstanding balance, plus the quote it was generated from.",
        "models": [
          {
            "model": "Invoice",
            "service": "transaction-service"
          },
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          },
          {
            "model": "Quote",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:invoice.lawyer.listInvoices",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "invoice.lawyer.listInvoices",
      "module": "invoice",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "matterFirmSideProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "LawyerListInvoicesInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/invoice/procedures/lawyer/listInvoices.query.ts",
        "line": 73,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/invoice/procedures/lawyer/listInvoices.query.ts#L73"
      },
      "router": {
        "file": "apis/platform-api/src/modules/invoice/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/invoice/router.ts#L15"
      },
      "hops": {
        "direct": 1,
        "services": [
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "invoice.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:invoice.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/listInvoices.query.ts#L8",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "80b6c5d4",
      "interpretation": {
        "sig": "80b6c5d4",
        "summary": "Lists invoices for a matter, filterable by quote, status or type, for the firm side of the matter.",
        "models": [
          {
            "model": "Invoice",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:savedViews.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "savedViews.list",
      "module": "savedViews",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "savedViewProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/savedViews/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/savedViews/router.ts#L19"
      },
      "router": {
        "file": "apis/platform-api/src/modules/savedViews/router.ts",
        "line": 87,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/savedViews/router.ts#L87"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "savedFilterView.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:savedFilterView.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/savedFilterView/savedFilterView-controller.ts#L11",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "8aef5254",
      "interpretation": {
        "sig": "8aef5254",
        "summary": "Lists the saved filter/sort views a firm has stored for a given surface (e.g. a case list screen), annotating each one with whether its stored snapshot is still valid against the surface's current filter and sort fields.",
        "models": [
          {
            "model": "SavedFilterView",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:savedViews.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "savedViews.create",
      "module": "savedViews",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "savedViewProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/savedViews/router.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/savedViews/router.ts#L29"
      },
      "router": {
        "file": "apis/platform-api/src/modules/savedViews/router.ts",
        "line": 88,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/savedViews/router.ts#L88"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "savedFilterView.create",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:savedFilterView.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/savedFilterView/savedFilterView-controller.ts#L17",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c8ccf5d2",
      "interpretation": {
        "sig": "c8ccf5d2",
        "summary": "Saves a new named filter/sort view for a surface, delegating the write to `identity-service`, then returns it annotated with `snapshotValid` and any unknown or invalid filter/sort fields.",
        "models": [
          {
            "model": "SavedFilterView",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:savedViews.rename",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "savedViews.rename",
      "module": "savedViews",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "savedViewProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/savedViews/router.ts",
        "line": 47,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/savedViews/router.ts#L47"
      },
      "router": {
        "file": "apis/platform-api/src/modules/savedViews/router.ts",
        "line": 89,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/savedViews/router.ts#L89"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "savedFilterView.rename",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:savedFilterView.rename",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/savedFilterView/savedFilterView-controller.ts#L29",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c1acd35e",
      "interpretation": {
        "sig": "c1acd35e",
        "summary": "Renames an existing saved view by delegating to `identity-service`; returns the service's response as-is without re-validating the snapshot.",
        "models": [
          {
            "model": "SavedFilterView",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:savedViews.updateSnapshot",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "savedViews.updateSnapshot",
      "module": "savedViews",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "savedViewProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/savedViews/router.ts",
        "line": 61,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/savedViews/router.ts#L61"
      },
      "router": {
        "file": "apis/platform-api/src/modules/savedViews/router.ts",
        "line": 90,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/savedViews/router.ts#L90"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "savedFilterView.updateSnapshot",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:savedFilterView.updateSnapshot",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/savedFilterView/savedFilterView-controller.ts#L40",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "d4adb142",
      "interpretation": {
        "sig": "d4adb142",
        "summary": "Replaces the stored filters/sort of a saved view with a new snapshot, delegating the write to `identity-service`, then returns it annotated with `snapshotValid` and any invalid filter or sort fields.",
        "models": [
          {
            "model": "SavedFilterView",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:savedViews.delete",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiRouter",
      "mounts": [
        "/",
        "/api/"
      ],
      "callers": [
        "legal-os",
        "outlook-addin"
      ],
      "path": "savedViews.delete",
      "module": "savedViews",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "savedViewProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware",
          "(inline)"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/savedViews/router.ts",
        "line": 77,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/savedViews/router.ts#L77"
      },
      "router": {
        "file": "apis/platform-api/src/modules/savedViews/router.ts",
        "line": 91,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/savedViews/router.ts#L91"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "savedFilterView.delete",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:savedFilterView.delete",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/savedFilterView/savedFilterView-controller.ts#L54",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "8f65461e",
      "interpretation": {
        "sig": "8f65461e",
        "summary": "Deletes a saved filter/sort view by id, delegating the write to `identity-service`.",
        "models": [
          {
            "model": "SavedFilterView",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:assignment.admin.listMatterReassignableLawyers",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "assignment.admin.listMatterReassignableLawyers",
      "module": "assignment",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListMatterReassignableLawyersInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/assignment/procedures/admin/listMatterReassignableLawyers.query.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/assignment/procedures/admin/listMatterReassignableLawyers.query.ts#L15"
      },
      "router": {
        "file": "apis/platform-api/src/modules/assignment/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/assignment/router.ts#L24"
      },
      "hops": {
        "direct": 4,
        "services": [
          "work-service",
          "matter-service",
          "identity-service",
          "assignment-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service",
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "feeAgreement.listMatterIncompleteFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listMatterIncompleteFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterIncompleteFeeAgreements.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "matter-service",
            "path": "admin.getMatterForAdmin",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.getMatterForAdmin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "firmMember.listFirmMembers",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.listFirmMembers",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/listFirmMembers.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "assignment-service",
            "path": "listAssignments",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:listAssignments",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/listAssignments.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "assignment-service",
            "path": "listAssignableLawyers",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:listAssignableLawyers",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/firmEmployeeToProduct/procedures/listAssignableLawyers.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "3af30cea",
      "interpretation": {
        "sig": "3af30cea",
        "summary": "For Lawhive admin/ops, lists lawyers eligible to take over a matter (any firm), based on incomplete fee agreements, jurisdiction, and marketplace enrollment, optionally scoped to a specific firm.",
        "flags": []
      }
    },
    {
      "id": "platform-api:assignment.admin.createReassignment",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "assignment.admin.createReassignment",
      "module": "assignment",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateReassignmentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/assignment/procedures/admin/createReassignment.mutation.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/assignment/procedures/admin/createReassignment.mutation.ts#L18"
      },
      "router": {
        "file": "apis/platform-api/src/modules/assignment/router.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/assignment/router.ts#L25"
      },
      "hops": {
        "direct": 4,
        "services": [
          "work-service",
          "identity-service",
          "matter-service",
          "assignment-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service",
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "feeAgreement.listMatterIncompleteFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listMatterIncompleteFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterIncompleteFeeAgreements.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "firmMember.getFirmMember",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getFirmMember",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getFirmMember.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "admin.getMatterForAdmin",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.getMatterForAdmin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
            "domain": "matters"
          },
          {
            "service": "assignment-service",
            "path": "feePlan.getCurrent",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:feePlan.getCurrent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/feePlan/procedures/getCurrentFeePlan.query.ts#L13",
            "domain": "deal"
          },
          {
            "service": "assignment-service",
            "path": "isLawyerAssignable",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:isLawyerAssignable",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/firmEmployeeToProduct/procedures/isLawyerAssignable.query.ts#L12",
            "domain": "deal"
          },
          {
            "service": "matter-service",
            "path": "admin.reassignMatter",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:admin.reassignMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/reassignMatter.mutation.ts#L5",
            "domain": "matters"
          },
          {
            "service": "assignment-service",
            "path": "createReassignment",
            "kind": "write",
            "inferred": false,
            "targetId": "assignment-service:createReassignment",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/createReassignment.mutation.ts#L5",
            "domain": "deal"
          },
          {
            "service": "work-service",
            "path": "feeAgreement.updateFeeAgreementJurisdiction",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:feeAgreement.updateFeeAgreementJurisdiction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/updateFeeAgreementJurisdiction.mutation.ts#L18",
            "domain": "deal"
          },
          {
            "service": "work-service",
            "path": "agreementSignature.createUnsignedAgreementSignatures",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:agreementSignature.createUnsignedAgreementSignatures",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/createUnsignedAgreementSignatures.mutation.ts#L15",
            "domain": "deal"
          },
          {
            "service": "work-service",
            "path": "feeAgreement.updateFeeAgreementLawhivePercent",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:feeAgreement.updateFeeAgreementLawhivePercent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/updateFeeAgreementLawhivePercent.mutation.ts#L18",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [
        "platform-api/matter.reassigned"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "d93af2a7",
      "interpretation": {
        "sig": "d93af2a7",
        "summary": "Admin action that reassigns a matter to a lawyer in any firm, including cross-firm moves: validates the destination firm's fee plan and eligibility, calls `matter-service` to reassign, updates the fee agreement jurisdiction and Lawhive percent when needed, requests new signatures on in-progress fee agreements if a new signed agreement is required, notifies the client via Knock, and fires `platform-api/matter.reassigned`.",
        "models": [
          {
            "model": "Assignment",
            "service": "assignment-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:assignment.admin.listAssignments",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "assignment.admin.listAssignments",
      "module": "assignment",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListAssignmentsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/assignment/procedures/admin/listAssignments.query.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/assignment/procedures/admin/listAssignments.query.ts#L13"
      },
      "router": {
        "file": "apis/platform-api/src/modules/assignment/router.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/assignment/router.ts#L26"
      },
      "hops": {
        "direct": 3,
        "services": [
          "assignment-service",
          "identity-service",
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "assignment-service",
            "path": "listAssignments",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:listAssignments",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/listAssignments.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "work-service",
            "path": "feeAgreement.listFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listFeeAgreements.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "firm.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/listFirms.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "b5333300",
      "interpretation": {
        "sig": "b5333300",
        "summary": "Admin equivalent of the lawyer version: lists a matter's assignment history enriched with person, fee agreement, and firm details.",
        "models": [
          {
            "model": "Assignment",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:assignment.admin.listFeePlans",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "assignment.admin.listFeePlans",
      "module": "assignment",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListFeePlansInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/assignment/procedures/admin/listFeePlans.query.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/assignment/procedures/admin/listFeePlans.query.ts#L13"
      },
      "router": {
        "file": "apis/platform-api/src/modules/assignment/router.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/assignment/router.ts#L27"
      },
      "hops": {
        "direct": 1,
        "services": [
          "assignment-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "assignment-service",
            "path": "feePlan.list",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:feePlan.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/feePlan/procedures/listFeePlans.query.ts#L14",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "29f5e3c1",
      "interpretation": {
        "sig": "29f5e3c1",
        "summary": "Lists a firm's fee plans, optionally filtered by status, straight from the assignment service.",
        "models": [
          {
            "model": "FeePlan",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:assignment.admin.updateFirmMemberProducts",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "assignment.admin.updateFirmMemberProducts",
      "module": "assignment",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "updateFirmMemberProductsSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/assignment/procedures/admin/updateFirmMemberProducts.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/assignment/procedures/admin/updateFirmMemberProducts.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/assignment/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/assignment/router.ts#L28"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "assignment-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.listFirmMembers",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.listFirmMembers",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/listFirmMembers.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "assignment-service",
            "path": "updateFirmMemberProducts",
            "kind": "write",
            "inferred": false,
            "targetId": "assignment-service:updateFirmMemberProducts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/firmEmployeeToProduct/procedures/updateFirmMemberProducts.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "dc31dd27",
      "interpretation": {
        "sig": "dc31dd27",
        "summary": "Admin updates which legal products a firm member is assigned to work on: confirms the identity belongs to the firm, then writes the new product list to the assignment service.",
        "models": [
          {
            "model": "FirmMemberProduct",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:assignment.admin.listFirmMemberProducts",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "assignment.admin.listFirmMemberProducts",
      "module": "assignment",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/assignment/procedures/admin/listFirmMemberProducts.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/assignment/procedures/admin/listFirmMemberProducts.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/assignment/router.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/assignment/router.ts#L29"
      },
      "hops": {
        "direct": 3,
        "services": [
          "identity-service",
          "assignment-service",
          "product-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          },
          {
            "service": "assignment-service",
            "path": "listFirmMemberProducts",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:listFirmMemberProducts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/firmEmployeeToProduct/procedures/listFirmMemberProducts.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "product-service",
            "path": "products.listProducts",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:products.listProducts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listProducts.query.ts#L5",
            "domain": null
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "4cf92955",
      "interpretation": {
        "sig": "4cf92955",
        "summary": "Lists the legal products assigned to a specific firm member, cross-referenced with the firm's market and each product's available jurisdictions to mark which jurisdictions are selected.",
        "models": [
          {
            "model": "FirmMemberProduct",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:email.admin.grants.createForPerson",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "email.admin.grants.createForPerson",
      "module": "email",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateGrantForPersonSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/admin/grants/createGrantForPerson.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/admin/grants/createGrantForPerson.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 101,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L101"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "email-service",
            "path": "grants.createForPerson",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:grants.createForPerson",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/grants/createGrantForPerson.mutation.ts#L5",
            "domain": "email"
          }
        ]
      },
      "domain": "people",
      "triggers": [
        "email-service/grant.messageBackfill.requested"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5315acf",
      "interpretation": {
        "sig": "5315acf",
        "summary": "Admin action that grants a person access to a mailbox address under a tenant: looks up the identity first, then creates the grant in `email-service` and triggers a backfill of that mailbox's message history. Fails cleanly with a 429 if the downstream grant creation is rate-limited.",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "platform-api:email.admin.grants.removeForPerson",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "email.admin.grants.removeForPerson",
      "module": "email",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RemoveGrantForPersonSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/admin/grants/removeGrantForPerson.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/admin/grants/removeGrantForPerson.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 102,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L102"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "grants.removeForPerson",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:grants.removeForPerson",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/grants/removeGrantForPerson.mutation.ts#L5",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b12483d4",
      "interpretation": {
        "sig": "b12483d4",
        "summary": "Admin action that revokes a person's email grant, removing their access to the connected mailbox.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.admin.grants.getForPerson",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "email.admin.grants.getForPerson",
      "module": "email",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetPersonGrantSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/admin/grants/getGrantForPerson.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/admin/grants/getGrantForPerson.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 103,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L103"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "grants.getForPerson",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:grants.getForPerson",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/grants/getPersonGrant.query.ts#L5",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f36e4cbd",
      "interpretation": {
        "sig": "f36e4cbd",
        "summary": "Looks up a person's current email grant so admins can check whether and how their mailbox is connected.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.admin.messages.createAttachmentUrl",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "email.admin.messages.createAttachmentUrl",
      "module": "email",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/admin/messages/createMatterAttachmentUrl.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/admin/messages/createMatterAttachmentUrl.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 106,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L106"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "matter.createAttachmentUrl",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:matter.createAttachmentUrl",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/createAttachmentUrl.mutation.ts#L11",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "cf42cb81",
      "interpretation": {
        "sig": "cf42cb81",
        "summary": "Generates a download or view URL for an email attachment filed against a matter, though the action is really about reading and returning a URL rather than changing any stored data.",
        "flags": [
          "mutation only reads"
        ]
      }
    },
    {
      "id": "platform-api:email.admin.messages.getAttachmentUrls",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "email.admin.messages.getAttachmentUrls",
      "module": "email",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/admin/messages/getMatterAttachmentUrls.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/admin/messages/getMatterAttachmentUrls.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 107,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L107"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "matter.getAttachmentUrls",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:matter.getAttachmentUrls",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/getAttachmentUrls.query.ts#L11",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [
        "email-service/attachment.uploadRequested"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "a07977b6",
      "interpretation": {
        "sig": "a07977b6",
        "summary": "Lets a Lawhive admin fetch download URLs for a message's attachments (or just its inline ones) on a given matter, delegating straight to the `email-service` to look them up. Read-only: nothing changes.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.admin.messages.getMessage",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "email.admin.messages.getMessage",
      "module": "email",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/admin/messages/getMessage.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/admin/messages/getMessage.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 108,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L108"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "matter.getMessage",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:matter.getMessage",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/getMessage.query.ts#L10",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "bd9f7ad6",
      "interpretation": {
        "sig": "bd9f7ad6",
        "summary": "Fetches a single filed email message by id, scoped to its matter, for admin review.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.admin.messages.getThreadMessages",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "email.admin.messages.getThreadMessages",
      "module": "email",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/admin/messages/getThreadMessages.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/admin/messages/getThreadMessages.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 109,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L109"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "matter.getThreadMessages",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:matter.getThreadMessages",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/getThreadMessages.query.ts#L16",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f25094e5",
      "interpretation": {
        "sig": "f25094e5",
        "summary": "Fetches the messages in one or more email threads filed under a matter, paginated by cursor, for admins reviewing correspondence.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.admin.messages.getThreads",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "email.admin.messages.getThreads",
      "module": "email",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/admin/messages/getThreads.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/admin/messages/getThreads.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 110,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L110"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "matter.getThreads",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:matter.getThreads",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/getThreads.query.ts#L13",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "c85fe364",
      "interpretation": {
        "sig": "c85fe364",
        "summary": "Lists the email threads filed against a matter, for admins browsing a matter's correspondence.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.admin.matter.updateMessagesMatter",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "email.admin.matter.updateMessagesMatter",
      "module": "email",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/admin/matter/updateMessagesMatter.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/admin/matter/updateMessagesMatter.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 113,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L113"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "matter.updateMessagesMatter",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:matter.updateMessagesMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/updateMessagesMatter.mutation.ts#L13",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [
        "email-service/attachment.refiled",
        "email-service/attachment.removed",
        "email-service/message.filed",
        "email-service/message.refiled",
        "email-service/message.removed"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "96279806",
      "interpretation": {
        "sig": "96279806",
        "summary": "Admin action that refiles a specific set of email messages (and optionally their attachments) from one matter to another, updating the stored matter link on each message.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.admin.matter.updateThreadMatter",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "email.admin.matter.updateThreadMatter",
      "module": "email",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/admin/matter/updateThreadMatter.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/admin/matter/updateThreadMatter.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 114,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L114"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "matter.updateThreadMatter",
            "kind": "write",
            "inferred": false,
            "targetId": "email-service:matter.updateThreadMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/matter/updateThreadMatter.mutation.ts#L13",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [
        "email-service/attachment.refiled",
        "email-service/attachment.removed",
        "email-service/message.filed",
        "email-service/message.refiled",
        "email-service/message.removed"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "fa25e11a",
      "interpretation": {
        "sig": "fa25e11a",
        "summary": "Admin action that refiles an entire email thread (and optionally its attachments) from one matter to another.",
        "flags": []
      }
    },
    {
      "id": "platform-api:email.admin.tenants.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "email.admin.tenants.list",
      "module": "email",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/email/procedures/admin/tenants/listTenants.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/procedures/admin/tenants/listTenants.query.ts#L4"
      },
      "router": {
        "file": "apis/platform-api/src/modules/email/router.ts",
        "line": 117,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/email/router.ts#L117"
      },
      "hops": {
        "direct": 1,
        "services": [
          "email-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "email-service",
            "path": "tenants.list",
            "kind": "read",
            "inferred": false,
            "targetId": "email-service:tenants.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/email-service/src/procedures/tenants/listTenants.query.ts#L4",
            "domain": "email"
          }
        ]
      },
      "domain": "email",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "d8019214",
      "interpretation": {
        "sig": "d8019214",
        "summary": "Lists the email tenants (mailbox provider configurations) available to admins, used for picking a tenant when setting up grants.",
        "flags": []
      }
    },
    {
      "id": "platform-api:feedback.admin.requestTrustpilotReview",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "feedback.admin.requestTrustpilotReview",
      "module": "feedback",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/feedback/procedures/admin/requestTrustpilotReview.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/feedback/procedures/admin/requestTrustpilotReview.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/feedback/modules/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/feedback/modules/router.ts#L12"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "1cd08243",
      "interpretation": {
        "sig": "1cd08243",
        "summary": "Admin-facing mutation meant to trigger a Trustpilot review request for a matter, but the underlying service is a stub that just returns the `matterId` back unchanged. No review request, email, or write of any kind actually happens.",
        "flags": [
          "mutation only reads",
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:identity.contact.admin.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.contact.admin.create",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateContactAdminInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/identity/contact/procedures/admin/create.mutation.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/procedures/admin/create.mutation.ts#L13"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/contact/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/router.ts#L17"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "contact.create",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:contact.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/create.mutation.ts#L22",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c8ca1951",
      "interpretation": {
        "sig": "c8ca1951",
        "summary": "Lets a Lawhive admin add a new contact to a firm, recording who created it.",
        "models": [
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.contact.admin.update",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.contact.admin.update",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateContactAdminInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/identity/contact/procedures/admin/update.mutation.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/procedures/admin/update.mutation.ts#L13"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/contact/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/router.ts#L18"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "contact.update",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:contact.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/update.mutation.ts#L26",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "dc7353b0",
      "interpretation": {
        "sig": "dc7353b0",
        "summary": "Lets a Lawhive admin edit an existing firm contact's details.",
        "models": [
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.contact.admin.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.contact.admin.list",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListContactInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/identity/contact/procedures/admin/list.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/procedures/admin/list.query.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/contact/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/router.ts#L19"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "contact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list.query.ts#L31",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "630546e4",
      "interpretation": {
        "sig": "630546e4",
        "summary": "Lets a Lawhive admin list firm contacts with filters, a thin pass-through to the identity service.",
        "models": [
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.contact.admin.get",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.contact.admin.get",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetContactInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/identity/contact/procedures/admin/get.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/procedures/admin/get.query.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/contact/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/router.ts#L20"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "contact.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/get.query.ts#L20",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "51e264d2",
      "interpretation": {
        "sig": "51e264d2",
        "summary": "Lets a Lawhive admin look up a single firm contact by id.",
        "models": [
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.contact.admin.delete",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.contact.admin.delete",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "DeleteInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/identity/contact/procedures/admin/delete.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/procedures/admin/delete.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/contact/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/router.ts#L21"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "contact.delete",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:contact.delete",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/delete.mutation.ts#L42",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "ae949d8a",
      "interpretation": {
        "sig": "ae949d8a",
        "summary": "Lets a Lawhive admin soft-delete a firm contact.",
        "models": [
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.contact.admin.restore",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.contact.admin.restore",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RestoreContactInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/identity/contact/procedures/admin/restore.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/procedures/admin/restore.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/contact/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/router.ts#L22"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "contact.restore",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:contact.restore",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/restore.mutation.ts#L9",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "46cce27b",
      "interpretation": {
        "sig": "46cce27b",
        "summary": "Lets a Lawhive admin bring back a previously deleted firm contact.",
        "models": [
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.contact.admin.relations.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.contact.admin.relations.create",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateContactRelationInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/identity/contact/procedures/admin/create-relation.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/procedures/admin/create-relation.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/contact/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/router.ts#L24"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "contact.relations.create",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:contact.relations.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/create-relation.mutation.ts#L63",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "1b14be36",
      "interpretation": {
        "sig": "1b14be36",
        "summary": "Lets a Lawhive admin link two contacts together as a relation (for example, linking a firm contact to another party).",
        "models": [
          {
            "model": "ContactRelation",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.contact.admin.relations.delete",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.contact.admin.relations.delete",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "DeleteContactRelationInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/identity/contact/procedures/admin/delete-relation.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/procedures/admin/delete-relation.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/contact/router.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/router.ts#L25"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "contact.relations.delete",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:contact.relations.delete",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/delete-relation.mutation.ts#L9",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "638058b1",
      "interpretation": {
        "sig": "638058b1",
        "summary": "Lets a Lawhive admin remove a relation between two contacts.",
        "models": [
          {
            "model": "ContactRelation",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.contact.admin.relations.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.contact.admin.relations.list",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListContactRelationsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/identity/contact/procedures/admin/list-relations.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/procedures/admin/list-relations.query.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/contact/router.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/contact/router.ts#L26"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "contact.relations.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.relations.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list-relations.query.ts#L43",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "969f111e",
      "interpretation": {
        "sig": "969f111e",
        "summary": "Lets a Lawhive admin list the relations attached to a contact.",
        "models": [
          {
            "model": "ContactRelation",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.firm.admin.listFirms",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.firm.admin.listFirms",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListFirmsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firms/procedures/admin/listFirms.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/procedures/admin/listFirms.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/firms/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/router.ts#L10"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firm.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/listFirms.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "listFirmInvoiceCounterparties",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:listFirmInvoiceCounterparties",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/listFirmInvoiceCounterparties.query.ts#L6",
            "domain": "money"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "ef0a8a62",
      "interpretation": {
        "sig": "ef0a8a62",
        "summary": "Lists firms for admins, requires the `can_view_firms` grant, and enriches each firm with its invoice bank account by cross-calling the transaction service's firm counterparties.",
        "models": [
          {
            "model": "Firm",
            "service": "identity-service"
          },
          {
            "model": "FirmCounterparty",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.firm.admin.getFirm",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.firm.admin.getFirm",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firms/procedures/admin/getFirm.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/procedures/admin/getFirm.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/firms/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/router.ts#L11"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firm.admin.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.admin.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmForAdmin.query.ts#L7",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c4b3aad8",
      "interpretation": {
        "sig": "c4b3aad8",
        "summary": "Fetches one firm's admin view, requires the `can_view_firms` grant, and stitches in both its `INVOICE` bank account and, if configured, its `BILL` (client account) bank account from the transaction service.",
        "models": [
          {
            "model": "Firm",
            "service": "identity-service"
          },
          {
            "model": "FirmCounterparty",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.firm.admin.createFirm",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.firm.admin.createFirm",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "createFirmInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firms/procedures/admin/createFirm.mutation.ts",
        "line": 46,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/procedures/admin/createFirm.mutation.ts#L46"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/firms/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/router.ts#L12"
      },
      "hops": {
        "direct": 3,
        "services": [
          "identity-service",
          "assignment-service",
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firm.create",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firm.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/createFirm.mutation.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.getOrCreateDefault",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.getOrCreateDefault",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L95",
            "domain": "people"
          },
          {
            "service": "assignment-service",
            "path": "feePlan.upsert",
            "kind": "write",
            "inferred": false,
            "targetId": "assignment-service:feePlan.upsert",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/feePlan/procedures/upsertFeePlan.mutation.ts#L13",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "firmMember.listFirmMembers",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.listFirmMembers",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/listFirmMembers.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "assignment-service",
            "path": "updateFirmMemberProducts",
            "kind": "write",
            "inferred": false,
            "targetId": "assignment-service:updateFirmMemberProducts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/firmEmployeeToProduct/procedures/updateFirmMemberProducts.mutation.ts#L5",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "upsertFirmCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:upsertFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/upsertFirmCounterpartyInvoice.mutation.ts#L7",
            "domain": "money"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "aafb2edb",
      "interpretation": {
        "sig": "aafb2edb",
        "summary": "Lets an admin with `can_manage_firms` onboard a new firm: creates the `Firm` record, eager-creates its default `OFFICE` and `CLIENT` firm bank accounts (FBAs), optionally sets up a marketplace fee plan, assigns the lead contact's legal products if they're a lawyer, and registers the firm's invoice (and optional bill) counterparty with the transaction service. Market is taken from the admin's own session, not client input, so a GB admin can't create a US firm.",
        "models": [
          {
            "model": "Firm",
            "service": "identity-service"
          },
          {
            "model": "FirmBankAccount",
            "service": "identity-service"
          },
          {
            "model": "FeePlan",
            "service": "assignment-service"
          },
          {
            "model": "FirmCounterparty",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.firm.admin.updateFirm",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.firm.admin.updateFirm",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "identity-service",
          "path": "firm.admin.get",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.admin.get",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmForAdmin.query.ts#L7",
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "transaction-service",
          "path": "getFirmCounterparty",
          "kind": "read",
          "inferred": false,
          "targetId": "transaction-service:getFirmCounterparty",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
          "domain": "money"
        }
      ],
      "inputName": "updateFirmInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firms/procedures/admin/updateFirm.mutation.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/procedures/admin/updateFirm.mutation.ts#L17"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/firms/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/router.ts#L13"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firm.update",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firm.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/updateFirm.mutation.ts#L5",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.getOrCreateDefault",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.getOrCreateDefault",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L95",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "upsertFirmCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:upsertFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/upsertFirmCounterpartyInvoice.mutation.ts#L7",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "deactivateFirmCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:deactivateFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/deactivateFirmCounterparty.mutation.ts#L7",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "updateCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:updateCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/updateCounterparty.mutation.ts#L20",
            "domain": "money"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "edd55f71",
      "interpretation": {
        "sig": "edd55f71",
        "summary": "Lets an admin with `can_manage_firms` (for a firm in their active market) edit a firm's details and reconciles its invoice and bill bank accounts on the transaction service: creating, updating, or deactivating the corresponding counterparty depending on what changed.",
        "models": [
          {
            "model": "Firm",
            "service": "identity-service"
          },
          {
            "model": "FirmCounterparty",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.firm.admin.upsertFeePlan",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.firm.admin.upsertFeePlan",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "identity-service",
          "path": "firm.admin.get",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.admin.get",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmForAdmin.query.ts#L7",
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "transaction-service",
          "path": "getFirmCounterparty",
          "kind": "read",
          "inferred": false,
          "targetId": "transaction-service:getFirmCounterparty",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
          "domain": "money"
        }
      ],
      "inputName": "upsertFeePlanInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firms/procedures/admin/upsertFeePlan.mutation.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/procedures/admin/upsertFeePlan.mutation.ts#L15"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/firms/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/router.ts#L14"
      },
      "hops": {
        "direct": 1,
        "services": [
          "assignment-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "assignment-service",
            "path": "feePlan.upsert",
            "kind": "write",
            "inferred": false,
            "targetId": "assignment-service:feePlan.upsert",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/feePlan/procedures/upsertFeePlan.mutation.ts#L13",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "79461d65",
      "interpretation": {
        "sig": "79461d65",
        "summary": "Lets an admin with `can_manage_firms` create or update a firm's marketplace fee plan (its Lawhive percentage) in the assignment service.",
        "models": [
          {
            "model": "FeePlan",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.firm.admin.updateLeadFirmContact",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.firm.admin.updateLeadFirmContact",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "identity-service",
          "path": "firm.admin.get",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.admin.get",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmForAdmin.query.ts#L7",
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "transaction-service",
          "path": "getFirmCounterparty",
          "kind": "read",
          "inferred": false,
          "targetId": "transaction-service:getFirmCounterparty",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
          "domain": "money"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firms/procedures/admin/updateLeadFirmContact.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/procedures/admin/updateLeadFirmContact.mutation.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/firms/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firms/router.ts#L15"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firm.admin.updateLeadFirmContact",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firm.admin.updateLeadFirmContact",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/updateLeadFirmContact.mutation.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e83040b4",
      "interpretation": {
        "sig": "e83040b4",
        "summary": "Lets an admin with `can_manage_firms` reassign which firm member is the firm's lead contact.",
        "models": [
          {
            "model": "Firm",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.firmBankAccounts.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.firmBankAccounts.create",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firmBankAccounts/procedures/admin/createFirmBankAccount.mutation.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmBankAccounts/procedures/admin/createFirmBankAccount.mutation.ts#L11"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 111,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L111"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmBankAccounts.create",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L83",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "a3586b71",
      "interpretation": {
        "sig": "a3586b71",
        "summary": "Admin creates a bank account record for a firm (role, currency, optional default flag, bank metadata), delegating straight to `identity-service`. Nothing in the codebase currently calls this endpoint.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:identity.firmBankAccounts.markDefault",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.firmBankAccounts.markDefault",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firmBankAccounts/procedures/admin/markDefaultFirmBankAccount.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmBankAccounts/procedures/admin/markDefaultFirmBankAccount.mutation.ts#L12"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 112,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L112"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmBankAccounts.markDefault",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.markDefault",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L110",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "4a79e1f7",
      "interpretation": {
        "sig": "4a79e1f7",
        "summary": "Admin marks one of a firm's existing bank accounts as the default for its role/currency, via `identity-service`, and re-wraps a `CONFLICT` error from that service so it surfaces correctly instead of as a generic 500."
      }
    },
    {
      "id": "platform-api:identity.firmBankAccounts.getOrCreateDefault",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.firmBankAccounts.getOrCreateDefault",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firmBankAccounts/procedures/admin/getOrCreateDefaultFirmBankAccount.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmBankAccounts/procedures/admin/getOrCreateDefaultFirmBankAccount.mutation.ts#L12"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 113,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L113"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmBankAccounts.getOrCreateDefault",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.getOrCreateDefault",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L95",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "ce18ec4f",
      "interpretation": {
        "sig": "ce18ec4f",
        "summary": "Admin fetches the firm's default bank account for a given role and currency, creating one via `identity-service` if none exists yet. Idempotent provisioning, not a plain lookup."
      }
    },
    {
      "id": "platform-api:identity.firmBankAccounts.listForFirm",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.firmBankAccounts.listForFirm",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firmBankAccounts/procedures/admin/listFirmBankAccounts.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmBankAccounts/procedures/admin/listFirmBankAccounts.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 114,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L114"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmBankAccounts.listForFirm",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.listForFirm",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L64",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "e27057d1",
      "interpretation": {
        "sig": "e27057d1",
        "summary": "Admin lists all bank accounts on file for a given firm, read straight through from `identity-service`."
      }
    },
    {
      "id": "platform-api:identity.firmBankAccounts.get",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.firmBankAccounts.get",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firmBankAccounts/procedures/admin/getFirmBankAccount.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmBankAccounts/procedures/admin/getFirmBankAccount.query.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 115,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L115"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmBankAccounts.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L31",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "7139576c",
      "interpretation": {
        "sig": "7139576c",
        "summary": "Admin looks up a single firm bank account by ID, read straight through from `identity-service`. No caller currently hits this endpoint.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:identity.firmLetterhead.admin.get",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.firmLetterhead.admin.get",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firmLetterhead/procedures/admin/getFirmLetterhead.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmLetterhead/procedures/admin/getFirmLetterhead.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/firmLetterhead/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmLetterhead/router.ts#L11"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmLetterhead.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmLetterhead.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmLetterhead/procedures/getFirmLetterhead.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "66c8a6ae",
      "interpretation": {
        "sig": "66c8a6ae",
        "summary": "Admin fetches a firm's saved letterhead (used on outgoing documents) by firm ID, read straight through from `identity-service`."
      }
    },
    {
      "id": "platform-api:identity.firmLetterhead.admin.upsert",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.firmLetterhead.admin.upsert",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpsertFirmLetterheadInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firmLetterhead/procedures/admin/upsertFirmLetterhead.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmLetterhead/procedures/admin/upsertFirmLetterhead.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/firmLetterhead/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmLetterhead/router.ts#L12"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmLetterhead.upsert",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmLetterhead.upsert",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmLetterhead/procedures/upsertFirmLetterhead.mutation.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "ffa104f2",
      "interpretation": {
        "sig": "ffa104f2",
        "summary": "Admin creates or replaces a firm's letterhead, delegating the write to `identity-service`."
      }
    },
    {
      "id": "platform-api:identity.firmMember.admin.getFirmMember",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.firmMember.admin.getFirmMember",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firmMembers/procedures/admin/getFirmMember.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmMembers/procedures/admin/getFirmMember.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/firmMembers/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmMembers/router.ts#L13"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.getFirmMember",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getFirmMember",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getFirmMember.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "lawyer.countActiveLeadMatters",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.countActiveLeadMatters",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/countActiveLeadMatters.query.ts#L4",
            "domain": "matters"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "fb30db57",
      "interpretation": {
        "sig": "fb30db57",
        "summary": "Admin looks up one firm member by ID, combining the `identity-service` record with the caller's own active-lead-matter count from `matter-service`. No caller currently hits this endpoint directly.",
        "flags": [
          "looks unused"
        ],
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.firmMember.admin.listFirmMembers",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.firmMember.admin.listFirmMembers",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListFirmMembersInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firmMembers/procedures/admin/listFirmMembers.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmMembers/procedures/admin/listFirmMembers.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/firmMembers/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmMembers/router.ts#L14"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.listFirmMembers",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.listFirmMembers",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/listFirmMembers.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "matterParticipant.admin.countMattersForPersons",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterParticipant.admin.countMattersForPersons",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/admin/countMattersForPersons.query.ts#L17",
            "domain": "matters"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "239a7c06",
      "interpretation": {
        "sig": "239a7c06",
        "summary": "Admin lists a firm's members, enriching each with their active-matter and lead-matter counts pulled from `matter-service` so the list shows current caseload alongside role and status.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.firmMember.admin.updateFirmMember",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.firmMember.admin.updateFirmMember",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "updateFirmMemberSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firmMembers/procedures/admin/updateFirmMember.mutation.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmMembers/procedures/admin/updateFirmMember.mutation.ts#L21"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/firmMembers/router.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmMembers/router.ts#L15"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "assignment-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.updateFirmMember",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmMember.updateFirmMember",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/updateFirmMember.mutation.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "firmMember.listFirmMembers",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.listFirmMembers",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/listFirmMembers.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "assignment-service",
            "path": "updateFirmMemberProducts",
            "kind": "write",
            "inferred": false,
            "targetId": "assignment-service:updateFirmMemberProducts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/firmEmployeeToProduct/procedures/updateFirmMemberProducts.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "bff9916c",
      "interpretation": {
        "sig": "bff9916c",
        "summary": "Admin updates a firm member's details (including role) in `identity-service`, and if the new role is `LAWYER` or `ADMIN` with selected legal products, also updates that person's product assignments in `assignment-service`.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.firmMember.admin.updateRole",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.firmMember.admin.updateRole",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateRoleInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firmMembers/procedures/admin/updateRole.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmMembers/procedures/admin/updateRole.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/firmMembers/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmMembers/router.ts#L16"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.updateRole",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmMember.updateRole",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/updateRole.mutation.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "d6358cfd",
      "interpretation": {
        "sig": "d6358cfd",
        "summary": "Admin changes a firm member's role, delegating the write to `identity-service`.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.firmMember.admin.createFirmMember",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.firmMember.admin.createFirmMember",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "createFirmMemberSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firmMembers/procedures/admin/createFirmMember.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmMembers/procedures/admin/createFirmMember.mutation.ts#L12"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/firmMembers/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmMembers/router.ts#L17"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "assignment-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.createFirmMemberAndPerson",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmMember.createFirmMemberAndPerson",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/createFirmMemberAndIdentity.mutation.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "firmMember.listFirmMembers",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.listFirmMembers",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/listFirmMembers.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "assignment-service",
            "path": "updateFirmMemberProducts",
            "kind": "write",
            "inferred": false,
            "targetId": "assignment-service:updateFirmMemberProducts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/firmEmployeeToProduct/procedures/updateFirmMemberProducts.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "fc483a23",
      "interpretation": {
        "sig": "fc483a23",
        "summary": "Admin creates a new person and firm-member record together in `identity-service`, and if the assigned role is `LAWYER` or `ADMIN`, also sets that member's legal product assignments in `assignment-service`.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          },
          {
            "model": "Person",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.firmMember.admin.deleteFirmMember",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.firmMember.admin.deleteFirmMember",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "deleteFirmMemberSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firmMembers/procedures/admin/deleteFirmMember.mutation.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmMembers/procedures/admin/deleteFirmMember.mutation.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/firmMembers/router.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmMembers/router.ts#L18"
      },
      "hops": {
        "direct": 3,
        "services": [
          "identity-service",
          "matter-service",
          "assignment-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.getFirmMember",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getFirmMember",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getFirmMember.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "lawyer.countActiveLeadMatters",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.countActiveLeadMatters",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/countActiveLeadMatters.query.ts#L4",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "identity.delete",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:identity.delete",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/deleteIdentity.mutation.ts#L6",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "firmMember.delete",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmMember.delete",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/deleteFirmMember.mutation.ts#L5",
            "domain": "people"
          },
          {
            "service": "assignment-service",
            "path": "deleteFirmEmployeeToProducts",
            "kind": "write",
            "inferred": false,
            "targetId": "assignment-service:deleteFirmEmployeeToProducts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/firmEmployeeToProduct/procedures/deleteFirmEmployeeToProducts.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "f963328f",
      "interpretation": {
        "sig": "f963328f",
        "summary": "Admin permanently removes a firm member: blocks the delete if they're the firm's lead contact or lead on any active matter, otherwise deletes the underlying person and firm-member records in `identity-service` and clears their product-to-firm assignments in `assignment-service`.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          },
          {
            "model": "Person",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.firmMember.admin.reactivateFirmMember",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.firmMember.admin.reactivateFirmMember",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "reactivateFirmMemberSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firmMembers/procedures/admin/reactivateFirmMember.mutation.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmMembers/procedures/admin/reactivateFirmMember.mutation.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/firmMembers/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmMembers/router.ts#L19"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.reactivate",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmMember.reactivate",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/reactivateFirmMember.mutation.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "34b88d60",
      "interpretation": {
        "sig": "34b88d60",
        "summary": "Admin reactivates a previously deactivated firm member, delegating the write to `identity-service`.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.firmMember.admin.removeFromFirm",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.firmMember.admin.removeFromFirm",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "removeFirmMemberFromFirmSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firmMembers/procedures/admin/removeFirmMemberFromFirm.mutation.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmMembers/procedures/admin/removeFirmMemberFromFirm.mutation.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/firmMembers/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmMembers/router.ts#L20"
      },
      "hops": {
        "direct": 3,
        "services": [
          "identity-service",
          "matter-service",
          "assignment-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmMember.getFirmMember",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmMember.getFirmMember",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/getFirmMember.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "lawyer.countActiveLeadMatters",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:lawyer.countActiveLeadMatters",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/countActiveLeadMatters.query.ts#L4",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "firmMember.delete",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmMember.delete",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmMember/procedures/deleteFirmMember.mutation.ts#L5",
            "domain": "people"
          },
          {
            "service": "assignment-service",
            "path": "deleteFirmEmployeeToProducts",
            "kind": "write",
            "inferred": false,
            "targetId": "assignment-service:deleteFirmEmployeeToProducts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/firmEmployeeToProduct/procedures/deleteFirmEmployeeToProducts.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "867bd956",
      "interpretation": {
        "sig": "867bd956",
        "summary": "Admin removes a member from a firm (soft delete, not a full person delete): blocks the removal if they're the lead firm contact or lead on any active matter, otherwise deletes the firm-member record in `identity-service` and clears their product assignments in `assignment-service`.",
        "models": [
          {
            "model": "FirmMember",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.firmMember.admin.sendFirmMemberActivation",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.firmMember.admin.sendFirmMemberActivation",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "SendActivationWorkflowInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/firmMembers/procedures/admin/sendFirmMemberActivation.mutation.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmMembers/procedures/admin/sendFirmMemberActivation.mutation.ts#L17"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/firmMembers/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/firmMembers/router.ts#L21"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "firm.getEnrolledToMarketplace",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.getEnrolledToMarketplace",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmEnrolledToMarketplace.query.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "8065712",
      "interpretation": {
        "sig": "8065712",
        "summary": "Named and typed as a mutation but performs no write of its own: it looks up the person's contact email and the firm's marketplace-enrolment status, upserts their profile in Knock (the notification provider), and fires two Knock notification workflows carrying their Lawhive email credentials. The only persistence is inside Knock, not in platform-v3's own data.",
        "flags": [
          "read-that-writes"
        ]
      }
    },
    {
      "id": "platform-api:identity.teamMember.admin.addTeamMember",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.teamMember.admin.addTeamMember",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "AddTeamMemberInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/teamMembers/procedures/admin/addTeamMember.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teamMembers/procedures/admin/addTeamMember.mutation.ts#L12"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/teamMembers/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teamMembers/router.ts#L10"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "teamMember.add",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:teamMember.add",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/teamMember/procedures/addTeamMember.mutation.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "team.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/getTeam.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "firm.getEnrolledToMarketplace",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.getEnrolledToMarketplace",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmEnrolledToMarketplace.query.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "4d70ca2",
      "interpretation": {
        "sig": "4d70ca2",
        "summary": "Adds a person to a firm team with the given role (default `MEMBER`), then looks up the team and firm marketplace status to send a `teamMembershipChanged` notification to the new member.",
        "models": [
          {
            "model": "TeamMember",
            "service": "identity-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "platform-api:identity.teamMember.admin.removeTeamMember",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.teamMember.admin.removeTeamMember",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "removeTeamMemberInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/teamMembers/procedures/admin/removeTeamMember.mutation.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teamMembers/procedures/admin/removeTeamMember.mutation.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/teamMembers/router.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teamMembers/router.ts#L11"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "teamMember.delete",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:teamMember.delete",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/teamMember/procedures/deleteTeamMember.mutation.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "team.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/getTeam.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "firm.getEnrolledToMarketplace",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.getEnrolledToMarketplace",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmEnrolledToMarketplace.query.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "35278ea2",
      "interpretation": {
        "sig": "35278ea2",
        "summary": "Removes a person from a team, then fetches the team and firm marketplace status to send a `teamMembershipChanged` (removed) notification to the removed person.",
        "models": [
          {
            "model": "TeamMember",
            "service": "identity-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "platform-api:identity.teamMember.admin.updateTeamMemberRole",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.teamMember.admin.updateTeamMemberRole",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "updateTeamMemberRoleInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/teamMembers/procedures/admin/updateTeamMemberRole.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teamMembers/procedures/admin/updateTeamMemberRole.mutation.ts#L12"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/teamMembers/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teamMembers/router.ts#L12"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "teamMember.updateRole",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:teamMember.updateRole",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/teamMember/procedures/updateTeamMemberRole.mutation.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "fd84ad3a",
      "interpretation": {
        "sig": "fd84ad3a",
        "summary": "Changes a team member's role (e.g. to `OWNER` or `MEMBER`) via the identity service. No admin app or service currently calls this route.",
        "models": [
          {
            "model": "TeamMember",
            "service": "identity-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:identity.team.admin.createTeam",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.team.admin.createTeam",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "createTeamInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/teams/procedures/admin/createTeam.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teams/procedures/admin/createTeam.mutation.ts#L12"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/teams/router.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teams/router.ts#L27"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.create",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:team.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/createTeam.mutation.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "6f93c00d",
      "interpretation": {
        "sig": "6f93c00d",
        "summary": "Creates a new team under a firm with the given name.",
        "models": [
          {
            "model": "Team",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.team.admin.getTeam",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.team.admin.getTeam",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "getTeamInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/teams/procedures/admin/getTeam.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teams/procedures/admin/getTeam.query.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/teams/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teams/router.ts#L28"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/getTeam.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "admin.listMattersForAdmin",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.listMattersForAdmin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/listMattersForAdmin.query.ts#L48",
            "domain": "matters"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "2c15cb6c",
      "interpretation": {
        "sig": "2c15cb6c",
        "summary": "Fetches a team's details and members, then cross-references the firm's active matters to attach each member's lead-matter count.",
        "models": [
          {
            "model": "Team",
            "service": "identity-service"
          },
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.team.admin.updateTeam",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.team.admin.updateTeam",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "updateTeamInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/teams/procedures/admin/updateTeam.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teams/procedures/admin/updateTeam.mutation.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/teams/router.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teams/router.ts#L29"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.update",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:team.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/updateTeam.mutation.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "906ce47c",
      "interpretation": {
        "sig": "906ce47c",
        "summary": "Renames a team.",
        "models": [
          {
            "model": "Team",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.team.admin.listTeams",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.team.admin.listTeams",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "listTeamsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/teams/procedures/admin/listTeams.query.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teams/procedures/admin/listTeams.query.ts#L15"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/teams/router.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/teams/router.ts#L30"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "251fe05e",
      "interpretation": {
        "sig": "251fe05e",
        "summary": "Lists teams, filtered either by a set of firm IDs or by a person's membership.",
        "models": [
          {
            "model": "Team",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.admin.persons.updatePerson",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.admin.persons.updatePerson",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateIdentityInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/procedures/admin/updatePerson.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/procedures/admin/updatePerson.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 123,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L123"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.update",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:identity.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/updateIdentity.mutation.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "94be2273",
      "interpretation": {
        "sig": "94be2273",
        "summary": "Updates a person's identity record (e.g. name, contact details) in the identity service.",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.admin.persons.getPerson",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.admin.persons.getPerson",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/procedures/admin/getPerson.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/procedures/admin/getPerson.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 124,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L124"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "4671a833",
      "interpretation": {
        "sig": "4671a833",
        "summary": "Fetches a single person's identity record by ID.",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.admin.persons.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.admin.persons.list",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListIdentitiesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/procedures/admin/listPersons.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/procedures/admin/listPersons.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 125,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L125"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "8ecdfda1",
      "interpretation": {
        "sig": "8ecdfda1",
        "summary": "Lists people's identity records with pagination and filtering.",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.admin.persons.dangerRemoveTestClerkUsers",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.admin.persons.dangerRemoveTestClerkUsers",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/procedures/admin/dangerRemoveTestClerkUsers.mutation.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/procedures/admin/dangerRemoveTestClerkUsers.mutation.ts#L4"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 126,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L126"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "credential.admin.dangerRemoveTestClerkUsers",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:credential.admin.dangerRemoveTestClerkUsers",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/credential/procedures/dangerRemoveClerkTestUsers.ts#L4",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "765f8f98",
      "interpretation": {
        "sig": "765f8f98",
        "summary": "Bulk-deletes test users from Clerk (the auth provider) via the identity service. Named as a dangerous, test-only cleanup operation with no input.",
        "flags": []
      }
    },
    {
      "id": "platform-api:identity.admin.persons.updateLegalRegistrations",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.admin.persons.updateLegalRegistrations",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/procedures/admin/updateLegalRegistrations.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/procedures/admin/updateLegalRegistrations.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 127,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L127"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "assignment-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "legalRegistration.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:legalRegistration.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/legalRegistrations/procedures/listLegalRegistrations.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "legalRegistration.update",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:legalRegistration.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/legalRegistrations/procedures/updateLegalRegistrations.mutation.ts#L5",
            "domain": "people"
          },
          {
            "service": "assignment-service",
            "path": "revokeEmployeeProductsByJurisdiction",
            "kind": "write",
            "inferred": false,
            "targetId": "assignment-service:revokeEmployeeProductsByJurisdiction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/firmEmployeeToProduct/procedures/revokeEmployeeProductsByJurisdiction.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "f892f3d0",
      "interpretation": {
        "sig": "f892f3d0",
        "summary": "Replaces a person's legal registrations (jurisdiction plus registration number) and, for any jurisdiction removed in the update, revokes the employee's assigned products in that jurisdiction.",
        "models": [
          {
            "model": "LegalRegistration",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.admin.persons.listLegalRegistrations",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.admin.persons.listLegalRegistrations",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/procedures/admin/listLegalRegistrations.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/procedures/admin/listLegalRegistrations.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 128,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L128"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "legalRegistration.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:legalRegistration.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/legalRegistrations/procedures/listLegalRegistrations.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "86297fcb",
      "interpretation": {
        "sig": "86297fcb",
        "summary": "Lists a person's legal registrations by jurisdiction. Nothing in the apps or services currently calls this route.",
        "models": [
          {
            "model": "LegalRegistration",
            "service": "identity-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:identity.admin.persons.updateAssignmentAvailabilityStatus",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.admin.persons.updateAssignmentAvailabilityStatus",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/procedures/admin/updateAssignmentAvailabilityStatus.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/procedures/admin/updateAssignmentAvailabilityStatus.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 129,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L129"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.admin.updateAssignmentAvailabilityStatus",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:identity.admin.updateAssignmentAvailabilityStatus",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/updateAssignmentAvailabilityStatus.mutation.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [
        "platform-api/entityActivity.registered"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c48b541c",
      "interpretation": {
        "sig": "c48b541c",
        "summary": "Updates whether a person is available for assignment work, recording the acting admin as the author and firing an `entityActivity.registered` event for the audit trail.",
        "models": [
          {
            "model": "Identity",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.admin.adminProfile.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.admin.adminProfile.list",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "unscopedAdminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListAdminProfilesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/admin-profile/procedures/listAdminProfiles.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/admin-profile/procedures/listAdminProfiles.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 133,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L133"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "adminProfile.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:adminProfile.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/adminProfile/admin-profile-controller.ts#L72",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "a5c665ae",
      "interpretation": {
        "sig": "a5c665ae",
        "summary": "Lists admin profiles, gated behind the `can_view_admins` permission.",
        "models": [
          {
            "model": "AdminProfile",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.admin.adminProfile.get",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.admin.adminProfile.get",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "unscopedAdminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetAdminProfileInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/admin-profile/procedures/getAdminProfile.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/admin-profile/procedures/getAdminProfile.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 134,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L134"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "adminProfile.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:adminProfile.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/adminProfile/admin-profile-controller.ts#L63",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "f7e3db11",
      "interpretation": {
        "sig": "f7e3db11",
        "summary": "Fetches a single admin profile, gated behind the `can_view_admins` permission. Nothing in the apps or services currently calls this route.",
        "models": [
          {
            "model": "AdminProfile",
            "service": "identity-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:identity.admin.adminProfile.upsert",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.admin.adminProfile.upsert",
      "module": "identity",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "unscopedAdminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpsertAdminProfileInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/admin-profile/procedures/upsertAdminProfile.mutation.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/admin-profile/procedures/upsertAdminProfile.mutation.ts#L11"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 135,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L135"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "adminProfile.upsert",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:adminProfile.upsert",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/adminProfile/admin-profile-controller.ts#L91",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "356d369",
      "interpretation": {
        "sig": "356d369",
        "summary": "Admin ops staff create or update another admin's profile, after checking the caller isn't granting roles or markets beyond their own permission scope. Delegates the actual write to the identity service.",
        "models": [
          {
            "model": "AdminProfile",
            "service": "identity-service"
          }
        ],
        "flags": [
          "via-services write"
        ]
      }
    },
    {
      "id": "platform-api:identity.admin.adminProfile.deactivate",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.admin.adminProfile.deactivate",
      "module": "identity",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "unscopedAdminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "DeactivateAdminProfileInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/admin-profile/procedures/deactivateAdminProfile.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/admin-profile/procedures/deactivateAdminProfile.mutation.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 136,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L136"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "adminProfile.deactivate",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:adminProfile.deactivate",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/adminProfile/admin-profile-controller.ts#L95",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6cef7124",
      "interpretation": {
        "sig": "6cef7124",
        "summary": "Deactivates another admin's profile in identity service, blocking a caller from deactivating themselves. Requires `can_manage_admins` permission.",
        "models": [
          {
            "model": "AdminProfile",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.admin.getMe",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.admin.getMe",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "unscopedAdminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/procedures/getMe.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/procedures/getMe.query.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 138,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L138"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "a990612d",
      "interpretation": {
        "sig": "a990612d",
        "summary": "Returns the calling admin's own identity plus their computed admin permissions (grants and markets). Read-only.",
        "flags": []
      }
    },
    {
      "id": "platform-api:identity.admin.listFirms",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.admin.listFirms",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/procedures/listFirms.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/procedures/listFirms.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 139,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L139"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firm.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/listFirms.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "e642e34b",
      "interpretation": {
        "sig": "e642e34b",
        "summary": "Lists law firms (optionally filtered by firm IDs) for admin ops, fetched from the identity service's firm registry.",
        "models": [
          {
            "model": "Firm",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.admin.reviews.listPersonsReviews",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.admin.reviews.listPersonsReviews",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListIdentityReviewsSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/procedures/admin/reviews/listPersonsReviews.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/procedures/admin/reviews/listPersonsReviews.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 141,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L141"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "review.listPersonReviews",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:review.listPersonReviews",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/review/procedures/listIdentityReviews.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "384d7324",
      "interpretation": {
        "sig": "384d7324",
        "summary": "Lists a person's reviews (e.g. a lawyer's ratings history) for admin ops, paged from the identity service.",
        "models": [
          {
            "model": "Review",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.admin.reviews.updateReview",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.admin.reviews.updateReview",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateReviewSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/procedures/admin/reviews/updateReview.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/procedures/admin/reviews/updateReview.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 142,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L142"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "review.updateReview",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:review.updateReview",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/review/procedures/updateReview.mutation.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "a5027974",
      "interpretation": {
        "sig": "a5027974",
        "summary": "Lets admin ops edit an existing review record (rating and/or text) via the identity service.",
        "models": [
          {
            "model": "Review",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.admin.reviews.getRatingAverage",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "identity.admin.reviews.getRatingAverage",
      "module": "identity",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/procedures/admin/reviews/getRatingAverage.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/procedures/admin/reviews/getRatingAverage.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 143,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L143"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "review.getRatingAverage",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:review.getRatingAverage",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/review/procedures/getRatingAverage.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "b2b5bbce",
      "interpretation": {
        "sig": "b2b5bbce",
        "summary": "Returns a person's average rating and total review count from the identity service, for admin ops.",
        "models": [
          {
            "model": "Review",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:invoice.admin.cancelMany",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "invoice.admin.cancelMany",
      "module": "invoice",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CancelManyInvoicesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/invoice/procedures/admin/cancelManyInvoices.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/invoice/procedures/admin/cancelManyInvoices.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/invoice/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/invoice/router.ts#L21"
      },
      "hops": {
        "direct": 2,
        "services": [
          "work-service",
          "transaction-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "invoice.list",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:invoice.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/listInvoices.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "invoice.cancelMany",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:invoice.cancelMany",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/cancelManyInvoices.mutation.ts#L5",
            "domain": "money"
          },
          {
            "service": "work-service",
            "path": "invoice.cancelMany",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:invoice.cancelMany",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/cancelManyInvoices.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c56aa9db",
      "interpretation": {
        "sig": "c56aa9db",
        "summary": "Admin action that cancels a batch of invoices: cancels the matching new-ledger invoices in `transaction-service` first, then cancels the legacy `work-service` invoice records, so a partial failure still leaves the old admin portal view consistent.",
        "models": [
          {
            "model": "Invoice",
            "service": "transaction-service"
          },
          {
            "model": "Invoice",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:invoice.admin.listAttorneyBills",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "invoice.admin.listAttorneyBills",
      "module": "invoice",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListClientBillsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/invoice/procedures/admin/listAttorneyBills.query.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/invoice/procedures/admin/listAttorneyBills.query.ts#L35"
      },
      "router": {
        "file": "apis/platform-api/src/modules/invoice/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/invoice/router.ts#L22"
      },
      "hops": {
        "direct": 1,
        "services": [
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "invoice.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:invoice.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/listInvoices.query.ts#L8",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "94559436",
      "interpretation": {
        "sig": "94559436",
        "summary": "Lists `BILL`-type invoices (any status except draft) for the admin ops view of attorney bills, with filtering, sorting and pagination.",
        "models": [
          {
            "model": "Invoice",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:invoice.admin.listClientPaymentRequests",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "invoice.admin.listClientPaymentRequests",
      "module": "invoice",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListClientPaymentRequestsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/invoice/procedures/admin/listClientPaymentRequests.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/invoice/procedures/admin/listClientPaymentRequests.query.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/invoice/router.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/invoice/router.ts#L23"
      },
      "hops": {
        "direct": 1,
        "services": [
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "invoice.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:invoice.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/listInvoices.query.ts#L8",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c69a1e1e",
      "interpretation": {
        "sig": "c69a1e1e",
        "summary": "Lists `CLIENT_FUNDS`-type invoices for the admin client payment requests screen.",
        "models": [
          {
            "model": "Invoice",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:invoice.admin.getBillById",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "invoice.admin.getBillById",
      "module": "invoice",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetClientBillByIdInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/invoice/procedures/admin/getBillById.query.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/invoice/procedures/admin/getBillById.query.ts#L13"
      },
      "router": {
        "file": "apis/platform-api/src/modules/invoice/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/invoice/router.ts#L24"
      },
      "hops": {
        "direct": 2,
        "services": [
          "transaction-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "transaction-service",
            "path": "invoice.get",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:invoice.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/getInvoice.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "matter-service",
            "path": "admin.getMatterForAdmin",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.getMatterForAdmin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
            "domain": "matters"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "4312bea3",
      "interpretation": {
        "sig": "4312bea3",
        "summary": "Fetches one bill by id for admin, with the matter, lead client, lead lawyer and firm it belongs to when the bill is linked to a matter.",
        "models": [
          {
            "model": "Invoice",
            "service": "transaction-service"
          },
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:invoice.admin.downloadPDF",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "invoice.admin.downloadPDF",
      "module": "invoice",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "DownloadPDFInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/invoice/procedures/admin/downloadPDF.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/invoice/procedures/admin/downloadPDF.mutation.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/invoice/router.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/invoice/router.ts#L25"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "34c11991",
      "interpretation": {
        "sig": "34c11991",
        "summary": "Stub mutation: returns a canned success message and does not generate or return any PDF. No downstream calls exist yet.",
        "flags": [
          "mocked / not implemented"
        ]
      }
    },
    {
      "id": "platform-api:invoice.admin.updateBill",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "invoice.admin.updateBill",
      "module": "invoice",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateBillInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/invoice/procedures/admin/updateBill.mutation.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/invoice/procedures/admin/updateBill.mutation.ts#L11"
      },
      "router": {
        "file": "apis/platform-api/src/modules/invoice/router.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/invoice/router.ts#L26"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "5c7efbd3",
      "interpretation": {
        "sig": "5c7efbd3",
        "summary": "Stub mutation: accepts a bill id and optional notes but returns a canned success message without touching any bill data.",
        "flags": [
          "mocked / not implemented",
          "mutation only reads"
        ]
      }
    },
    {
      "id": "platform-api:invoice.admin.rejectBill",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "invoice.admin.rejectBill",
      "module": "invoice",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RejectBillInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/invoice/procedures/admin/rejectBill.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/invoice/procedures/admin/rejectBill.mutation.ts#L12"
      },
      "router": {
        "file": "apis/platform-api/src/modules/invoice/router.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/invoice/router.ts#L27"
      },
      "hops": {
        "direct": 1,
        "services": [
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "invoice.update",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:invoice.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/updateInvoice.mutation.ts#L8",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "2ec9f4",
      "interpretation": {
        "sig": "2ec9f4",
        "summary": "Admin action that marks a bill `REJECTED` in `transaction-service`, recording the rejection reason.",
        "models": [
          {
            "model": "Invoice",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:invoice.admin.recordBillPayment",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "invoice.admin.recordBillPayment",
      "module": "invoice",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RecordBillPaymentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/invoice/procedures/admin/recordBillPayment.mutation.ts",
        "line": 50,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/invoice/procedures/admin/recordBillPayment.mutation.ts#L50"
      },
      "router": {
        "file": "apis/platform-api/src/modules/invoice/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/invoice/router.ts#L28"
      },
      "hops": {
        "direct": 4,
        "services": [
          "transaction-service",
          "matter-service",
          "payment-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "transaction-service",
            "path": "invoice.get",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:invoice.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/getInvoice.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          },
          {
            "service": "matter-service",
            "path": "admin.getMatterForAdmin",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.getMatterForAdmin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
            "domain": "matters"
          },
          {
            "service": "payment-service",
            "path": "payments.getOrCreateBankCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:payments.getOrCreateBankCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/getOrCreateBankCounterparty.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.getOrCreateDefault",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.getOrCreateDefault",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L95",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "getOrCreateFirmTransactionTypeCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:getOrCreateFirmTransactionTypeCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getOrCreateFirmTransactionTypeCounterparty.mutation.ts#L14",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "payments.createBankPayment",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:payments.createBankPayment",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/createBankPayment.mutation.ts#L8",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [
        "payment-service/bankPayment.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "deac70e3",
      "interpretation": {
        "sig": "deac70e3",
        "summary": "Admin action that pays out an attorney bill by bank transfer: looks up the invoice and its transaction intent, resolves or creates the office and firm bank counterparties (via `identity-service` and `payment-service`), then creates a bank payment moving money from the office account to the admin-supplied or firm's own account.",
        "flags": [
          "fires payment-service/bankPayment.created downstream (comment only, no explicit emit found in code)"
        ],
        "models": [
          {
            "model": "Invoice",
            "service": "transaction-service"
          },
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          },
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "BankAccount",
            "service": "identity-service"
          },
          {
            "model": "Payment",
            "service": "payment-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:ledger.admin.transactions.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "ledger.admin.transactions.list",
      "module": "ledger",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "InputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/ledger/procedures/admin/listTransactions.query.ts",
        "line": 49,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/procedures/admin/listTransactions.query.ts#L49"
      },
      "router": {
        "file": "apis/platform-api/src/modules/ledger/router.admin.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/router.admin.ts#L12"
      },
      "hops": {
        "direct": 3,
        "services": [
          "ledger-service",
          "transaction-service",
          "payment-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "ledger-service",
            "path": "transactions.list",
            "kind": "read",
            "inferred": false,
            "targetId": "ledger-service:transactions.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/procedures/listTransactions.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "reconciliation.list",
            "kind": "read",
            "inferred": false,
            "targetId": "payment-service:reconciliation.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/reconciliation/procedures/listReconciliations.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "payments.listPayments",
            "kind": "read",
            "inferred": false,
            "targetId": "payment-service:payments.listPayments",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/listPayments.query.ts#L8",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "45c52704",
      "interpretation": {
        "sig": "45c52704",
        "summary": "Admin-ops equivalent of the lawyer transactions list: returns ledger transactions for an account plus their counterparties, reconciliations, and payment records, with no firm-membership scoping.",
        "flags": [
          "read-only"
        ]
      }
    },
    {
      "id": "platform-api:ledger.admin.transactions.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "ledger.admin.transactions.create",
      "module": "ledger",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "createTransactionSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/ledger/procedures/admin/createTransaction.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/procedures/admin/createTransaction.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/ledger/router.admin.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/router.admin.ts#L13"
      },
      "hops": {
        "direct": 5,
        "services": [
          "matter-service",
          "transaction-service",
          "payment-service",
          "identity-service",
          "ledger-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "admin.getMatterForAdmin",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.getMatterForAdmin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "getOrCreateExternalCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:getOrCreateExternalCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getOrCreateExternalCounterparty.mutation.ts#L5",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "payments.getOrCreateBankCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:payments.getOrCreateBankCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/getOrCreateBankCounterparty.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "getCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getCounterparty.query.ts#L9",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.getOrCreateDefault",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.getOrCreateDefault",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L95",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.create",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/createTransactionIntent.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "payments.createBankPayment",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:payments.createBankPayment",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/createBankPayment.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "reconciliation.create",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:reconciliation.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/reconciliation/procedures/createReconciliation.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "ledger-service",
            "path": "transactions.create",
            "kind": "write",
            "inferred": false,
            "targetId": "ledger-service:transactions.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/transaction/transaction-controller.ts#L29",
            "domain": "money"
          },
          {
            "service": "matter-service",
            "path": "matterFile.internal.attachMatterFileToTransaction",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFile.internal.attachMatterFileToTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/internal/attachMatterFileToTransaction.mutation.ts#L11",
            "domain": "matters"
          }
        ]
      },
      "domain": "money",
      "triggers": [
        "payment-service/bankPayment.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "cf258950",
      "interpretation": {
        "sig": "cf258950",
        "summary": "Admin-ops equivalent of the lawyer create-transaction mutation: lets Lawhive ops record a manual ledger entry (bill, invoice, or refund) on any matter, running the same counterparty resolution, `TransactionIntent`, `BankPayment`, reconciliation, and ledger `Transaction` write chain, with optional matter-file attachment.",
        "models": [
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          },
          {
            "model": "Transaction",
            "service": "ledger-service"
          },
          {
            "model": "BankPayment",
            "service": "payment-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:ledger.admin.transactions.createFromFba",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "ledger.admin.transactions.createFromFba",
      "module": "ledger",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "createTransactionFromFbaSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/ledger/procedures/admin/createTransactionFromFba.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/procedures/admin/createTransactionFromFba.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/ledger/router.admin.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/router.admin.ts#L14"
      },
      "hops": {
        "direct": 5,
        "services": [
          "matter-service",
          "identity-service",
          "transaction-service",
          "payment-service",
          "ledger-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "admin.getMatterForAdmin",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.getMatterForAdmin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L31",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "getOrCreateExternalCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:getOrCreateExternalCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getOrCreateExternalCounterparty.mutation.ts#L5",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "payments.getOrCreateBankCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:payments.getOrCreateBankCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/getOrCreateBankCounterparty.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "getCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getCounterparty.query.ts#L9",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.getOrCreateDefault",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.getOrCreateDefault",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L95",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.create",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/createTransactionIntent.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "payments.createBankPayment",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:payments.createBankPayment",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/createBankPayment.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "reconciliation.create",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:reconciliation.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/reconciliation/procedures/createReconciliation.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "ledger-service",
            "path": "transactions.create",
            "kind": "write",
            "inferred": false,
            "targetId": "ledger-service:transactions.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/transaction/transaction-controller.ts#L29",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [
        "payment-service/bankPayment.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "c6037cec",
      "interpretation": {
        "sig": "c6037cec",
        "summary": "Admin-ops equivalent of the lawyer `createFromFba` mutation: lets Lawhive ops record a manual ledger entry against a specific firm bank account on any matter, with the same FBA validation and write chain (`TransactionIntent`, `BankPayment`, reconciliation, ledger `Transaction`).",
        "models": [
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          },
          {
            "model": "Transaction",
            "service": "ledger-service"
          },
          {
            "model": "BankPayment",
            "service": "payment-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:ledger.admin.transactions.transfer",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "ledger.admin.transactions.transfer",
      "module": "ledger",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "transferFundsSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/ledger/procedures/admin/transferFunds.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/procedures/admin/transferFunds.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/ledger/router.admin.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/router.admin.ts#L15"
      },
      "hops": {
        "direct": 4,
        "services": [
          "matter-service",
          "identity-service",
          "transaction-service",
          "ledger-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "admin.getMatterForAdmin",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.getMatterForAdmin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L31",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.create",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/createTransactionIntent.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "ledger-service",
            "path": "transactions.create",
            "kind": "write",
            "inferred": false,
            "targetId": "ledger-service:transactions.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/transaction/transaction-controller.ts#L29",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "722a9e09",
      "interpretation": {
        "sig": "722a9e09",
        "summary": "Admin-ops equivalent of the lawyer transfer mutation: lets Lawhive ops move funds between two of a firm's own bank accounts on any matter as an internal book transfer, writing one `TransactionIntent` and one ledger `Transaction` directly.",
        "models": [
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          },
          {
            "model": "Transaction",
            "service": "ledger-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:ledger.admin.transactions.updateDescription",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "ledger.admin.transactions.updateDescription",
      "module": "ledger",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/ledger/procedures/admin/updateTransactionDescription.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/procedures/admin/updateTransactionDescription.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/ledger/router.admin.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/router.admin.ts#L16"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "ledger-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "admin.getMatterForAdmin",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.getMatterForAdmin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
            "domain": "matters"
          },
          {
            "service": "ledger-service",
            "path": "transactions.getById",
            "kind": "read",
            "inferred": false,
            "targetId": "ledger-service:transactions.getById",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/procedures/getTransaction.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "ledger-service",
            "path": "transactions.updateDescription",
            "kind": "write",
            "inferred": false,
            "targetId": "ledger-service:transactions.updateDescription",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/transaction/transaction-controller.ts#L82",
            "domain": "money"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "9ed3aec9",
      "interpretation": {
        "sig": "9ed3aec9",
        "summary": "Admin-ops equivalent of the lawyer `updateDescription` mutation: lets Lawhive ops edit the description on any matter's ledger transaction after verifying it belongs to that matter.",
        "models": [
          {
            "model": "Transaction",
            "service": "ledger-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:ledger.admin.transactions.reverse",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "ledger.admin.transactions.reverse",
      "module": "ledger",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "reverseTransactionSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/ledger/procedures/admin/reverseTransaction.mutation.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/procedures/admin/reverseTransaction.mutation.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/ledger/router.admin.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/router.admin.ts#L17"
      },
      "hops": {
        "direct": 3,
        "services": [
          "matter-service",
          "ledger-service",
          "transaction-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "admin.getMatterForAdmin",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.getMatterForAdmin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
            "domain": "matters"
          },
          {
            "service": "ledger-service",
            "path": "transactions.getById",
            "kind": "read",
            "inferred": false,
            "targetId": "ledger-service:transactions.getById",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/procedures/getTransaction.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.get",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/getTransactionIntent.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.create",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/createTransactionIntent.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "ledger-service",
            "path": "transactions.create",
            "kind": "write",
            "inferred": false,
            "targetId": "ledger-service:transactions.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/transaction/transaction-controller.ts#L29",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "c03a5956",
      "interpretation": {
        "sig": "c03a5956",
        "summary": "Admin-ops equivalent of the lawyer reverse mutation: lets Lawhive ops reverse any matter's ledger transaction by minting a linked reversing `TransactionIntent` and writing a `Transaction` with swapped postings, without editing the original.",
        "models": [
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          },
          {
            "model": "Transaction",
            "service": "ledger-service"
          }
        ],
        "flags": [
          "non-atomic: a failure after minting the reversal intent can leave it dangling without a matching ledger write"
        ]
      }
    },
    {
      "id": "platform-api:ledger.admin.transactions.getReversalState",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "ledger.admin.transactions.getReversalState",
      "module": "ledger",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/ledger/procedures/admin/getReversalState.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/procedures/admin/getReversalState.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/ledger/router.admin.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/router.admin.ts#L18"
      },
      "hops": {
        "direct": 2,
        "services": [
          "ledger-service",
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "ledger-service",
            "path": "transactions.getById",
            "kind": "read",
            "inferred": false,
            "targetId": "ledger-service:transactions.getById",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/procedures/getTransaction.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "31f65758",
      "interpretation": {
        "sig": "31f65758",
        "summary": "Admin-ops equivalent of the lawyer `getReversalState` query: checks whether a transaction already has a reversal recorded against it, without matter-membership scoping."
      }
    },
    {
      "id": "platform-api:ledger.admin.accounts.listForMatter",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "ledger.admin.accounts.listForMatter",
      "module": "ledger",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/ledger/procedures/admin/listMatterClientAccountsWithBalance.query.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/procedures/admin/listMatterClientAccountsWithBalance.query.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/ledger/router.admin.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/router.admin.ts#L21"
      },
      "hops": {
        "direct": 4,
        "services": [
          "matter-service",
          "identity-service",
          "ledger-service",
          "transaction-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.listForFirm",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.listForFirm",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L64",
            "domain": "people"
          },
          {
            "service": "ledger-service",
            "path": "accounts.balanceBatch",
            "kind": "read",
            "inferred": false,
            "targetId": "ledger-service:accounts.balanceBatch",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/account/account-controller.ts#L98",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.listPendingForMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.listPendingForMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listPendingForMatter.query.ts#L25",
            "domain": "money"
          },
          {
            "service": "ledger-service",
            "path": "accounts.list",
            "kind": "read",
            "inferred": false,
            "targetId": "ledger-service:accounts.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/procedures/listAccounts.query.ts#L9",
            "domain": "money"
          },
          {
            "service": "ledger-service",
            "path": "accounts.getBalance",
            "kind": "read",
            "inferred": false,
            "targetId": "ledger-service:accounts.getBalance",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/procedures/getAccountsBalance.mutation.ts#L17",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "a73ee201",
      "interpretation": {
        "sig": "a73ee201",
        "summary": "Admin-ops equivalent of the lawyer `accounts.listForMatter` query: lists a matter's client/office ledger accounts with balances and pending transaction intents, for any matter.",
        "flags": [
          "read-only"
        ]
      }
    },
    {
      "id": "platform-api:payments.stripe.refund",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "payments.stripe.refund",
      "module": "payments",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "issueStripeRefundInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/ledger/procedures/admin/issueStripeRefund.mutation.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/ledger/procedures/admin/issueStripeRefund.mutation.ts#L17"
      },
      "router": {
        "file": "apis/platform-api/router.ts",
        "line": 108,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/router.ts#L108"
      },
      "hops": {
        "direct": 2,
        "services": [
          "payment-service",
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "payment-service",
            "path": "payments.listStripePayments",
            "kind": "read",
            "inferred": false,
            "targetId": "payment-service:payments.listStripePayments",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/listStripePayments.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "reconciliation.list",
            "kind": "read",
            "inferred": false,
            "targetId": "payment-service:reconciliation.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/reconciliation/procedures/listReconciliations.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.createRefund",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.createRefund",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/createStripeRefundTransactionIntent.mutation.ts#L24",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "payments.issueStripeRefund",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:payments.issueStripeRefund",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/issueStripeRefund.mutation.ts#L9",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [
        "payment-service/reconciliation.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "9a67b983",
      "interpretation": {
        "sig": "9a67b983",
        "summary": "Admin refunds a Stripe payment by intent ID and amount: it looks up the original transaction via `payment-service` and `transaction-service`, creates a new refund transaction intent in `PENDING` status, then calls `payment-service` to issue the actual Stripe refund. Fails if the payment intent matches no payment, no reconciliation, or more than one payment transaction.",
        "models": [
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          },
          {
            "model": "Payment",
            "service": "payment-service"
          },
          {
            "model": "Reconciliation",
            "service": "payment-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.comment.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.comment.create",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/comment/procedures/admin/createComment.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/comment/procedures/admin/createComment.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/comment/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/comment/router.ts#L21"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "comment.create",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:comment.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/comment/comment-controller.ts#L36",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c106527d",
      "interpretation": {
        "sig": "c106527d",
        "summary": "Adds a comment to a matter, for either a lawyer (own identity) or an admin acting on the matter, and forwards the write to `matter-service`."
      }
    },
    {
      "id": "platform-api:matter.comment.update",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.comment.update",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateCommentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/comment/procedures/admin/updateComment.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/comment/procedures/admin/updateComment.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/comment/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/comment/router.ts#L22"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "comment.update",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:comment.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/comment/comment-controller.ts#L45",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "f2444348",
      "interpretation": {
        "sig": "f2444348",
        "summary": "Edits an existing matter comment's content, callable by a lawyer or an admin, delegated to `matter-service`."
      }
    },
    {
      "id": "platform-api:matter.comment.delete",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.comment.delete",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "DeleteCommentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/comment/procedures/admin/deleteComment.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/comment/procedures/admin/deleteComment.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/comment/router.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/comment/router.ts#L23"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "comment.delete",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:comment.delete",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/comment/comment-controller.ts#L52",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "6d5190a6",
      "interpretation": {
        "sig": "6d5190a6",
        "summary": "Deletes a matter comment (lawyer or admin), delegated to `matter-service`."
      }
    },
    {
      "id": "platform-api:matter.comment.restore",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.comment.restore",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RestoreCommentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/comment/procedures/admin/restoreComment.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/comment/procedures/admin/restoreComment.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/comment/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/comment/router.ts#L24"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "comment.restore",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:comment.restore",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/comment/comment-controller.ts#L59",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "aa76a20b",
      "interpretation": {
        "sig": "aa76a20b",
        "summary": "Restores a previously deleted matter comment, callable by a lawyer or an admin."
      }
    },
    {
      "id": "platform-api:matter.comment.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.comment.list",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListCommentsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/comment/procedures/admin/listComments.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/comment/procedures/admin/listComments.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/comment/router.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/comment/router.ts#L25"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "comment.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:comment.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/comment/comment-controller.ts#L68",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "e317b985",
      "interpretation": {
        "sig": "e317b985",
        "summary": "Lists the comments on a matter, for a lawyer's own view or for admin review."
      }
    },
    {
      "id": "platform-api:matter.matterContacts.admin.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterContacts.admin.list",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListMatterContactsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterContacts/procedures/admin/list.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterContacts/procedures/admin/list.query.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterContacts/router.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterContacts/router.ts#L26"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "admin.getMatterForAdmin",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.getMatterForAdmin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "matterContact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterContact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/list.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "matterContactSlot.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterContactSlot.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContactSlot/procedures/list.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "contact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/list.query.ts#L31",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "5950a593",
      "interpretation": {
        "sig": "5950a593",
        "summary": "Lists contacts attached to a matter for admin/ops, joining in each contact's `identity-service` record; when scoped to a `matterId` it also returns the matter's contact slots, and when listing across matters (no `matterId`) slots come back empty.",
        "models": [
          {
            "model": "MatterContact",
            "service": "matter-service"
          },
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterContacts.admin.listSuggested",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterContacts.admin.listSuggested",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListSuggestedMatterContactsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterContacts/procedures/admin/list-suggested.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterContacts/procedures/admin/list-suggested.query.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterContacts/router.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterContacts/router.ts#L27"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "admin.getMatterForAdmin",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.getMatterForAdmin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "matterContact.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterContact.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/list.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "contact.searchWithRelations",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:contact.searchWithRelations",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/contact/procedures/search-with-relations.query.ts#L107",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "5bc0b41b",
      "interpretation": {
        "sig": "5bc0b41b",
        "summary": "Suggests contacts admin/ops could add to a matter, searching the firm's `identity-service` contacts while excluding people already attached to the matter (optionally filtered to one role).",
        "models": [
          {
            "model": "Contact",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterContacts.admin.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterContacts.admin.create",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateAdminMatterContactInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterContacts/procedures/admin/create.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterContacts/procedures/admin/create.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterContacts/router.ts",
        "line": 28,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterContacts/router.ts#L28"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterContact.create",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterContact.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/create.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "aab397d9",
      "interpretation": {
        "sig": "aab397d9",
        "summary": "Creates a new matter contact for admin/ops, recording the acting admin as `createdById`.",
        "models": [
          {
            "model": "MatterContact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterContacts.admin.update",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterContacts.admin.update",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateMatterContactInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterContacts/procedures/admin/update.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterContacts/procedures/admin/update.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterContacts/router.ts",
        "line": 29,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterContacts/router.ts#L29"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterContact.update",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterContact.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/update.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "96b18cca",
      "interpretation": {
        "sig": "96b18cca",
        "summary": "Updates an existing matter contact's details for admin/ops.",
        "models": [
          {
            "model": "MatterContact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterContacts.admin.delete",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterContacts.admin.delete",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "DeleteMatterContactInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterContacts/procedures/admin/delete.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterContacts/procedures/admin/delete.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterContacts/router.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterContacts/router.ts#L30"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterContact.deleteWithCascade",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterContact.deleteWithCascade",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterContact/procedures/delete-with-cascade.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "e0086116",
      "interpretation": {
        "sig": "e0086116",
        "summary": "Deletes a matter contact for admin/ops, cascading to anything hanging off it (e.g. dependent contact records).",
        "models": [
          {
            "model": "MatterContact",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFileFolder.admin.listMatterFileFolders",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterFileFolder.admin.listMatterFileFolders",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFileFolders/procedures/admin/listMatterFileFolders.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFileFolders/procedures/admin/listMatterFileFolders.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFileFolders/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFileFolders/router.ts#L20"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFileFolder.admin.listMatterFileFolders",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterFileFolder.admin.listMatterFileFolders",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFileFolders/procedures/admin/listMatterFileFolders.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ed3675de",
      "interpretation": {
        "sig": "ed3675de",
        "summary": "Lists the file folders on a matter for admin/ops. Thin pass-through to `matter-service`."
      }
    },
    {
      "id": "platform-api:matter.matterFile.lawyer.listMatterFiles",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterFile.lawyer.listMatterFiles",
      "module": "matter",
      "roleFolder": "lawyer",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "legal-os",
        "member": "firm member (lawyer)",
        "kind": "lawyer",
        "builder": "lawyerProcedure",
        "base": "lawyerIdentityProcedure",
        "middlewares": [
          "firmContextMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "firmContextMiddleware",
          "service": "identity-service",
          "path": "firm.listFirmMemberships",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.listFirmMemberships",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/list-firm-memberships.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/lawyer/listMatterFiles.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/lawyer/listMatterFiles.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 42,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L42"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.lawyer.listMatterFiles",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterFile.lawyer.listMatterFiles",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/lawyer/listMatterFiles.query.ts#L7",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "22045129",
      "interpretation": {
        "sig": "22045129",
        "summary": "Lists the files attached to a matter for the firm lawyer's view. Pure passthrough read to `matter-service`, no local logic.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFile.admin.listMatterFiles",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterFile.admin.listMatterFiles",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListMatterFilesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/admin/listMatterFiles.query.ts",
        "line": 40,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/admin/listMatterFiles.query.ts#L40"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 45,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L45"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.admin.listMatterFiles",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterFile.admin.listMatterFiles",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/admin/listMatterFiles.query.ts#L41",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7ce75e96",
      "interpretation": {
        "sig": "7ce75e96",
        "summary": "Lists a matter's files for admin/ops with pagination, sorting (by name, id, created date, visibility, uploader, or folder) and filtering. Thin pass-through to `matter-service`."
      }
    },
    {
      "id": "platform-api:matter.matterFile.admin.getPreviewFileUrl",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterFile.admin.getPreviewFileUrl",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/admin/getPreviewFileUrl.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/admin/getPreviewFileUrl.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 46,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L46"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.admin.getPreviewFileUrl",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterFile.admin.getPreviewFileUrl",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/admin/getPreviewFileUrl.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "7209e123",
      "interpretation": {
        "sig": "7209e123",
        "summary": "Returns a preview URL for a given matter file, for admin/ops viewing. Thin pass-through to `matter-service`."
      }
    },
    {
      "id": "platform-api:matter.matterFile.admin.listMatterFileUploaders",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterFile.admin.listMatterFileUploaders",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/admin/listMatterFileUploaders.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/admin/listMatterFileUploaders.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 47,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L47"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.admin.listMatterFileUploaders",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterFile.admin.listMatterFileUploaders",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/admin/listMatterFileUploaders.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b3f79868",
      "interpretation": {
        "sig": "b3f79868",
        "summary": "Lists the distinct people who have uploaded files to a matter, for admin/ops filter menus. Thin pass-through to `matter-service`."
      }
    },
    {
      "id": "platform-api:matter.matterFile.admin.insertMatterFile",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterFile.admin.insertMatterFile",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "InsertMatterFileInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/admin/insertMatterFile.mutation.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/admin/insertMatterFile.mutation.ts#L20"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 48,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L48"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.admin.insertMatterFile",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFile.admin.insertMatterFile",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/admin/insertMatterFile.mutation.ts#L20",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/file.uploaded"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "394e67b9",
      "interpretation": {
        "sig": "394e67b9",
        "summary": "Registers a file already uploaded to S3 as a matter file for admin/ops, recording its display name, original name, visibility and source.",
        "flags": [
          "listed Inngest trigger matter-service/file.uploaded is the effect of this write, not something this procedure listens for"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFile.admin.deleteMatterFile",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterFile.admin.deleteMatterFile",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/admin/deleteMatterFile.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/admin/deleteMatterFile.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 49,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L49"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.admin.deleteMatterFile",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFile.admin.deleteMatterFile",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/admin/deleteMatterFile.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/file.deleted"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "2a9e7b96",
      "interpretation": {
        "sig": "2a9e7b96",
        "summary": "Lets an admin delete a file attached to a matter. Delegates to `matter-service`, which fires a `file.deleted` event once the file is gone.",
        "flags": []
      }
    },
    {
      "id": "platform-api:matter.matterFile.admin.updateMatterFile",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterFile.admin.updateMatterFile",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateMatterFileInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/admin/updateMatterFile.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/admin/updateMatterFile.mutation.ts#L12"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 50,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L50"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.admin.updateMatterFile",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFile.admin.updateMatterFile",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/admin/updateMatterFile.mutation.ts#L13",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "fde773a1",
      "interpretation": {
        "sig": "fde773a1",
        "summary": "Lets an admin rename a matter file or change its visibility (client-facing vs internal). Pure pass-through to `matter-service`.",
        "flags": []
      }
    },
    {
      "id": "platform-api:matter.matterFile.admin.createMatterFileDownloadUrl",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterFile.admin.createMatterFileDownloadUrl",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterFileDownloadUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/admin/createMatterFileDownloadUrl.mutation.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/admin/createMatterFileDownloadUrl.mutation.ts#L13"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 51,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L51"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.admin.createMatterFileDownloadUrl",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFile.admin.createMatterFileDownloadUrl",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/admin/createMatterFileDownloadUrl.mutation.ts#L13",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d7031bf9",
      "interpretation": {
        "sig": "d7031bf9",
        "summary": "Gets a signed download URL for a matter file so an admin can view or download it. Implemented as a mutation but it does not change any stored data; it just asks `matter-service` to mint a URL.",
        "flags": [
          "mutation only reads"
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFile.admin.createMatterFileUploadUrl",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterFile.admin.createMatterFileUploadUrl",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListMatterFileUploadUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/admin/createMatterFileUploadUrl.mutation.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/admin/createMatterFileUploadUrl.mutation.ts#L16"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 52,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L52"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.admin.createMatterFileUploadUrl",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFile.admin.createMatterFileUploadUrl",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/admin/createMatterFileUploadUrl.mutation.ts#L16",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "cfc71698",
      "interpretation": {
        "sig": "cfc71698",
        "summary": "Gets a signed upload URL so an admin can upload a new file to a matter. The URL itself is generated by `matter-service`; the actual file write happens later when the client PUTs to that URL.",
        "flags": []
      }
    },
    {
      "id": "platform-api:matter.matterNote.admin.listMatterNotes",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterNote.admin.listMatterNotes",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterNotes/procedures/admin/listMatterNotes.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterNotes/procedures/admin/listMatterNotes.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterNotes/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterNotes/router.ts#L24"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterNote.internal.listMatterNotes",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterNote.internal.listMatterNotes",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterNotes/procedures/internal/listMatterNotes.query.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "43ca86a6",
      "interpretation": {
        "sig": "43ca86a6",
        "summary": "Lists the internal notes logged against a matter, for admin review.",
        "flags": []
      }
    },
    {
      "id": "platform-api:matter.matterParticipant.admin.listMatterParticipants",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterParticipant.admin.listMatterParticipants",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterParticipants/procedures/admin/listMatterParticipants.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterParticipants/procedures/admin/listMatterParticipants.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterParticipants/router.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterParticipants/router.ts#L9"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterParticipant.admin.listMatterParticipants",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterParticipant.admin.listMatterParticipants",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/admin/listMatterParticipants.query.ts#L4",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "61a03302",
      "interpretation": {
        "sig": "61a03302",
        "summary": "Lists everyone attached to a matter (clients, firm side, lead lawyer) for the admin view.",
        "flags": []
      }
    },
    {
      "id": "platform-api:matter.matterParticipant.admin.listMatterParticipantsWithTeamMembers",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterParticipant.admin.listMatterParticipantsWithTeamMembers",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterParticipants/procedures/admin/listMatterParticipantsWithTeamMembers.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterParticipants/procedures/admin/listMatterParticipantsWithTeamMembers.query.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterParticipants/router.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterParticipants/router.ts#L10"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterParticipant.admin.listMatterParticipants",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterParticipant.admin.listMatterParticipants",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/admin/listMatterParticipants.query.ts#L4",
            "domain": "matters"
          },
          {
            "service": "matter-service",
            "path": "admin.getMatterForAdmin",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.getMatterForAdmin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "team.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:team.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/team/procedures/listTeams.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "584b6dcc",
      "interpretation": {
        "sig": "584b6dcc",
        "summary": "Builds the admin participant list for a matter and pads it out with the lead lawyer's firm team members who aren't already on the matter, so admins can see who else could be added.",
        "models": [
          {
            "model": "MatterParticipant",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterParticipant.admin.removeMatterParticipant",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterParticipant.admin.removeMatterParticipant",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterParticipants/procedures/admin/removeMatterParticipant.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterParticipants/procedures/admin/removeMatterParticipant.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterParticipants/router.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterParticipants/router.ts#L12"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterParticipant.admin.removeMatterParticipant",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterParticipant.admin.removeMatterParticipant",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/admin/removeMatterParticipant.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "ca4a3434",
      "interpretation": {
        "sig": "ca4a3434",
        "summary": "Removes a participant from a matter, for example when a client or team member should no longer have access.",
        "flags": []
      }
    },
    {
      "id": "platform-api:matter.matterParticipant.admin.makeLeadMatterParticipant",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterParticipant.admin.makeLeadMatterParticipant",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterParticipants/procedures/admin/makeParticipantLead.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterParticipants/procedures/admin/makeParticipantLead.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterParticipants/router.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterParticipants/router.ts#L13"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterParticipant.admin.makeLeadMatterParticipant",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterParticipant.admin.makeLeadMatterParticipant",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/admin/makeParticipantLead.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "77933e15",
      "interpretation": {
        "sig": "77933e15",
        "summary": "Promotes a matter participant to lead (the main point of contact on that side of the matter).",
        "flags": []
      }
    },
    {
      "id": "platform-api:matter.matterParticipant.admin.inviteClientMatterParticipant",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterParticipant.admin.inviteClientMatterParticipant",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "InviteClientMatterParticipantInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterParticipants/procedures/admin/inviteClientMatterParticipant.mutation.ts",
        "line": 39,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterParticipants/procedures/admin/inviteClientMatterParticipant.mutation.ts#L39"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterParticipants/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterParticipants/router.ts#L14"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterParticipant.admin.inviteClientMatterParticipant",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterParticipant.admin.inviteClientMatterParticipant",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterParticipants/procedures/admin/inviteClientMatterParticipant.mutation.ts#L39",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "819a170a",
      "interpretation": {
        "sig": "819a170a",
        "summary": "Adds a client contact to a matter, either creating a new person from name/email/phone or attaching an existing person record, and sends them an invite to the matter.",
        "flags": []
      }
    },
    {
      "id": "platform-api:matter.matterTransaction.admin.createMatterRefundTransaction",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterTransaction.admin.createMatterRefundTransaction",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateRefundMatterTransactionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterTransactions/procedures/admin/createRefundMatterTransaction.mutation.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTransactions/procedures/admin/createRefundMatterTransaction.mutation.ts#L16"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterTransactions/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTransactions/router.ts#L16"
      },
      "hops": {
        "direct": 3,
        "services": [
          "work-service",
          "transaction-service",
          "matter-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service",
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "bill.getBill",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:bill.getBill",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/bill/procedures/getBill.query.ts#L11",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "getTransaction",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getTransaction.query.ts#L31",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "createStripeRefundTransaction",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:createStripeRefundTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/createStripeRefundTransaction.mutation.ts#L15",
            "domain": "money"
          },
          {
            "service": "matter-service",
            "path": "matterTransaction.createMatterTransaction",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterTransaction.createMatterTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTransactions/procedures/createMatterTransaction.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "cd1bd791",
      "interpretation": {
        "sig": "cd1bd791",
        "summary": "Refunds a paid bill: looks up the bill and its original Stripe payment, checks it was actually a Stripe payment, issues a Stripe refund via `transaction-service`, then records a matching refund `MatterTransaction` against the matter.",
        "models": [
          {
            "model": "MatterTransaction",
            "service": "matter-service"
          }
        ],
        "flags": []
      }
    },
    {
      "id": "platform-api:matter.matterTransaction.admin.updateMatterTransactionDescription",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.matterTransaction.admin.updateMatterTransactionDescription",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateMatterTransactionDescriptionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterTransactions/procedures/admin/update-matter-transaction-description.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTransactions/procedures/admin/update-matter-transaction-description.mutation.ts#L14"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterTransactions/router.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTransactions/router.ts#L17"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterTransaction.updateMatterTransaction",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterTransaction.updateMatterTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTransactions/procedures/update-matter-transaction.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "4bddae05",
      "interpretation": {
        "sig": "4bddae05",
        "summary": "Lets an admin edit the description text on an existing matter transaction (e.g. to correct a refund or payment note).",
        "flags": []
      }
    },
    {
      "id": "platform-api:matter.admin.getMatterForAdmin",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.admin.getMatterForAdmin",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "inputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/admin/getMatterForAdmin.query.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/admin/getMatterForAdmin.query.ts#L11"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 113,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L113"
      },
      "hops": {
        "direct": 3,
        "services": [
          "matter-service",
          "work-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "admin.getMatterForAdmin",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.getMatterForAdmin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "invoice.list",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:invoice.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/listInvoices.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "matter-service",
            "path": "internal.listMatters",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.listMatters",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/listMatters.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "firm.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/listFirms.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "802be5c8",
      "interpretation": {
        "sig": "802be5c8",
        "summary": "Loads full matter detail for the admin matter page: the matter itself plus its invoices (each annotated with the paying firm), gated behind the `can_view_matters` admin permission.",
        "flags": []
      }
    },
    {
      "id": "platform-api:matter.admin.listMattersForAdmin",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.admin.listMattersForAdmin",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListMattersForAdminInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/admin/listMattersForAdmin.query.ts",
        "line": 48,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/admin/listMattersForAdmin.query.ts#L48"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 114,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L114"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "admin.listMattersForAdmin",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.listMattersForAdmin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/listMattersForAdmin.query.ts#L48",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "25113655",
      "interpretation": {
        "sig": "25113655",
        "summary": "Lists and filters matters for the admin matters table (by status, source, firm, lawyer, market, matter number etc), gated behind `can_view_matters`.",
        "flags": []
      }
    },
    {
      "id": "platform-api:matter.admin.getBalance",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.admin.getBalance",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "inputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/admin/getMatterBalance.query.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/admin/getMatterBalance.query.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 115,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L115"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "admin.getMatterBalance",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.getMatterBalance",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterBalance.query.ts#L9",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "219945af",
      "interpretation": {
        "sig": "219945af",
        "summary": "Returns the current financial balance on a matter for the admin view, gated behind `can_view_matters`.",
        "flags": []
      }
    },
    {
      "id": "platform-api:matter.admin.canCloseMatter",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.admin.canCloseMatter",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/admin/canCloseMatter.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/admin/canCloseMatter.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 116,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L116"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "work-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "feeAgreement.listMatterFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listMatterFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterFeeAgreements.query.ts#L6",
            "domain": "deal"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "a0642753",
      "interpretation": {
        "sig": "a0642753",
        "summary": "Checks whether a matter is eligible to be closed: it must be `ACTIVE` and every fee agreement on it must be `COMPLETED` or `CANCELLED`. Returns `canClose` plus a reason when it can't, gated behind `can_view_matters`.",
        "flags": []
      }
    },
    {
      "id": "platform-api:matter.admin.closeMatter",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.admin.closeMatter",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "requireMatterInActiveMarket",
          "service": "matter-service",
          "path": "admin.getMatterForAdmin",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:admin.getMatterForAdmin",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
          "domain": "matters"
        },
        {
          "via": "requireMatterInActiveMarket",
          "service": "work-service",
          "path": "invoice.list",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:invoice.list",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/listInvoices.query.ts#L5",
          "domain": "deal"
        },
        {
          "via": "requireMatterInActiveMarket",
          "service": "matter-service",
          "path": "internal.listMatters",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:internal.listMatters",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/listMatters.query.ts#L5",
          "domain": "matters"
        },
        {
          "via": "requireMatterInActiveMarket",
          "service": "identity-service",
          "path": "firm.list",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.list",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/listFirms.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/admin/closeMatter.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/admin/closeMatter.mutation.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 117,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L117"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "work-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "feeAgreement.listMatterFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listMatterFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterFeeAgreements.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "matter-service",
            "path": "internal.closeMatter",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:internal.closeMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/closeMatter.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "cfcddd55",
      "interpretation": {
        "sig": "cfcddd55",
        "summary": "Lets ops close out a matter once it is `ACTIVE` and all its fee agreements are `COMPLETED` or `CANCELLED`, delegating the actual status change to `matter-service`; rejects the request if the matter isn't active or still has unfinished work.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.admin.cancelMatter",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.admin.cancelMatter",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "requireMatterInActiveMarket",
          "service": "matter-service",
          "path": "admin.getMatterForAdmin",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:admin.getMatterForAdmin",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
          "domain": "matters"
        },
        {
          "via": "requireMatterInActiveMarket",
          "service": "work-service",
          "path": "invoice.list",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:invoice.list",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/listInvoices.query.ts#L5",
          "domain": "deal"
        },
        {
          "via": "requireMatterInActiveMarket",
          "service": "matter-service",
          "path": "internal.listMatters",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:internal.listMatters",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/listMatters.query.ts#L5",
          "domain": "matters"
        },
        {
          "via": "requireMatterInActiveMarket",
          "service": "identity-service",
          "path": "firm.list",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.list",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/listFirms.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/admin/cancelMatter.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/admin/cancelMatter.mutation.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 118,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L118"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 3,
        "calls": [
          {
            "service": "matter-service",
            "path": "admin.cancelMatter",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:admin.cancelMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/cancelMatter.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/matter.cancelled"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "172fa391",
      "interpretation": {
        "sig": "172fa391",
        "summary": "Lets ops cancel a matter, forwarding to `matter-service` which fires a `matter.cancelled` event other services react to.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.admin.createMatter",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.admin.createMatter",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "identity-service",
          "path": "firm.admin.get",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.admin.get",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmForAdmin.query.ts#L7",
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "transaction-service",
          "path": "getFirmCounterparty",
          "kind": "read",
          "inferred": false,
          "targetId": "transaction-service:getFirmCounterparty",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
          "domain": "money"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/admin/createMatter.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/admin/createMatter.mutation.ts#L12"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 119,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L119"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "identity-service",
            "path": "firm.admin.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.admin.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmForAdmin.query.ts#L7",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "admin.createMatter",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:admin.createMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/createMatter.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "people",
      "triggers": [
        "matter-service/matter.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "cb6b98c3",
      "interpretation": {
        "sig": "cb6b98c3",
        "summary": "Lets ops create a new matter for a firm: looks up the firm and confirms the chosen lead lawyer is a member, then creates the matter in `matter-service` with that lawyer as the lead firm participant and source `ADMIN`, triggering a `matter.created` event.",
        "models": [
          {
            "model": "Firm",
            "service": "identity-service"
          },
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.admin.reopenMatter",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.admin.reopenMatter",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "requireMatterInActiveMarket",
          "service": "matter-service",
          "path": "admin.getMatterForAdmin",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:admin.getMatterForAdmin",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
          "domain": "matters"
        },
        {
          "via": "requireMatterInActiveMarket",
          "service": "work-service",
          "path": "invoice.list",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:invoice.list",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/listInvoices.query.ts#L5",
          "domain": "deal"
        },
        {
          "via": "requireMatterInActiveMarket",
          "service": "matter-service",
          "path": "internal.listMatters",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:internal.listMatters",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/listMatters.query.ts#L5",
          "domain": "matters"
        },
        {
          "via": "requireMatterInActiveMarket",
          "service": "identity-service",
          "path": "firm.list",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.list",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/listFirms.query.ts#L5",
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/admin/reopenMatter.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/admin/reopenMatter.mutation.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 120,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L120"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "admin.reopenMatter",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:admin.reopenMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/reopenMatter.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "62b0bf3a",
      "interpretation": {
        "sig": "62b0bf3a",
        "summary": "Lets ops reopen a previously closed or cancelled matter by forwarding the reopen call straight to `matter-service`.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.admin.countMattersByStatus",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "matter.admin.countMattersByStatus",
      "module": "matter",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/admin/countMattersByStatus.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/admin/countMattersByStatus.query.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 121,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L121"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "admin.countMattersByStatus",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.countMattersByStatus",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/countMattersByStatus.query.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "f5491105",
      "interpretation": {
        "sig": "f5491105",
        "summary": "Returns the count of a person's matters grouped by matter status (e.g. how many `ACTIVE`, `CLOSED`), read straight through from `matter-service`.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:messaging.admin.getMessages",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "messaging.admin.getMessages",
      "module": "messaging",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetMessagesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/messaging/procedures/admin/getMessages.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/procedures/admin/getMessages.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/messaging/router.ts",
        "line": 45,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/router.ts#L45"
      },
      "hops": {
        "direct": 1,
        "services": [
          "messaging-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "messaging-service",
            "path": "message.internal.getMessages",
            "kind": "read",
            "inferred": false,
            "targetId": "messaging-service:message.internal.getMessages",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getMessagesInternal.query.ts#L8",
            "domain": "chat"
          }
        ]
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "7cba92c5",
      "interpretation": {
        "sig": "7cba92c5",
        "summary": "Lets Lawhive admin/ops staff read any chat channel's messages via `messaging-service`'s internal `getMessages` endpoint, remapping `identityId` to `personId` for the response.",
        "flags": []
      }
    },
    {
      "id": "platform-api:product.admin.listCategoriesWithHierarchy",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "product.admin.listCategoriesWithHierarchy",
      "module": "product",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/product/procedures/admin/listCategoriesWithHierarchy.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/product/procedures/admin/listCategoriesWithHierarchy.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/product/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/product/router.ts#L22"
      },
      "hops": {
        "direct": 1,
        "services": [
          "product-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "product-service",
            "path": "categories.listCategoriesWithHierarchy",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:categories.listCategoriesWithHierarchy",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listCategoriesWithHierarchy.query.ts#L6",
            "domain": null
          }
        ]
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "a8573dc5",
      "interpretation": {
        "sig": "a8573dc5",
        "summary": "Admin equivalent of the lawyer version: returns the category tree with hierarchy, optionally filtered by jurisdiction and market. Pure read, delegates to `product-service`.",
        "models": [
          {
            "model": "Category",
            "service": "product-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:product.admin.listProductsWithLineItems",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "product.admin.listProductsWithLineItems",
      "module": "product",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/product/procedures/admin/listProducts.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/product/procedures/admin/listProducts.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/product/router.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/product/router.ts#L23"
      },
      "hops": {
        "direct": 1,
        "services": [
          "product-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "product-service",
            "path": "products.listProducts",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:products.listProducts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listProducts.query.ts#L5",
            "domain": null
          }
        ]
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "6b8d8bf0",
      "interpretation": {
        "sig": "6b8d8bf0",
        "summary": "Admin product search built on the same `listProducts` service as `product.admin.listProducts`, but no app or service calls it.",
        "models": [
          {
            "model": "Product",
            "service": "product-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:product.admin.listProducts",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "product.admin.listProducts",
      "module": "product",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/product/procedures/admin/listProducts.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/product/procedures/admin/listProducts.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/product/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/product/router.ts#L24"
      },
      "hops": {
        "direct": 1,
        "services": [
          "product-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "product-service",
            "path": "products.listProducts",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:products.listProducts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listProducts.query.ts#L5",
            "domain": null
          }
        ]
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "15ce3270",
      "interpretation": {
        "sig": "15ce3270",
        "summary": "Lets Lawhive admin/ops search and filter the legal product catalog by category, jurisdiction, product IDs, or free-text query. Pure read, delegates to `product-service`.",
        "models": [
          {
            "model": "Product",
            "service": "product-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:product.admin.listJurisdictions",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "product.admin.listJurisdictions",
      "module": "product",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/product/procedures/admin/listJurisdictions.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/product/procedures/admin/listJurisdictions.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/product/router.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/product/router.ts#L25"
      },
      "hops": {
        "direct": 1,
        "services": [
          "product-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "product-service",
            "path": "jurisdictions.listJurisdictions",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:jurisdictions.listJurisdictions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listJurisdictions.query.ts#L6",
            "domain": null
          }
        ]
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "99eea2f6",
      "interpretation": {
        "sig": "99eea2f6",
        "summary": "Admin equivalent of the lawyer version: returns jurisdictions available for a market. Pure read, delegates to `product-service`.",
        "models": [
          {
            "model": "Jurisdiction",
            "service": "product-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:product.admin.listJurisdictionsForProduct",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "product.admin.listJurisdictionsForProduct",
      "module": "product",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/product/procedures/admin/listJurisdictionsForMatter.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/product/procedures/admin/listJurisdictionsForMatter.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/product/router.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/product/router.ts#L26"
      },
      "hops": {
        "direct": 3,
        "services": [
          "matter-service",
          "work-service",
          "product-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "admin.getMatterForAdmin",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.getMatterForAdmin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "feeAgreement.listMatterIncompleteFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listMatterIncompleteFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterIncompleteFeeAgreements.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "product-service",
            "path": "jurisdictions.listJurisdictions",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:jurisdictions.listJurisdictions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listJurisdictions.query.ts#L6",
            "domain": null
          },
          {
            "service": "product-service",
            "path": "jurisdictions.listJurisdictionsForProducts",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:jurisdictions.listJurisdictionsForProducts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listJurisdictionsForProducts.query.ts#L6",
            "domain": null
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "d97a274e",
      "interpretation": {
        "sig": "d97a274e",
        "summary": "Given a matter, works out which jurisdictions apply to it: looks up the matter and its incomplete fee agreements, then resolves jurisdictions from the fee agreements' original products, falling back to the fee agreements' own jurisdictions (or the matter's primary jurisdiction) if no products are found. Pure read across `matter-service`, `work-service`, and `product-service`, despite the file name mentioning products.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          },
          {
            "model": "Jurisdiction",
            "service": "product-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:reviewRequests.admin.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "reviewRequests.admin.list",
      "module": "reviewRequests",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListReviewRequestsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/reviewRequests/procedures/admin/listReviewRequests.query.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/reviewRequests/procedures/admin/listReviewRequests.query.ts#L35"
      },
      "router": {
        "file": "apis/platform-api/src/modules/reviewRequests/router.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/reviewRequests/router.ts#L19"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "reviewRequest.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:reviewRequest.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/listReviewRequests.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "d81acedf",
      "interpretation": {
        "sig": "d81acedf",
        "summary": "Lists review requests for admin/ops, with pagination, sorting and filters (matter, firm, type, status, requester, approver), by proxying straight to `matter-service`.",
        "models": [
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:reviewRequests.admin.listApprovers",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "reviewRequests.admin.listApprovers",
      "module": "reviewRequests",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/reviewRequests/procedures/admin/listApprovers.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/reviewRequests/procedures/admin/listApprovers.query.ts#L4"
      },
      "router": {
        "file": "apis/platform-api/src/modules/reviewRequests/router.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/reviewRequests/router.ts#L20"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "reviewRequest.listApprovers",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:reviewRequest.listApprovers",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/admin/listApprovers.query.ts#L4",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "41cb0449",
      "interpretation": {
        "sig": "41cb0449",
        "summary": "Returns the list of users eligible to approve review requests, read from `matter-service`.",
        "models": [
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:reviewRequests.admin.get",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "reviewRequests.admin.get",
      "module": "reviewRequests",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/reviewRequests/procedures/admin/getReviewRequest.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/reviewRequests/procedures/admin/getReviewRequest.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/reviewRequests/router.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/reviewRequests/router.ts#L21"
      },
      "hops": {
        "direct": 3,
        "services": [
          "matter-service",
          "work-service",
          "transaction-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "reviewRequest.admin.get",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:reviewRequest.admin.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/admin/getReviewRequest.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "feeAgreement.listMatterFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listMatterFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterFeeAgreements.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "listTransactions",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:listTransactions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/listTransactions.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "matter-service",
            "path": "reviewRequest.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:reviewRequest.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/listReviewRequests.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "feeAgreement.getFeeAgreement",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.getFeeAgreement",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/getFeeAgreement.query.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "69550b64",
      "interpretation": {
        "sig": "69550b64",
        "summary": "Loads one review request for an admin and enriches it with its related record: matter fee agreements for `REASSIGNMENT` requests, or the specific fee agreement for `FEE_AGREEMENT_COMPLETION` requests, pulling from `matter-service`, `work-service` and `transaction-service`.",
        "models": [
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:reviewRequests.admin.reject",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "reviewRequests.admin.reject",
      "module": "reviewRequests",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/reviewRequests/procedures/admin/rejectReviewRequest.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/reviewRequests/procedures/admin/rejectReviewRequest.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/reviewRequests/router.ts",
        "line": 22,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/reviewRequests/router.ts#L22"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "reviewRequest.admin.reject",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:reviewRequest.admin.reject",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/admin/rejectReviewRequest.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "d37e09a7",
      "interpretation": {
        "sig": "d37e09a7",
        "summary": "Rejects a review request with an optional rejection reason, marking it `REJECTED` in `matter-service`.",
        "models": [
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:reviewRequests.admin.approve",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "reviewRequests.admin.approve",
      "module": "reviewRequests",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ApproveReviewRequestsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/reviewRequests/procedures/admin/approveReviewRequests.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/reviewRequests/procedures/admin/approveReviewRequests.mutation.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/reviewRequests/router.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/reviewRequests/router.ts#L23"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "reviewRequest.admin.approveReviewRequests",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:reviewRequest.admin.approveReviewRequests",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/admin/approveReviewRequests.mutation.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "b6804a08",
      "interpretation": {
        "sig": "b6804a08",
        "summary": "Approves a batch of review requests by `id`, with an optional approval comment, marking them `APPROVED` in `matter-service`. No app or service currently calls this endpoint.",
        "flags": [
          "usage.dead"
        ],
        "models": [
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:reviewRequests.admin.approveFeeAgreementCompletionRequests",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "reviewRequests.admin.approveFeeAgreementCompletionRequests",
      "module": "reviewRequests",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ApproveFeeAgreementCompletionRequestsInput",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/reviewRequests/procedures/admin/approveFeeAgreementCompletionRequests.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/reviewRequests/procedures/admin/approveFeeAgreementCompletionRequests.mutation.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/reviewRequests/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/reviewRequests/router.ts#L24"
      },
      "hops": {
        "direct": 3,
        "services": [
          "matter-service",
          "work-service",
          "transaction-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "reviewRequest.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:reviewRequest.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/listReviewRequests.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "feeAgreement.completeFeeAgreements",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:feeAgreement.completeFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/completeFeeAgreements.mutation.ts#L5",
            "domain": "deal"
          },
          {
            "service": "matter-service",
            "path": "reviewRequest.admin.approveFeeAgreementCompletionRequests",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:reviewRequest.admin.approveFeeAgreementCompletionRequests",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/admin/approveFeeAgreementCompletionRequests.mutation.ts#L11",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "feeAgreement.listFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listFeeAgreements.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "invoice.createMany",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:invoice.createMany",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/createManyInvoices.mutation.ts#L5",
            "domain": "money"
          },
          {
            "service": "work-service",
            "path": "invoice.updateInvoice",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:invoice.updateInvoice",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/updateInvoice.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9e3985d1",
      "interpretation": {
        "sig": "9e3985d1",
        "summary": "Approves a batch of pending `FEE_AGREEMENT_COMPLETION` review requests: completes the linked fee agreements in `work-service`, marks the review requests approved in `matter-service`, creates `DRAFT` invoices in `transaction-service` and links them back to the `work-service` invoices, then notifies each requesting lawyer via Knock.",
        "models": [
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          },
          {
            "model": "Invoice",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:search.admin.searchEverything",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "search.admin.searchEverything",
      "module": "search",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "SearchEverythingInput",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/search/procedures/admin/searchEverything.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/search/procedures/admin/searchEverything.query.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/search/router.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/search/router.ts#L6"
      },
      "hops": {
        "direct": 1,
        "services": [
          "search-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "search-service",
            "path": "adminSearch.searchEverything",
            "kind": "read",
            "inferred": false,
            "targetId": "search-service:adminSearch.searchEverything",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/search-service/src/admin-search/admin-search-router.ts#L6",
            "domain": null
          }
        ]
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "6df89ca9",
      "interpretation": {
        "sig": "6df89ca9",
        "summary": "Lets an admin run one query across matters, people, firms, quotes and fee agreements at once, delegating the actual search to the `search-service` and returning whichever categories have hits (or a flat `foundSomething: false`).",
        "models": [
          {
            "model": "Matter",
            "service": "search-service"
          },
          {
            "model": "Person",
            "service": "search-service"
          },
          {
            "model": "Firm",
            "service": "search-service"
          },
          {
            "model": "Quote",
            "service": "search-service"
          },
          {
            "model": "FeeAgreement",
            "service": "search-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:search.admin.searchPerson",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "search.admin.searchPerson",
      "module": "search",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "SearchPersonInput",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/search/procedures/admin/searchPerson.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/search/procedures/admin/searchPerson.query.ts#L4"
      },
      "router": {
        "file": "apis/platform-api/src/modules/search/router.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/search/router.ts#L7"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.admin.search",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.admin.search",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/searchIdentities.query.ts#L7",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "784ea250",
      "interpretation": {
        "sig": "784ea250",
        "summary": "Lets an admin search for a person by query string, delegating to `identity-service` and returning the matching list of people.",
        "models": [
          {
            "model": "Person",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:telephony.admin.firms.provision",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "telephony.admin.firms.provision",
      "module": "telephony",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "identity-service",
          "path": "firm.admin.get",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.admin.get",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmForAdmin.query.ts#L7",
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "transaction-service",
          "path": "getFirmCounterparty",
          "kind": "read",
          "inferred": false,
          "targetId": "transaction-service:getFirmCounterparty",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
          "domain": "money"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/telephony/procedures/admin/provisionFirm.mutation.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/procedures/admin/provisionFirm.mutation.ts#L17"
      },
      "router": {
        "file": "apis/platform-api/src/modules/telephony/router.admin.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/router.admin.ts#L19"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "firms.provision",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:firms.provision",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/firm/firm-controller.ts#L7",
            "domain": "voice"
          }
        ]
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "5b6f1e0d",
      "interpretation": {
        "sig": "5b6f1e0d",
        "summary": "Admin action that turns on telephony for a firm, given an explicit timezone and locale (no defaults, since Lawhive operates in multiple markets). Re-provisioning an already-enabled firm is a no-op. Requires the `can_manage_telephony` grant and the firm to be in an active market.",
        "models": [
          {
            "model": "Firm",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:telephony.admin.firms.get",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "telephony.admin.firms.get",
      "module": "telephony",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "identity-service",
          "path": "firm.admin.get",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.admin.get",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmForAdmin.query.ts#L7",
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "transaction-service",
          "path": "getFirmCounterparty",
          "kind": "read",
          "inferred": false,
          "targetId": "transaction-service:getFirmCounterparty",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
          "domain": "money"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/telephony/procedures/admin/getFirm.query.ts",
        "line": 18,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/procedures/admin/getFirm.query.ts#L18"
      },
      "router": {
        "file": "apis/platform-api/src/modules/telephony/router.admin.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/router.admin.ts#L20"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "firms.get",
            "kind": "read",
            "inferred": false,
            "targetId": "telephony-service:firms.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/firm/firm-controller.ts#L11",
            "domain": "voice"
          }
        ]
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "c61b3f67",
      "interpretation": {
        "sig": "c61b3f67",
        "summary": "Returns a firm's telephony state for the admin panel: status, timezone, call-handling config, and agent/number counts, or `enabled: false` if telephony isn't provisioned. Requires the `can_view_telephony` grant. Nothing currently calls this procedure.",
        "flags": [
          "usage.dead"
        ],
        "models": [
          {
            "model": "Firm",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:telephony.admin.firms.update",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "telephony.admin.firms.update",
      "module": "telephony",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "identity-service",
          "path": "firm.admin.get",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.admin.get",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmForAdmin.query.ts#L7",
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "transaction-service",
          "path": "getFirmCounterparty",
          "kind": "read",
          "inferred": false,
          "targetId": "transaction-service:getFirmCounterparty",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
          "domain": "money"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/telephony/procedures/admin/updateFirm.mutation.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/procedures/admin/updateFirm.mutation.ts#L17"
      },
      "router": {
        "file": "apis/platform-api/src/modules/telephony/router.admin.ts",
        "line": 21,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/router.admin.ts#L21"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "firms.update",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:firms.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/firm/firm-controller.ts#L41",
            "domain": "voice"
          }
        ]
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "9a963bb9",
      "interpretation": {
        "sig": "9a963bb9",
        "summary": "Admin-only update to a firm's telephony status (the ops kill-switch: `INACTIVE` firms hang up on every call) and/or timezone. Requires the `can_manage_telephony` grant. Nothing currently calls this procedure.",
        "flags": [
          "usage.dead"
        ],
        "models": [
          {
            "model": "Firm",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:telephony.admin.agents.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "telephony.admin.agents.list",
      "module": "telephony",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "identity-service",
          "path": "firm.admin.get",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.admin.get",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmForAdmin.query.ts#L7",
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "transaction-service",
          "path": "getFirmCounterparty",
          "kind": "read",
          "inferred": false,
          "targetId": "transaction-service:getFirmCounterparty",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
          "domain": "money"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/telephony/procedures/admin/listAgents.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/procedures/admin/listAgents.query.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/telephony/router.admin.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/router.admin.ts#L24"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "agents.list",
            "kind": "read",
            "inferred": false,
            "targetId": "telephony-service:agents.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/agent/agent-controller.ts#L11",
            "domain": "voice"
          }
        ]
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "64f97257",
      "interpretation": {
        "sig": "64f97257",
        "summary": "Lists a firm's configured voice agents for the admin panel, each with its assigned phone-number count. Requires the `can_view_telephony` grant.",
        "models": [
          {
            "model": "VoiceAgent",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:telephony.admin.agents.create",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "telephony.admin.agents.create",
      "module": "telephony",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "identity-service",
          "path": "firm.admin.get",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.admin.get",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmForAdmin.query.ts#L7",
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "transaction-service",
          "path": "getFirmCounterparty",
          "kind": "read",
          "inferred": false,
          "targetId": "transaction-service:getFirmCounterparty",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
          "domain": "money"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/telephony/procedures/admin/createAgent.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/procedures/admin/createAgent.mutation.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/telephony/router.admin.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/router.admin.ts#L25"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "agents.create",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:agents.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/agent/agent-controller.ts#L21",
            "domain": "voice"
          }
        ]
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "9d87a0af",
      "interpretation": {
        "sig": "9d87a0af",
        "summary": "Registers a new voice agent for a firm (provider plus the provider's agent id and a label). Requires the `can_manage_telephony` grant and the firm to be in an active market.",
        "models": [
          {
            "model": "VoiceAgent",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:telephony.admin.agents.update",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "telephony.admin.agents.update",
      "module": "telephony",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "identity-service",
          "path": "firm.admin.get",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.admin.get",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmForAdmin.query.ts#L7",
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "transaction-service",
          "path": "getFirmCounterparty",
          "kind": "read",
          "inferred": false,
          "targetId": "transaction-service:getFirmCounterparty",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
          "domain": "money"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/telephony/procedures/admin/updateAgent.mutation.ts",
        "line": 10,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/procedures/admin/updateAgent.mutation.ts#L10"
      },
      "router": {
        "file": "apis/platform-api/src/modules/telephony/router.admin.ts",
        "line": 26,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/router.admin.ts#L26"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "agents.update",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:agents.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/agent/agent-controller.ts#L25",
            "domain": "voice"
          }
        ]
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "4dae32f0",
      "interpretation": {
        "sig": "4dae32f0",
        "summary": "Updates an existing voice agent's provider, provider agent id, or label; an agent id from another firm resolves as not found. Requires the `can_manage_telephony` grant.",
        "models": [
          {
            "model": "VoiceAgent",
            "service": "telephony-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:telephony.admin.agents.remove",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "telephony.admin.agents.remove",
      "module": "telephony",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "identity-service",
          "path": "firm.admin.get",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.admin.get",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmForAdmin.query.ts#L7",
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "transaction-service",
          "path": "getFirmCounterparty",
          "kind": "read",
          "inferred": false,
          "targetId": "transaction-service:getFirmCounterparty",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
          "domain": "money"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/telephony/procedures/admin/removeAgent.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/procedures/admin/removeAgent.mutation.ts#L12"
      },
      "router": {
        "file": "apis/platform-api/src/modules/telephony/router.admin.ts",
        "line": 27,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/router.admin.ts#L27"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "agents.remove",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:agents.remove",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/agent/agent-controller.ts#L29",
            "domain": "voice"
          }
        ]
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "d55c920b",
      "interpretation": {
        "sig": "d55c920b",
        "summary": "Deletes a firm's voice agent via the telephony service. Fails `PRECONDITION_FAILED` if any phone number is still assigned to it (unassign first) and `NOT_FOUND` for an agent ID that doesn't belong to the firm.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:telephony.admin.numbers.list",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "telephony.admin.numbers.list",
      "module": "telephony",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "identity-service",
          "path": "firm.admin.get",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.admin.get",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmForAdmin.query.ts#L7",
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "transaction-service",
          "path": "getFirmCounterparty",
          "kind": "read",
          "inferred": false,
          "targetId": "transaction-service:getFirmCounterparty",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
          "domain": "money"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/telephony/procedures/admin/listNumbers.query.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/procedures/admin/listNumbers.query.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/telephony/router.admin.ts",
        "line": 30,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/router.admin.ts#L30"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "numbers.list",
            "kind": "read",
            "inferred": false,
            "targetId": "telephony-service:numbers.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/number/number-controller.ts#L11",
            "domain": "voice"
          }
        ]
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c9704e55",
      "interpretation": {
        "sig": "c9704e55",
        "summary": "Lists a firm's phone numbers along with each one's assigned voice agent."
      }
    },
    {
      "id": "platform-api:telephony.admin.numbers.add",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "telephony.admin.numbers.add",
      "module": "telephony",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "identity-service",
          "path": "firm.admin.get",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.admin.get",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmForAdmin.query.ts#L7",
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "transaction-service",
          "path": "getFirmCounterparty",
          "kind": "read",
          "inferred": false,
          "targetId": "transaction-service:getFirmCounterparty",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
          "domain": "money"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/telephony/procedures/admin/addNumber.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/procedures/admin/addNumber.mutation.ts#L14"
      },
      "router": {
        "file": "apis/platform-api/src/modules/telephony/router.admin.ts",
        "line": 31,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/router.admin.ts#L31"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "numbers.add",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:numbers.add",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/number/number-controller.ts#L21",
            "domain": "voice"
          }
        ]
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "cf6f2460",
      "interpretation": {
        "sig": "cf6f2460",
        "summary": "Registers a phone number for inbound call dispatch to a firm, optionally assigning a voice agent and label. The Twilio number itself is bought and wired up manually beforehand; this call just adds the record. Returns `CONFLICT` if the number is already registered."
      }
    },
    {
      "id": "platform-api:telephony.admin.numbers.update",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "telephony.admin.numbers.update",
      "module": "telephony",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "identity-service",
          "path": "firm.admin.get",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.admin.get",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmForAdmin.query.ts#L7",
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "transaction-service",
          "path": "getFirmCounterparty",
          "kind": "read",
          "inferred": false,
          "targetId": "transaction-service:getFirmCounterparty",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
          "domain": "money"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/telephony/procedures/admin/updateNumber.mutation.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/procedures/admin/updateNumber.mutation.ts#L13"
      },
      "router": {
        "file": "apis/platform-api/src/modules/telephony/router.admin.ts",
        "line": 32,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/router.admin.ts#L32"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "numbers.update",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:numbers.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/number/number-controller.ts#L25",
            "domain": "voice"
          }
        ]
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "5096e092",
      "interpretation": {
        "sig": "5096e092",
        "summary": "Updates a firm's phone number: its label, active flag, or assigned voice agent (passing null unassigns it). Scoped to the firm, so a number ID from another firm returns `NOT_FOUND`, and an agent from another firm is rejected."
      }
    },
    {
      "id": "platform-api:telephony.admin.numbers.remove",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "telephony.admin.numbers.remove",
      "module": "telephony",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "identity-service",
          "path": "firm.admin.get",
          "kind": "read",
          "inferred": false,
          "targetId": "identity-service:firm.admin.get",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirmForAdmin.query.ts#L7",
          "domain": "people"
        },
        {
          "via": "requireFirmInActiveMarket",
          "service": "transaction-service",
          "path": "getFirmCounterparty",
          "kind": "read",
          "inferred": false,
          "targetId": "transaction-service:getFirmCounterparty",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
          "domain": "money"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/telephony/procedures/admin/removeNumber.mutation.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/procedures/admin/removeNumber.mutation.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/telephony/router.admin.ts",
        "line": 33,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/router.admin.ts#L33"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "numbers.remove",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:numbers.remove",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/domains/number/number-controller.ts#L29",
            "domain": "voice"
          }
        ]
      },
      "domain": "voice",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "2e117011",
      "interpretation": {
        "sig": "2e117011",
        "summary": "Removes a phone number from inbound call dispatch for a firm. Returns `NOT_FOUND` if the number doesn't belong to the firm."
      }
    },
    {
      "id": "platform-api:transaction.admin.createBankAccountTransaction",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "transaction.admin.createBankAccountTransaction",
      "module": "transaction",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "bankTransferTransactionSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/admin/createBankAccountTransaction.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/admin/createBankAccountTransaction.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 52,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L52"
      },
      "hops": {
        "direct": 1,
        "services": [
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "createBankTransferTransaction",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:createBankTransferTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/createBankTransferTransaction.mutation.ts#L7",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "2a1fb49f",
      "interpretation": {
        "sig": "2a1fb49f",
        "summary": "Lets an admin record a bank-transfer transaction directly in the transaction service; nothing currently calls this procedure.",
        "flags": [
          "usage.dead"
        ],
        "models": [
          {
            "model": "Transaction",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.admin.createMOTOPayment",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "transaction.admin.createMOTOPayment",
      "module": "transaction",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "createMOTOPaymentInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/admin/createMOTOPayment.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/admin/createMOTOPayment.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 53,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L53"
      },
      "hops": {
        "direct": 1,
        "services": [
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "createMOTOPayment",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:createMOTOPayment",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/createMOTOPayment.mutation.ts#L5",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "564772a7",
      "interpretation": {
        "sig": "564772a7",
        "summary": "Lets an admin process a mail-order/telephone-order (`MOTO`) card payment against an existing transaction, passing the card token, quote, and lead through to the transaction service.",
        "models": [
          {
            "model": "Transaction",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.admin.createStripeTransaction",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "transaction.admin.createStripeTransaction",
      "module": "transaction",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "stripeTransactionSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/admin/createStripeTransaction.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/admin/createStripeTransaction.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 54,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L54"
      },
      "hops": {
        "direct": 1,
        "services": [
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "createStripeTransaction",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:createStripeTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/createStripeTransaction.mutation.ts#L7",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "34417db5",
      "interpretation": {
        "sig": "34417db5",
        "summary": "Lets an admin create a Stripe transaction (hardcoded to the US market), but nothing currently calls this procedure.",
        "flags": [
          "usage.dead",
          "hardcoded-market"
        ],
        "models": [
          {
            "model": "Transaction",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.admin.getFirmCounterparty",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "transaction.admin.getFirmCounterparty",
      "module": "transaction",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/admin/getFirmCounterParty.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/admin/getFirmCounterParty.query.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 55,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L55"
      },
      "hops": {
        "direct": 1,
        "services": [
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "8814e3d",
      "interpretation": {
        "sig": "8814e3d",
        "summary": "Looks up a single firm counterparty of a given type (e.g. `BILL`) for an admin to inspect.",
        "models": [
          {
            "model": "Counterparty",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.admin.getFirmCounterparties",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "transaction.admin.getFirmCounterparties",
      "module": "transaction",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetFirmCounterpartiesInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/admin/getFirmCounterparties.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/admin/getFirmCounterparties.query.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 56,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L56"
      },
      "hops": {
        "direct": 1,
        "services": [
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "getFirmCounterparties",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparties",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparties.query.ts#L5",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "5a48f159",
      "interpretation": {
        "sig": "5a48f159",
        "summary": "Returns the list of counterparties set up for a firm, for admin/ops screens (same underlying lookup as the lawyer-facing version).",
        "models": [
          {
            "model": "Counterparty",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.admin.firmTransactionTypeCounterparty.getOrCreateWithCounterparty",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "transaction.admin.firmTransactionTypeCounterparty.getOrCreateWithCounterparty",
      "module": "transaction",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/admin/getOrCreateFirmTransactionTypeCounterparty.mutation.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/admin/getOrCreateFirmTransactionTypeCounterparty.mutation.ts#L12"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 58,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L58"
      },
      "hops": {
        "direct": 1,
        "services": [
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "getOrCreateFirmTransactionTypeCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:getOrCreateFirmTransactionTypeCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getOrCreateFirmTransactionTypeCounterparty.mutation.ts#L14",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "f9cb0d6f",
      "interpretation": {
        "sig": "f9cb0d6f",
        "summary": "Passthrough to `transaction-service` that gets or creates a firm's transaction-type counterparty (`BILL`, `INVOICE`, or `REFUND`) paired to a bank account. Nothing in `platform-api` or its callers wires this up: only the shim service and an integration test call it directly.",
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "platform-api:transaction.admin.listFundReleaseRequests",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "transaction.admin.listFundReleaseRequests",
      "module": "transaction",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "DisbursementsRequestSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/admin/listFundReleaseRequests.query.ts",
        "line": 94,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/admin/listFundReleaseRequests.query.ts#L94"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 61,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L61"
      },
      "hops": {
        "direct": 4,
        "services": [
          "identity-service",
          "matter-service",
          "transaction-service",
          "ledger-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.admin.search",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.admin.search",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/searchIdentities.query.ts#L7",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "admin.search",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.search",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/searchMatters.query.ts#L7",
            "domain": "matters"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          },
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.listForFirm",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.listForFirm",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L64",
            "domain": "people"
          },
          {
            "service": "ledger-service",
            "path": "accounts.balanceBatch",
            "kind": "read",
            "inferred": false,
            "targetId": "ledger-service:accounts.balanceBatch",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/account/account-controller.ts#L98",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.listPendingForMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.listPendingForMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listPendingForMatter.query.ts#L25",
            "domain": "money"
          },
          {
            "service": "ledger-service",
            "path": "accounts.list",
            "kind": "read",
            "inferred": false,
            "targetId": "ledger-service:accounts.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/procedures/listAccounts.query.ts#L9",
            "domain": "money"
          },
          {
            "service": "ledger-service",
            "path": "accounts.getBalance",
            "kind": "read",
            "inferred": false,
            "targetId": "ledger-service:accounts.getBalance",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/ledger-service/src/procedures/getAccountsBalance.mutation.ts#L17",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "2377dfc0",
      "interpretation": {
        "sig": "2377dfc0",
        "summary": "Lists pending `OUTGOING_DISBURSEMENT` transaction intents for admin review, enriched with the requesting person's name, the matter's client account balances, and a `hasSufficientFunds` flag so an admin can see at a glance whether a fund release is safe to approve.",
        "models": [
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          },
          {
            "model": "Account",
            "service": "ledger-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.admin.listRefunds",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "transaction.admin.listRefunds",
      "module": "transaction",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/admin/listRefunds.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/admin/listRefunds.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 62,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L62"
      },
      "hops": {
        "direct": 4,
        "services": [
          "matter-service",
          "transaction-service",
          "identity-service",
          "work-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterTransaction.listMatterTransactions",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterTransaction.listMatterTransactions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTransactions/procedures/listMatterTransactions.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "transaction-service",
            "path": "listTransactions",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:listTransactions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/listTransactions.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "listCounterparties",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:listCounterparties",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/listCounterparties.query.ts#L13",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "identity.getPeople",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.getPeople",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentities.query.ts#L8",
            "domain": "people"
          },
          {
            "service": "work-service",
            "path": "bill.listBillsFromStripePaymentIntentIds",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:bill.listBillsFromStripePaymentIntentIds",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/bill/procedures/listBillsFromStripePaymentIntentIds.query.ts#L13",
            "domain": "deal"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "f5193264",
      "interpretation": {
        "sig": "f5193264",
        "summary": "Lists `REFUND` transactions for a matter, joined with sender/receiver names, the creator's name, and (for Stripe refunds) the original bill so admin can see who was refunded and why.",
        "models": [
          {
            "model": "Transaction",
            "service": "transaction-service"
          },
          {
            "model": "MatterTransaction",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.admin.updateTransaction",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "transaction.admin.updateTransaction",
      "module": "transaction",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateTransactionInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/admin/updateTransaction.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/admin/updateTransaction.mutation.ts#L14"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 63,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L63"
      },
      "hops": {
        "direct": 1,
        "services": [
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "updateTransaction",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:updateTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/updateTransaction.mutation.ts#L14",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "ec5c1df5",
      "interpretation": {
        "sig": "ec5c1df5",
        "summary": "Lets an admin edit an existing transaction's fields (a partial patch keyed by `id`) via `transaction-service`. Nothing currently calls this, so it is dead code today.",
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "platform-api:transaction.admin.listInvoiceReceipts",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "transaction.admin.listInvoiceReceipts",
      "module": "transaction",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListInvoiceReceiptsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/admin/listInvoiceReceipts.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/admin/listInvoiceReceipts.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 64,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L64"
      },
      "hops": {
        "direct": 2,
        "services": [
          "transaction-service",
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "listInvoiceReceipts",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:listInvoiceReceipts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/listInvoiceReceipts.query.ts#L5",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "firm.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/listFirms.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "e3dd8455",
      "interpretation": {
        "sig": "e3dd8455",
        "summary": "Lists invoice receipts from `transaction-service` and attaches the receiving firm's details to each one, for the admin invoicing view.",
        "models": [
          {
            "model": "Transaction",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.admin.listReconciliations",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "transaction.admin.listReconciliations",
      "module": "transaction",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListReconciliationsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/admin/listReconciliations.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/admin/listReconciliations.query.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 65,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L65"
      },
      "hops": {
        "direct": 2,
        "services": [
          "payment-service",
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "payment-service",
            "path": "reconciliation.list",
            "kind": "read",
            "inferred": false,
            "targetId": "payment-service:reconciliation.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/reconciliation/procedures/listReconciliations.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "c6fff23a",
      "interpretation": {
        "sig": "c6fff23a",
        "summary": "Lists payment reconciliations from `payment-service` and attaches the reconciler's full name to each row. Nothing currently calls this, so it is dead code today.",
        "flags": [
          "usage.dead"
        ],
        "models": [
          {
            "model": "Reconciliation",
            "service": "payment-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.admin.listNonReconciledPayments",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "transaction.admin.listNonReconciledPayments",
      "module": "transaction",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/admin/listNonReconciledPayments.query.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/admin/listNonReconciledPayments.query.ts#L16"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 66,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L66"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "aadd8adf",
      "interpretation": {
        "sig": "aadd8adf",
        "summary": "Returns a hardcoded list of sample bank payments with amount-based suggested matches; it never queries any real payment data. Nothing calls this and it does not touch a real backend, so treat it as a stub, not a working feature.",
        "flags": [
          "usage.dead",
          "stub-mock-data"
        ]
      }
    },
    {
      "id": "platform-api:transaction.admin.listClientToOfficeTransactions",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "transaction.admin.listClientToOfficeTransactions",
      "module": "transaction",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListClientToOfficeTransactionsInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/admin/listClientToOfficeTransactions.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/admin/listClientToOfficeTransactions.query.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 67,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L67"
      },
      "hops": {
        "direct": 2,
        "services": [
          "transaction-service",
          "payment-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "reconciliation.list",
            "kind": "read",
            "inferred": false,
            "targetId": "payment-service:reconciliation.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/reconciliation/procedures/listReconciliations.query.ts#L8",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "a97bee8",
      "interpretation": {
        "sig": "a97bee8",
        "summary": "Lists a firm's `INTERNAL` transaction intents (client-to-office transfers) and marks each one as reconciled or not by cross-referencing `payment-service` reconciliations.",
        "models": [
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          },
          {
            "model": "Reconciliation",
            "service": "payment-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.admin.reconcile",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "transaction.admin.reconcile",
      "module": "transaction",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/admin/reconcile.mutation.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/admin/reconcile.mutation.ts#L4"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 68,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L68"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "50a25b7f",
      "interpretation": {
        "sig": "50a25b7f",
        "summary": "Named as a mutation to reconcile a payment (by candidate payment ids or a manual bank-entry form), but it only sleeps 800ms and echoes back a fabricated success response; it makes no real database or service write. Nothing calls it.",
        "flags": [
          "usage.dead",
          "mutation only reads (stub, no real write)"
        ]
      }
    },
    {
      "id": "platform-api:transaction.admin.requestClientToOfficeDisbursement",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "transaction.admin.requestClientToOfficeDisbursement",
      "module": "transaction",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RequestClientToOfficeDisbursementInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/admin/requestClientToOfficeDisbursement.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/admin/requestClientToOfficeDisbursement.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 69,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L69"
      },
      "hops": {
        "direct": 3,
        "services": [
          "matter-service",
          "transaction-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "admin.getMatterForAdmin",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.getMatterForAdmin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
            "domain": "matters"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "getCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getCounterparty.query.ts#L9",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.getOrCreateDefault",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.getOrCreateDefault",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L95",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.create",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/createTransactionIntent.mutation.ts#L8",
            "domain": "money"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c1876cc7",
      "interpretation": {
        "sig": "c1876cc7",
        "summary": "Creates a `PENDING` disbursement transaction intent from a matter's client account to the firm's office account, resolving the firm and its `BILL`/`INVOICE` counterparties first. This is how an admin kicks off moving client funds to the firm.",
        "models": [
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.admin.rejectDisbursement",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "transaction.admin.rejectDisbursement",
      "module": "transaction",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "rejectDisbursementInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/admin/rejectDisbursementMutation.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/admin/rejectDisbursementMutation.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 71,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L71"
      },
      "hops": {
        "direct": 1,
        "services": [
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "transactionIntent.update",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/updateTransactionIntent.mutation.ts#L8",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "fcf4c86a",
      "interpretation": {
        "sig": "fcf4c86a",
        "summary": "Marks a transaction intent `REJECTED` with a rejection reason, turning down a pending disbursement request.",
        "models": [
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.admin.payments.bankTransfers.recordClientToOfficePayment",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "transaction.admin.payments.bankTransfers.recordClientToOfficePayment",
      "module": "transaction",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "RecordPaymentForTransactionsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/admin/recordClientToOfficePayment.mutation.ts",
        "line": 19,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/admin/recordClientToOfficePayment.mutation.ts#L19"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 74,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L74"
      },
      "hops": {
        "direct": 3,
        "services": [
          "identity-service",
          "transaction-service",
          "payment-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "firmBankAccounts.getOrCreateDefault",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.getOrCreateDefault",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L95",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "getOrCreateFirmTransactionTypeCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:getOrCreateFirmTransactionTypeCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getOrCreateFirmTransactionTypeCounterparty.mutation.ts#L14",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "payments.getOrCreateBankCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:payments.getOrCreateBankCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/getOrCreateBankCounterparty.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "payments.createBankPayment",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:payments.createBankPayment",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/createBankPayment.mutation.ts#L8",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [
        "payment-service/bankPayment.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "fa728a26",
      "interpretation": {
        "sig": "fa728a26",
        "summary": "Records an internal bank payment moving funds from the firm's client account to its office account for a set of transactions, creating firm counterparties as needed and publishing `payment-service`'s `bankPayment.created` event.",
        "models": [
          {
            "model": "Payment",
            "service": "payment-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.admin.payments.bankTransfers.recordDisbursementPayment",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "transaction.admin.payments.bankTransfers.recordDisbursementPayment",
      "module": "transaction",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/admin/recordDisbursementPayment.mutation.ts",
        "line": 17,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/admin/recordDisbursementPayment.mutation.ts#L17"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 75,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L75"
      },
      "hops": {
        "direct": 4,
        "services": [
          "transaction-service",
          "payment-service",
          "identity-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "transaction-service",
            "path": "transactionIntent.get",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/getTransactionIntent.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "payments.getOrCreateBankCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:payments.getOrCreateBankCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/getOrCreateBankCounterparty.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.getOrCreateDefault",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.getOrCreateDefault",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L95",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "getOrCreateFirmTransactionTypeCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:getOrCreateFirmTransactionTypeCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getOrCreateFirmTransactionTypeCounterparty.mutation.ts#L14",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "payments.createBankPayment",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:payments.createBankPayment",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/createBankPayment.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "matter-service",
            "path": "admin.getMatterForAdmin",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.getMatterForAdmin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
            "domain": "matters"
          }
        ]
      },
      "domain": "money",
      "triggers": [
        "payment-service/bankPayment.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "a3327e1",
      "interpretation": {
        "sig": "a3327e1",
        "summary": "Records an outgoing bank payment for a disbursement transaction intent, then notifies the matter's lead lawyer via Knock's `disbursementPaid` workflow once the payment is created.",
        "models": [
          {
            "model": "Payment",
            "service": "payment-service"
          },
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:transaction.admin.payments.bankTransfers.recordClientBillPayment",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "transaction.admin.payments.bankTransfers.recordClientBillPayment",
      "module": "transaction",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/admin/recordClientBillPayment.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/admin/recordClientBillPayment.mutation.ts#L14"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 76,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L76"
      },
      "hops": {
        "direct": 3,
        "services": [
          "transaction-service",
          "payment-service",
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "payments.getOrCreateBankCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:payments.getOrCreateBankCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/getOrCreateBankCounterparty.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.getOrCreateDefault",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.getOrCreateDefault",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L95",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "getOrCreateFirmTransactionTypeCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:getOrCreateFirmTransactionTypeCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getOrCreateFirmTransactionTypeCounterparty.mutation.ts#L14",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "payments.createBankPayment",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:payments.createBankPayment",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/createBankPayment.mutation.ts#L8",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [
        "payment-service/bankPayment.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "48d3f836",
      "interpretation": {
        "sig": "48d3f836",
        "summary": "Records an incoming bank payment against a client bill's transaction intents, crediting the firm's client account and creating the bank counterparty if it doesn't exist yet.",
        "models": [
          {
            "model": "Payment",
            "service": "payment-service"
          },
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.getInvoiceForAdmin",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.getInvoiceForAdmin",
      "module": "work",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/getInvoiceForAdmin.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/getInvoiceForAdmin.query.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 63,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L63"
      },
      "hops": {
        "direct": 3,
        "services": [
          "work-service",
          "matter-service",
          "transaction-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service",
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "invoice.getInvoice",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:invoice.getInvoice",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/getInvoice.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "matter-service",
            "path": "comment.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:comment.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/comment/comment-controller.ts#L68",
            "domain": "matters"
          },
          {
            "service": "transaction-service",
            "path": "getFirmCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getFirmCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getFirmCounterparty.query.ts#L7",
            "domain": "money"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "1c222241",
      "interpretation": {
        "sig": "1c222241",
        "summary": "Fetches an invoice for an admin/ops user, joined with its matter comments and the firm's Stripe counterparty details.",
        "models": [
          {
            "model": "Invoice",
            "service": "work-service"
          },
          {
            "model": "Comment",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.getInvoicePdf",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.getInvoicePdf",
      "module": "work",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetInvoicePdfInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/getInvoicePdf.query.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/getInvoicePdf.query.ts#L16"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 64,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L64"
      },
      "hops": {
        "direct": 4,
        "services": [
          "work-service",
          "transaction-service",
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service",
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "invoice.getInvoice",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:invoice.getInvoice",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/getInvoice.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "invoice.get",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:invoice.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/getInvoice.query.ts#L8",
            "domain": "money"
          },
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "821b3066",
      "interpretation": {
        "sig": "821b3066",
        "summary": "Generates an invoice PDF for admin/ops, falling back from `work-service` to `transaction-service` if the invoice isn't found in the former, then rendering it with the matter and firm details. It's wired as a mutation but only reads data and produces a PDF; nothing is written or persisted.",
        "flags": [
          "mutation-only-reads"
        ],
        "models": [
          {
            "model": "Invoice",
            "service": "work-service"
          },
          {
            "model": "Firm",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.getQuote",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.getQuote",
      "module": "work",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/getQuote.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/getQuote.query.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 65,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L65"
      },
      "hops": {
        "direct": 2,
        "services": [
          "work-service",
          "assignment-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "quote.getQuote",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuote.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "assignment-service",
            "path": "getAssignment",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:getAssignment",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/getAssignment.query.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "739db2bd",
      "interpretation": {
        "sig": "739db2bd",
        "summary": "Fetches a quote for admin/ops and resolves the assigned lawyer and firm from its first fee agreement's assignment. No caller in the app or service graph reaches this procedure.",
        "flags": [
          "usage.dead"
        ],
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "Assignment",
            "service": "assignment-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.listInvoices",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.listInvoices",
      "module": "work",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListInvoicesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/listInvoices.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/listInvoices.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 66,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L66"
      },
      "hops": {
        "direct": 3,
        "services": [
          "work-service",
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service",
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "invoice.list",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:invoice.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/listInvoices.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "matter-service",
            "path": "internal.listMatters",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.listMatters",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/listMatters.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "firm.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/listFirms.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c2860642",
      "interpretation": {
        "sig": "c2860642",
        "summary": "Admin ops lists invoices with pagination, filters and sort, then stitches in each invoice's matter human-readable ID and firm details from downstream services.",
        "models": [
          {
            "model": "Invoice",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.listQuotesByMatterId",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.listQuotesByMatterId",
      "module": "work",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/listQuotesByMatterId.query.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/listQuotesByMatterId.query.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 67,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L67"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "quote.listQuotesByMatterId",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.listQuotesByMatterId",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/listQuotesByMatterId.query.ts#L6",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "e1b7e7a9",
      "interpretation": {
        "sig": "e1b7e7a9",
        "summary": "Lists all quotes for a given matter ID via `work-service`. Nothing in the app or other services calls this path, so it looks unused.",
        "flags": [
          "looks unused"
        ],
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.updateInvoice",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.updateInvoice",
      "module": "work",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateInvoiceInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/updateInvoice.mutation.ts",
        "line": 7,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/updateInvoice.mutation.ts#L7"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 68,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L68"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "invoice.updateInvoice",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:invoice.updateInvoice",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/updateInvoice.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "7c056809",
      "interpretation": {
        "sig": "7c056809",
        "summary": "Admin ops edits an invoice's fields (status, amounts, etc.) by delegating the write to `work-service`'s `updateInvoice`.",
        "models": [
          {
            "model": "Invoice",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.updateManyInvoicesAsPaidByBankTransfer",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.updateManyInvoicesAsPaidByBankTransfer",
      "module": "work",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "updateManyInvoicesAsPaidByBankTransferInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/updateManyInvoicesAsPaidByBankTransfer.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/updateManyInvoicesAsPaidByBankTransfer.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 69,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L69"
      },
      "hops": {
        "direct": 4,
        "services": [
          "work-service",
          "transaction-service",
          "payment-service",
          "identity-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "invoice.list",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:invoice.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/listInvoices.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.list",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/listTransactionIntents.query.ts#L5",
            "domain": "money"
          },
          {
            "service": "transaction-service",
            "path": "createBankTransferTransaction",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:createBankTransferTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/createBankTransferTransaction.mutation.ts#L7",
            "domain": "money"
          },
          {
            "service": "payment-service",
            "path": "payments.getOrCreateBankCounterparty",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:payments.getOrCreateBankCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/getOrCreateBankCounterparty.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.getOrCreateDefault",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.getOrCreateDefault",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L95",
            "domain": "people"
          },
          {
            "service": "payment-service",
            "path": "payments.createBankPayment",
            "kind": "write",
            "inferred": false,
            "targetId": "payment-service:payments.createBankPayment",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/payment-service/src/payments/procedures/createBankPayment.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "work-service",
            "path": "invoice.updateManyInvoicesAsPaid",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:invoice.updateManyInvoicesAsPaid",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/updateManyInvoicesAsPaid.mutation.ts#L6",
            "domain": "deal"
          }
        ]
      },
      "domain": "money",
      "triggers": [
        "payment-service/bankPayment.created",
        "platform-api/invoices.markedAsPaid"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "dd8a8439",
      "interpretation": {
        "sig": "dd8a8439",
        "summary": "Admin marks a batch of invoices as paid by bank transfer: creates the bank transfer transaction, records outgoing bank payments per firm counterparty, then flags the invoices paid in `work-service` and fires an `invoices.markedAsPaid` event.",
        "models": [
          {
            "model": "Invoice",
            "service": "work-service"
          },
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.updateManyInvoices",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.updateManyInvoices",
      "module": "work",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateManyInvoicesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/updateManyInvoices.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/updateManyInvoices.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 71,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L71"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "invoice.updateManyInvoices",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:invoice.updateManyInvoices",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/updateManyInvoices.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "e49b20ab",
      "interpretation": {
        "sig": "e49b20ab",
        "summary": "Batch-updates multiple invoices via `work-service` in one call. Nothing in the app or other services calls this path, so it looks unused.",
        "flags": [
          "looks unused"
        ],
        "models": [
          {
            "model": "Invoice",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.admin.listMatterFeeAgreements",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.admin.listMatterFeeAgreements",
      "module": "work",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/listMatterFeeAgreements.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/listMatterFeeAgreements.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 73,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L73"
      },
      "hops": {
        "direct": 3,
        "services": [
          "work-service",
          "transaction-service",
          "matter-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service",
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "feeAgreement.listMatterFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listMatterFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterFeeAgreements.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "listTransactions",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:listTransactions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/listTransactions.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "matter-service",
            "path": "reviewRequest.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:reviewRequest.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/listReviewRequests.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "41c5cbed",
      "interpretation": {
        "sig": "41c5cbed",
        "summary": "Lists a matter's fee agreements, joining in each bill's payment transaction and any pending fee-agreement-completion review requests so admins see full context in one view.",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          },
          {
            "model": "ReviewRequest",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.admin.listBillFeeAgreements",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.admin.listBillFeeAgreements",
      "module": "work",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/listBillFeeAgreements.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/listBillFeeAgreements.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 74,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L74"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "feeAgreement.listBillFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listBillFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listBillFeeAgreements.query.ts#L19",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "b852f4f4",
      "interpretation": {
        "sig": "b852f4f4",
        "summary": "Lists the fee agreements attached to a given bill.",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.admin.listBills",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.admin.listBills",
      "module": "work",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListBillsInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/listBills.query.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/listBills.query.ts#L11"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 75,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L75"
      },
      "hops": {
        "direct": 3,
        "services": [
          "work-service",
          "identity-service",
          "transaction-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "bill.listBills",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:bill.listBills",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/bill/procedures/listBills.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "listTransactions",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:listTransactions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/listTransactions.query.ts#L7",
            "domain": "money"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "86c4176",
      "interpretation": {
        "sig": "86c4176",
        "summary": "Lists a matter's bills and enriches each with its payment transaction and the identity of whoever created it.",
        "models": [
          {
            "model": "Bill",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.admin.updateBill",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.admin.updateBill",
      "module": "work",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateBillInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/updateBill.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/updateBill.mutation.ts#L14"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 76,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L76"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "bill.updateBill",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:bill.updateBill",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/bill/procedures/updateBill.mutation.ts#L24",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "aa655d96",
      "interpretation": {
        "sig": "aa655d96",
        "summary": "Admin changes a bill's status (with an optional reason) by delegating to `work-service`'s `updateBill`.",
        "models": [
          {
            "model": "Bill",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.admin.getBill",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.admin.getBill",
      "module": "work",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetBillInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/getBill.query.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/getBill.query.ts#L11"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 77,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L77"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "bill.getBill",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:bill.getBill",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/bill/procedures/getBill.query.ts#L11",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "31dfd170",
      "interpretation": {
        "sig": "31dfd170",
        "summary": "Fetches a single bill by ID from `work-service`.",
        "models": [
          {
            "model": "Bill",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.admin.downloadReceiptPdf",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.admin.downloadReceiptPdf",
      "module": "work",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "read",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "DownloadReceiptPdfInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/downloadReceiptPdf.mutation.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/downloadReceiptPdf.mutation.ts#L15"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 78,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L78"
      },
      "hops": {
        "direct": 4,
        "services": [
          "transaction-service",
          "work-service",
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service",
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "getTransaction",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getTransaction.query.ts#L31",
            "domain": "money"
          },
          {
            "service": "work-service",
            "path": "invoice.list",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:invoice.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/listInvoices.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "matter-service",
            "path": "internal.listMatters",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.listMatters",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/listMatters.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "c9623521",
      "interpretation": {
        "sig": "c9623521",
        "summary": "Despite being a mutation, this only reads: it pulls the transaction, its invoices, related matters, lead clients and the receiving firm, then generates a receipt PDF and returns it as base64 or a buffer. No data is written.",
        "flags": [
          "mutation only reads"
        ],
        "models": [
          {
            "model": "Invoice",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.admin.cancelProposedFeeAgreement",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.admin.cancelProposedFeeAgreement",
      "module": "work",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/cancelProposedFeeAgreement.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/cancelProposedFeeAgreement.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 79,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L79"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "feeAgreement.cancelProposedFeeAgreement",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:feeAgreement.cancelProposedFeeAgreement",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/cancelProposedFeeAgreement.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "8bd982b9",
      "interpretation": {
        "sig": "8bd982b9",
        "summary": "Cancels a fee agreement that's still in proposed state, by delegating to `work-service`'s `cancelProposedFeeAgreement`.",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.admin.cancelFeeAgreement",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.admin.cancelFeeAgreement",
      "module": "work",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/cancelFeeAgreement.mutation.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/cancelFeeAgreement.mutation.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 80,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L80"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "feeAgreement.cancelFeeAgreement",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:feeAgreement.cancelFeeAgreement",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/cancelFeeAgreement.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "832e8187",
      "interpretation": {
        "sig": "832e8187",
        "summary": "Cancels an active fee agreement via `work-service`'s `cancelFeeAgreement` and returns the updated agreement.",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.admin.cancelQuote",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.admin.cancelQuote",
      "module": "work",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/cancelQuote.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/cancelQuote.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 81,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L81"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "quote.cancelQuote",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.cancelQuote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/cancelQuote.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [
        "work-service/quote.cancelled"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "3118d158",
      "interpretation": {
        "sig": "3118d158",
        "summary": "Cancels a quote via `work-service`, which marks it `CANCELLED` and fires a `quote.cancelled` event other services can react to.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.admin.createFollowOnQuote",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.admin.createFollowOnQuote",
      "module": "work",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateAdminFollowOnQuoteInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/createFollowOnQuote.mutation.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/createFollowOnQuote.mutation.ts#L16"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 82,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L82"
      },
      "hops": {
        "direct": 6,
        "services": [
          "matter-service",
          "product-service",
          "assignment-service",
          "transaction-service",
          "work-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "admin.getMatterForAdmin",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.getMatterForAdmin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
            "domain": "matters"
          },
          {
            "service": "product-service",
            "path": "products.listProducts",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:products.listProducts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listProducts.query.ts#L5",
            "domain": null
          },
          {
            "service": "assignment-service",
            "path": "feePlan.getCurrent",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:feePlan.getCurrent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/feePlan/procedures/getCurrentFeePlan.query.ts#L13",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "getIdentityCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getIdentityCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getIdentityCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "work-service",
            "path": "quote.listQuotesByMatterId",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.listQuotesByMatterId",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/listQuotesByMatterId.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "work-service",
            "path": "quote.create",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/createQuote.mutation.ts#L5",
            "domain": "deal"
          },
          {
            "service": "matter-service",
            "path": "matterTransaction.createMatterTransaction",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterTransaction.createMatterTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTransactions/procedures/createMatterTransaction.mutation.ts#L5",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "agreementSignature.createUnsignedAgreementSignatures",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:agreementSignature.createUnsignedAgreementSignatures",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/createUnsignedAgreementSignatures.mutation.ts#L15",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "4090b233",
      "interpretation": {
        "sig": "4090b233",
        "summary": "Creates a follow-on quote for an existing matter: looks up the matter and its products, builds the quote with the given fee agreements, records a matter transaction, and creates unsigned agreement signatures, then posts a Slack notification about the new quote.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "AgreementSignature",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.admin.createDraftFollowOnQuote",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.admin.createDraftFollowOnQuote",
      "module": "work",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateAdminDraftFollowOnQuoteInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/createDraftFollowOnQuote.mutation.ts",
        "line": 15,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/createDraftFollowOnQuote.mutation.ts#L15"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 83,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L83"
      },
      "hops": {
        "direct": 3,
        "services": [
          "matter-service",
          "product-service",
          "work-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "admin.getMatterForAdmin",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.getMatterForAdmin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
            "domain": "matters"
          },
          {
            "service": "product-service",
            "path": "products.listProducts",
            "kind": "read",
            "inferred": false,
            "targetId": "product-service:products.listProducts",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/product-service/src/procedures/listProducts.query.ts#L5",
            "domain": null
          },
          {
            "service": "work-service",
            "path": "quote.listQuotesByMatterId",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.listQuotesByMatterId",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/listQuotesByMatterId.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "work-service",
            "path": "quote.createDraft",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.createDraft",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/createDraftQuote.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "4e530c1",
      "interpretation": {
        "sig": "4e530c1",
        "summary": "Creates a follow-on quote in draft state for an existing matter, looking up the matter and available products first but without the Slack notification or signature step that the non-draft version does.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.admin.sendDraftQuote",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.admin.sendDraftQuote",
      "module": "work",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "SendDraftQuoteAdminInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/sendDraftQuote.mutation.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/sendDraftQuote.mutation.ts#L13"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 84,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L84"
      },
      "hops": {
        "direct": 4,
        "services": [
          "matter-service",
          "transaction-service",
          "work-service",
          "identity-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "admin.getMatterForAdmin",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.getMatterForAdmin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
            "domain": "matters"
          },
          {
            "service": "transaction-service",
            "path": "getIdentityCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getIdentityCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getIdentityCounterparty.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "work-service",
            "path": "quote.sendDraft",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.sendDraft",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/sendDraftQuote.mutation.ts#L5",
            "domain": "deal"
          },
          {
            "service": "matter-service",
            "path": "matterTransaction.createMatterTransaction",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterTransaction.createMatterTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTransactions/procedures/createMatterTransaction.mutation.ts#L5",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "agreementSignature.createUnsignedAgreementSignatures",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:agreementSignature.createUnsignedAgreementSignatures",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/createUnsignedAgreementSignatures.mutation.ts#L15",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "adfd61c5",
      "interpretation": {
        "sig": "adfd61c5",
        "summary": "Admin sends a `DRAFT` follow-on quote to the client: creates the Stripe counterparty for the checkout link, marks the quote sent, records a matter transaction, creates the unsigned fee agreement signatures for the client, and notifies the client and the internal Slack channel. Nothing currently calls this procedure.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          },
          {
            "model": "MatterTransaction",
            "service": "matter-service"
          },
          {
            "model": "AgreementSignature",
            "service": "work-service"
          }
        ],
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "platform-api:work.admin.getFeeAgreementsLSA",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.admin.getFeeAgreementsLSA",
      "module": "work",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/getFeeAgreementsLSA.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/getFeeAgreementsLSA.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 85,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L85"
      },
      "hops": {
        "direct": 2,
        "services": [
          "work-service",
          "identity-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "feeAgreement.listFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listFeeAgreements.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "work-service",
            "path": "quote.generateLsaContent",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.generateLsaContent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/generateLsaContent.query.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "4b7a027e",
      "interpretation": {
        "sig": "4b7a027e",
        "summary": "Admin fetches the generated Legal Services Agreement text for a set of fee agreements, pulled together from fee agreement data, firm details, and signer identities.",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          },
          {
            "model": "Firm",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.admin.getQuoteLSA",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.admin.getQuoteLSA",
      "module": "work",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "write",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/getQuoteLSA.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/getQuoteLSA.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 86,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L86"
      },
      "hops": {
        "direct": 3,
        "services": [
          "work-service",
          "assignment-service",
          "identity-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "quote.getQuote",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuote.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "assignment-service",
            "path": "listAssignments",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:listAssignments",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/listAssignments.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "firm.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/listFirms.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "work-service",
            "path": "quote.createQuoteCheckoutURL",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.createQuoteCheckoutURL",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/createQuoteCheckoutURL.mutation.ts#L5",
            "domain": "deal"
          },
          {
            "service": "work-service",
            "path": "quote.getQuoteLSA",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuoteLSA",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuoteLSA.query.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "243a1f4f",
      "interpretation": {
        "sig": "243a1f4f",
        "summary": "Admin loads a quote's LSA view (fee agreements, assigned firms, signers). If the quote is `ACTIVE`, it also creates a fresh Stripe checkout URL for it, so a query labeled read-only actually writes a checkout session as a side effect.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "Assignment",
            "service": "assignment-service"
          }
        ],
        "flags": [
          "read-that-writes"
        ]
      }
    },
    {
      "id": "platform-api:work.admin.listAgreementSignatures",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.admin.listAgreementSignatures",
      "module": "work",
      "roleFolder": "admin",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/listAgreementSignatures.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/listAgreementSignatures.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 87,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L87"
      },
      "hops": {
        "direct": 2,
        "services": [
          "work-service",
          "identity-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "agreementSignature.listAgreementSignatures",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:agreementSignature.listAgreementSignatures",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listAgreementSignatures.query.ts#L14",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "firm.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/listFirms.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "43a2b90b",
      "interpretation": {
        "sig": "43a2b90b",
        "summary": "Admin lists the signatures on a matter's fee agreements, enriched with the signing firm and signer identity for display.",
        "models": [
          {
            "model": "AgreementSignature",
            "service": "work-service"
          },
          {
            "model": "Firm",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.admin.finalizeInvoiceDraft",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiAdminRouter",
      "mounts": [
        "/admin/"
      ],
      "callers": [
        "admin-app"
      ],
      "path": "work.admin.finalizeInvoiceDraft",
      "module": "work",
      "roleFolder": "admin",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "admin-app",
        "member": "Lawhive admin/ops",
        "kind": "admin",
        "builder": "adminProcedure",
        "base": "apiAdminIdentityProcedure",
        "middlewares": [
          "adminMarketMiddleware"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/admin/finalizeInvoiceDraft.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/admin/finalizeInvoiceDraft.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 88,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L88"
      },
      "hops": {
        "direct": 4,
        "services": [
          "work-service",
          "transaction-service",
          "matter-service",
          "identity-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service",
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "invoice.getInvoice",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:invoice.getInvoice",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/getInvoice.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "work-service",
            "path": "invoice.updateInvoice",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:invoice.updateInvoice",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/invoice/procedures/updateInvoice.mutation.ts#L5",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "invoice.update",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:invoice.update",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/invoice/procedures/updateInvoice.mutation.ts#L8",
            "domain": "money"
          },
          {
            "service": "matter-service",
            "path": "admin.getMatterForAdmin",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:admin.getMatterForAdmin",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/admin/getMatterForAdmin.query.ts#L11",
            "domain": "matters"
          },
          {
            "service": "transaction-service",
            "path": "getCounterparty",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getCounterparty",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getCounterparty.query.ts#L9",
            "domain": "money"
          },
          {
            "service": "identity-service",
            "path": "firmBankAccounts.getOrCreateDefault",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:firmBankAccounts.getOrCreateDefault",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firmBankAccount/firmBankAccount-controller.ts#L95",
            "domain": "people"
          },
          {
            "service": "transaction-service",
            "path": "transactionIntent.create",
            "kind": "write",
            "inferred": false,
            "targetId": "transaction-service:transactionIntent.create",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/transactionIntent/procedures/createTransactionIntent.mutation.ts#L8",
            "domain": "money"
          }
        ]
      },
      "domain": "deal",
      "triggers": [
        "platform-api/invoice.finalizedDraft"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "957c9e35",
      "interpretation": {
        "sig": "957c9e35",
        "summary": "Admin finalizes a `DRAFT` invoice: moves it to `UNPAID`, updates the linked payments-service invoice to `PENDING`, creates a firm bank account if none exists, opens a transaction intent for the payment, and fires the `invoice.finalizedDraft` Inngest event for downstream workflows.",
        "models": [
          {
            "model": "Invoice",
            "service": "work-service"
          },
          {
            "model": "Invoice",
            "service": "transaction-service"
          },
          {
            "model": "TransactionIntent",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.client.listMatterQuotes",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "work.client.listMatterQuotes",
      "module": "work",
      "roleFolder": "client",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "matterClientSideProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": [
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/client/listMatterQuotes.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/client/listMatterQuotes.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 94,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L94"
      },
      "hops": {
        "direct": 3,
        "services": [
          "work-service",
          "transaction-service",
          "matter-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service",
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "feeAgreement.listMatterQuotes",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listMatterQuotes",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterQuotes.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "listTransactions",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:listTransactions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/listTransactions.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "matter-service",
            "path": "reviewRequest.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:reviewRequest.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/listReviewRequests.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "4f251b5b",
      "interpretation": {
        "sig": "4f251b5b",
        "summary": "Client lists the quotes on their matter with total price and payment status, joined against transactions for each fee agreement's bills and against any open fee-agreement completion review requests.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.client.listMatterFeeAgreements",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "work.client.listMatterFeeAgreements",
      "module": "work",
      "roleFolder": "client",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "matterClientSideProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": [
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/client/listMatterFeeAgreements.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/client/listMatterFeeAgreements.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 95,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L95"
      },
      "hops": {
        "direct": 3,
        "services": [
          "work-service",
          "transaction-service",
          "matter-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service",
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "feeAgreement.listMatterFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listMatterFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listMatterFeeAgreements.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "transaction-service",
            "path": "listTransactions",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:listTransactions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/listTransactions.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "matter-service",
            "path": "reviewRequest.list",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:reviewRequest.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/reviewRequests/procedures/listReviewRequests.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "f2d327a5",
      "interpretation": {
        "sig": "f2d327a5",
        "summary": "Would list a client's fee agreements for a matter (US flow), joined with linked transactions and open completion review requests. Nothing currently calls it.",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ],
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "platform-api:work.client.getMatterFeeAgreements",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "work.client.getMatterFeeAgreements",
      "module": "work",
      "roleFolder": "client",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "matterClientSideProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": [
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/client/getMatterFeeAgreement.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/client/getMatterFeeAgreement.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 96,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L96"
      },
      "hops": {
        "direct": 2,
        "services": [
          "work-service",
          "identity-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "feeAgreement.listFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listFeeAgreements.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "52af0dee",
      "interpretation": {
        "sig": "52af0dee",
        "summary": "Would let a client fetch specific fee agreements by ID for their matter, with the firm and signer names attached. Nothing currently calls it.",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          }
        ],
        "flags": [
          "usage.dead"
        ]
      }
    },
    {
      "id": "platform-api:work.client.getFeeAgreementsLSA",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "work.client.getFeeAgreementsLSA",
      "module": "work",
      "roleFolder": "client",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "matterClientSideProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": [
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/client/getFeeAgreementsLSA.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/client/getFeeAgreementsLSA.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 97,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L97"
      },
      "hops": {
        "direct": 2,
        "services": [
          "work-service",
          "identity-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "feeAgreement.listFeeAgreements",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:feeAgreement.listFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/feeAgreement/procedures/listFeeAgreements.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "firm.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/getFirm.query.ts#L6",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "work-service",
            "path": "quote.generateLsaContent",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.generateLsaContent",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/generateLsaContent.query.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "d6857728",
      "interpretation": {
        "sig": "d6857728",
        "summary": "Client fetches the generated Legal Services Agreement text for their fee agreements, the client-facing counterpart to the admin LSA lookup.",
        "models": [
          {
            "model": "FeeAgreement",
            "service": "work-service"
          },
          {
            "model": "Firm",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.client.getQuoteLSA",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "work.client.getQuoteLSA",
      "module": "work",
      "roleFolder": "client",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "write",
        "discrepancy": true
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "matterClientSideProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": [
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/client/getQuoteLSA.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/client/getQuoteLSA.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 98,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L98"
      },
      "hops": {
        "direct": 3,
        "services": [
          "work-service",
          "assignment-service",
          "identity-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "quote.getQuote",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuote",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuote.query.ts#L6",
            "domain": "deal"
          },
          {
            "service": "assignment-service",
            "path": "listAssignments",
            "kind": "read",
            "inferred": false,
            "targetId": "assignment-service:listAssignments",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/assignment-service/src/assignment/procedures/listAssignments.query.ts#L5",
            "domain": "deal"
          },
          {
            "service": "identity-service",
            "path": "firm.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:firm.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/firm/procedures/listFirms.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "identity.list",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.list",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/listIdentities.ts#L5",
            "domain": "people"
          },
          {
            "service": "work-service",
            "path": "quote.createQuoteCheckoutURL",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.createQuoteCheckoutURL",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/createQuoteCheckoutURL.mutation.ts#L5",
            "domain": "deal"
          },
          {
            "service": "work-service",
            "path": "quote.getQuoteLSA",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:quote.getQuoteLSA",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/getQuoteLSA.query.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "1326e65f",
      "interpretation": {
        "sig": "1326e65f",
        "summary": "Client loads a quote's LSA view for their matter. If the quote is `ACTIVE` this also creates a new Stripe checkout URL, so despite being a query it writes a checkout session as a side effect.",
        "models": [
          {
            "model": "Quote",
            "service": "work-service"
          },
          {
            "model": "Assignment",
            "service": "assignment-service"
          }
        ],
        "flags": [
          "read-that-writes"
        ]
      }
    },
    {
      "id": "platform-api:work.client.signFeeAgreements",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "work.client.signFeeAgreements",
      "module": "work",
      "roleFolder": "client",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "matterClientSideProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": [
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/client/signFeeAgreements.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/client/signFeeAgreements.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 99,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L99"
      },
      "hops": {
        "direct": 2,
        "services": [
          "matter-service",
          "work-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "client.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:client.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/getMatter.query.ts#L4",
            "domain": "matters"
          },
          {
            "service": "work-service",
            "path": "agreementSignature.signFeeAgreements",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:agreementSignature.signFeeAgreements",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/signFeeAgreements.mutation.ts#L14",
            "domain": "deal"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "b448d4d6",
      "interpretation": {
        "sig": "b448d4d6",
        "summary": "Client signs one or more fee agreements on their matter, recording the signature against their identity and, if requested, notifying the lead lawyer that the LSA was signed.",
        "models": [
          {
            "model": "AgreementSignature",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:work.client.listAgreementSignatures",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "work.client.listAgreementSignatures",
      "module": "work",
      "roleFolder": "client",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "matterClientSideProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": [
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "ListAgreementSignaturesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/work/procedures/client/listAgreementSignatures.query.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/procedures/client/listAgreementSignatures.query.ts#L13"
      },
      "router": {
        "file": "apis/platform-api/src/modules/work/router.ts",
        "line": 100,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/work/router.ts#L100"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "work-service",
            "path": "agreementSignature.listAgreementSignatures",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:agreementSignature.listAgreementSignatures",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listAgreementSignatures.query.ts#L14",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "40e19983",
      "interpretation": {
        "sig": "40e19983",
        "summary": "Client lists the raw signature records for a set of fee agreements, a thin pass-through to `work-service` with no enrichment.",
        "models": [
          {
            "model": "AgreementSignature",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFile.client.listMatterFiles",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "matter.matterFile.client.listMatterFiles",
      "module": "matter",
      "roleFolder": "client",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "clientProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/client/listMatterFiles.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/client/listMatterFiles.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 58,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L58"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.client.listMatterFiles",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterFile.client.listMatterFiles",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/client/listMatterFiles.query.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "502ef6f2",
      "interpretation": {
        "sig": "502ef6f2",
        "summary": "Lists the files attached to a matter for the client viewing it, reading straight through to `matter-service`.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFile.client.insertMatterFile",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "matter.matterFile.client.insertMatterFile",
      "module": "matter",
      "roleFolder": "client",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "clientProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "InsertMatterFileInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/client/insertMatterFile.mutation.ts",
        "line": 20,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/client/insertMatterFile.mutation.ts#L20"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 59,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L59"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.client.insertMatterFile",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFile.client.insertMatterFile",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/client/insertMatterFile.mutation.ts#L20",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "matter-service/file.uploaded"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "701c124f",
      "interpretation": {
        "sig": "701c124f",
        "summary": "Records a file (already uploaded to S3) against a matter on the client's behalf, storing its display name, source and visibility, and triggers a `file.uploaded` event.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFile.client.createMatterFileUploadUrl",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "matter.matterFile.client.createMatterFileUploadUrl",
      "module": "matter",
      "roleFolder": "client",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "clientProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ListMatterFileUploadUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/client/createMatterFileUploadUrl.mutation.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/client/createMatterFileUploadUrl.mutation.ts#L16"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 60,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L60"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.client.createMatterFileUploadUrl",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFile.client.createMatterFileUploadUrl",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/client/createMatterFileUploadUrl.mutation.ts#L16",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "1ead8ed4",
      "interpretation": {
        "sig": "1ead8ed4",
        "summary": "Gets a client a pre-signed URL to upload a new matter file, delegating URL generation to `matter-service`.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFile.client.createMatterFileDownloadUrl",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "matter.matterFile.client.createMatterFileDownloadUrl",
      "module": "matter",
      "roleFolder": "client",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "clientProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "createMatterFileDownloadUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/client/createMatterFileDownloadUrl.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/client/createMatterFileDownloadUrl.mutation.ts#L14"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 61,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L61"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.client.createMatterFileDownloadUrl",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFile.client.createMatterFileDownloadUrl",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/client/createMatterFileDownloadUrl.mutation.ts#L14",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "b352e47",
      "interpretation": {
        "sig": "b352e47",
        "summary": "Gets a client a pre-signed URL to download an existing matter file, delegating URL generation to `matter-service`.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterFile.client.createMatterFilePreviewUrl",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "matter.matterFile.client.createMatterFilePreviewUrl",
      "module": "matter",
      "roleFolder": "client",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "clientProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "CreateMatterFilePreviewUrlInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/procedures/client/createMatterFilePreviewUrl.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/procedures/client/createMatterFilePreviewUrl.mutation.ts#L14"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterFiles/router.ts",
        "line": 62,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterFiles/router.ts#L62"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterFile.client.createMatterFilePreviewUrl",
            "kind": "write",
            "inferred": false,
            "targetId": "matter-service:matterFile.client.createMatterFilePreviewUrl",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterFiles/procedures/client/createMatterFilePreviewUrl.mutation.ts#L14",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "64d72f03",
      "interpretation": {
        "sig": "64d72f03",
        "summary": "Gets a client a pre-signed URL to preview a matter file in the browser, delegating URL generation to `matter-service`.",
        "models": [
          {
            "model": "MatterFile",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.matterTransaction.client.listBillsAndRefunds",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "matter.matterTransaction.client.listBillsAndRefunds",
      "module": "matter",
      "roleFolder": "client",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "matterClientSideProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": [
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/matterTransactions/procedures/client/listBillsAndRefunds.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTransactions/procedures/client/listBillsAndRefunds.query.ts#L4"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/matterTransactions/router.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/matterTransactions/router.ts#L24"
      },
      "hops": {
        "direct": 3,
        "services": [
          "matter-service",
          "transaction-service",
          "work-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterTransaction.listMatterTransactions",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterTransaction.listMatterTransactions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterTransactions/procedures/listMatterTransactions.query.ts#L5",
            "domain": "matters"
          },
          {
            "service": "transaction-service",
            "path": "listTransactions",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:listTransactions",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/listTransactions.query.ts#L7",
            "domain": "money"
          },
          {
            "service": "work-service",
            "path": "bill.listBills",
            "kind": "read",
            "inferred": false,
            "targetId": "work-service:bill.listBills",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/bill/procedures/listBills.query.ts#L6",
            "domain": "deal"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "82d00b4e",
      "interpretation": {
        "sig": "82d00b4e",
        "summary": "Lists a matter's bill and refund transactions for a client, joining `matter-service`'s transaction links with `transaction-service` records and `work-service` bill details (e.g. attaching the Stripe checkout URL for a `PENDING` bill or the refund reason for a `REFUND`).",
        "models": [
          {
            "model": "MatterTransaction",
            "service": "matter-service"
          },
          {
            "model": "Transaction",
            "service": "transaction-service"
          },
          {
            "model": "Bill",
            "service": "work-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.client.mapParticipants",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "matter.client.mapParticipants",
      "module": "matter",
      "roleFolder": "client",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "clientProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/client/mapParticipants.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/client/mapParticipants.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 129,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L129"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "client.mapParticipants",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:client.mapParticipants",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/mapParticipants.query.ts#L5",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": true,
        "confidence": "suffix",
        "dead": false
      },
      "sig": "4a6a35",
      "interpretation": {
        "sig": "4a6a35",
        "summary": "Maps a matter's participants for a client caller, used to resolve who's on a matter from the client side.",
        "flags": [
          "not called by any app; used only service-to-service"
        ],
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.client.listMatters",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "matter.client.listMatters",
      "module": "matter",
      "roleFolder": "client",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "clientProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/client/listClientMatters.query.ts",
        "line": 4,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/client/listClientMatters.query.ts#L4"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 130,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L130"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "client.listMatters",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:client.listMatters",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/listClientMatters.query.ts#L4",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "9c312454",
      "interpretation": {
        "sig": "9c312454",
        "summary": "Lists the matters belonging to the logged-in client, read straight through from `matter-service`.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:matter.client.getMatter",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "matter.client.getMatter",
      "module": "matter",
      "roleFolder": "client",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "clientProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/matter/procedures/client/getMatter.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/procedures/client/getMatter.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/matter/router.ts",
        "line": 131,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/matter/router.ts#L131"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "client.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:client.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/getMatter.query.ts#L4",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": true,
        "confidence": "path",
        "dead": false
      },
      "sig": "6b63b8fc",
      "interpretation": {
        "sig": "6b63b8fc",
        "summary": "Gets a single matter's details for the logged-in client, read straight through from `matter-service`.",
        "models": [
          {
            "model": "Matter",
            "service": "matter-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.client.createReview",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "identity.client.createReview",
      "module": "identity",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "matterClientSideProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": [
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": "CreateReviewMutationInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/procedures/createReview.mutation.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/procedures/createReview.mutation.ts#L14"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 101,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L101"
      },
      "hops": {
        "direct": 2,
        "services": [
          "identity-service",
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "identity-service",
            "path": "identity.get",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:identity.get",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/identity/procedures/getIdentity.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "review.createReview",
            "kind": "write",
            "inferred": false,
            "targetId": "identity-service:review.createReview",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/review/procedures/createReview.mutation.ts#L5",
            "domain": "people"
          },
          {
            "service": "identity-service",
            "path": "review.getRatingAverage",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:review.getRatingAverage",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/review/procedures/getRatingAverage.query.ts#L5",
            "domain": "people"
          },
          {
            "service": "matter-service",
            "path": "internal.getMatter",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.getMatter",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/getMatter.query.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "d3cccbf5",
      "interpretation": {
        "sig": "d3cccbf5",
        "summary": "A client leaves a review and rating for the lawyer who worked their matter. Creates the review in the identity service, then posts a Slack notification to the lawyer-rating channel with the lawyer's updated average, and sends the lawyer a Knock notification about the new review.",
        "models": [
          {
            "model": "Review",
            "service": "identity-service"
          }
        ],
        "flags": [
          "via-services write",
          "sends Slack + Knock notifications"
        ]
      }
    },
    {
      "id": "platform-api:identity.client.getReview",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "identity.client.getReview",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "clientProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetReviewSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/procedures/getReview.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/procedures/getReview.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 102,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L102"
      },
      "hops": {
        "direct": 1,
        "services": [
          "identity-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "identity-service",
            "path": "review.getReview",
            "kind": "read",
            "inferred": false,
            "targetId": "identity-service:review.getReview",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/identity-service/src/review/procedures/getReview.query.ts#L5",
            "domain": "people"
          }
        ]
      },
      "domain": "people",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "82406389",
      "interpretation": {
        "sig": "82406389",
        "summary": "Fetches a single review by ID for the client app. Read-only, no write mechanism.",
        "models": [
          {
            "model": "Review",
            "service": "identity-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:identity.client.getMe",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "identity.client.getMe",
      "module": "identity",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "clientProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/identity/procedures/getMe.query.ts",
        "line": 33,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/procedures/getMe.query.ts#L33"
      },
      "router": {
        "file": "apis/platform-api/src/modules/identity/router.ts",
        "line": 103,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/identity/router.ts#L103"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "43490923",
      "interpretation": {
        "sig": "43490923",
        "summary": "Returns the calling client's own identity record. Read-only, no downstream calls.",
        "flags": []
      }
    },
    {
      "id": "platform-api:knock.client.getKnockToken",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "knock.client.getKnockToken",
      "module": "knock",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "clientProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/knock/procedures/getKnockToken.procedure.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/knock/procedures/getKnockToken.procedure.ts#L14"
      },
      "router": {
        "file": "apis/platform-api/src/modules/knock/router.ts",
        "line": 16,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/knock/router.ts#L16"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "domain": null,
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "f605c238",
      "interpretation": {
        "sig": "f605c238",
        "summary": "Signs and returns a Knock user token for the current client's identity, letting the client app authenticate to Knock and subscribe to their in-app notification feed."
      }
    },
    {
      "id": "platform-api:transaction.client.createClientStripeCheckoutURL",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "transaction.client.createClientStripeCheckoutURL",
      "module": "transaction",
      "roleFolder": "client",
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "matterClientSideProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": [
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/client/createClientStripeCheckoutURL.mutation.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/client/createClientStripeCheckoutURL.mutation.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 84,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L84"
      },
      "hops": {
        "direct": 1,
        "services": [
          "work-service"
        ],
        "reachable": [
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "work-service",
            "path": "quote.createQuoteCheckoutURL",
            "kind": "write",
            "inferred": false,
            "targetId": "work-service:quote.createQuoteCheckoutURL",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/quote/procedures/createQuoteCheckoutURL.mutation.ts#L5",
            "domain": "deal"
          }
        ]
      },
      "domain": "deal",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "d97b221e",
      "interpretation": {
        "sig": "d97b221e",
        "summary": "Generates a Stripe checkout URL for a quote so the client can pay, delegating to `work-service` and passing through the post-checkout and cancel redirect paths.",
        "models": []
      }
    },
    {
      "id": "platform-api:transaction.client.getTransaction",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "transaction.client.getTransaction",
      "module": "transaction",
      "roleFolder": "client",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "matterClientSideProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": [
          "authMatter",
          "responseContextPlugin"
        ]
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "lawyer.lawyerAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:lawyer.lawyerAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/lawyer/lawyerAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "authMatter",
          "service": "matter-service",
          "path": "client.clientAuthorizeForMatter",
          "kind": "read",
          "inferred": false,
          "targetId": "matter-service:client.clientAuthorizeForMatter",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/client/clientAuthorizeForMatter.ts#L3",
          "domain": "matters"
        },
        {
          "via": "responseContextPlugin",
          "service": "work-service",
          "path": "agreementSignature.listUnsignedAgreementSignatures",
          "kind": "read",
          "inferred": false,
          "targetId": "work-service:agreementSignature.listUnsignedAgreementSignatures",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/work-service/src/agreementSignature/procedures/listUnsignedAgreementSignature.query.ts#L17",
          "domain": "deal"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/transaction/procedures/client/getTransaction.query.ts",
        "line": 6,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/procedures/client/getTransaction.query.ts#L6"
      },
      "router": {
        "file": "apis/platform-api/src/modules/transaction/router.ts",
        "line": 85,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/transaction/router.ts#L85"
      },
      "hops": {
        "direct": 1,
        "services": [
          "transaction-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "transaction-service",
            "path": "getTransaction",
            "kind": "read",
            "inferred": false,
            "targetId": "transaction-service:getTransaction",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/transaction-service/src/procedures/getTransaction.query.ts#L31",
            "domain": "money"
          }
        ]
      },
      "domain": "money",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "dce4dc7d",
      "interpretation": {
        "sig": "dce4dc7d",
        "summary": "Fetches a single transaction by `id` for the client-facing app, throwing `NOT_FOUND` if it doesn't exist.",
        "models": [
          {
            "model": "Transaction",
            "service": "transaction-service"
          }
        ]
      }
    },
    {
      "id": "platform-api:messaging.getMessages",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "messaging.getMessages",
      "module": "messaging",
      "roleFolder": "client",
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "clientProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetMessagesInputSchema",
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/messaging/procedures/client/getMessages.query.ts",
        "line": 5,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/procedures/client/getMessages.query.ts#L5"
      },
      "router": {
        "file": "apis/platform-api/src/modules/messaging/router.ts",
        "line": 33,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/router.ts#L33"
      },
      "hops": {
        "direct": 1,
        "services": [
          "messaging-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "messaging-service",
            "path": "message.getMessages",
            "kind": "read",
            "inferred": false,
            "targetId": "messaging-service:message.getMessages",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getMessages.query.ts#L8",
            "domain": "chat"
          }
        ]
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "d302c019",
      "interpretation": {
        "sig": "d302c019",
        "summary": "Lets a lawyer read a chat channel's messages, either as a participant or (with `can_view_all_matters` and `asObserver`) as a firm-wide observer, delegating to `messaging-service` and remapping `identityId` to `personId`. No caller found in apps or services.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:messaging.getRealtimeToken",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "messaging.getRealtimeToken",
      "module": "messaging",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "clientProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "GetRealtimeTokenInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/messaging/procedures/getRealtimeToken.query.ts",
        "line": 12,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/procedures/getRealtimeToken.query.ts#L12"
      },
      "router": {
        "file": "apis/platform-api/src/modules/messaging/router.ts",
        "line": 34,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/router.ts#L34"
      },
      "hops": {
        "direct": 1,
        "services": [
          "messaging-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "messaging-service",
            "path": "channel.getRealtimeToken",
            "kind": "read",
            "inferred": false,
            "targetId": "messaging-service:channel.getRealtimeToken",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/channel/procedures/getRealtimeToken.query.ts#L9",
            "domain": "chat"
          }
        ]
      },
      "domain": "chat",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "45f2dd7f",
      "interpretation": {
        "sig": "45f2dd7f",
        "summary": "Fetches a realtime token for a chat channel from `messaging-service` so a client can subscribe to live message updates for that channel. No caller found.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:messaging.createMessage",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "messaging.createMessage",
      "module": "messaging",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "clientProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/messaging/procedures/createMessage.mutation.ts",
        "line": 9,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/procedures/createMessage.mutation.ts#L9"
      },
      "router": {
        "file": "apis/platform-api/src/modules/messaging/router.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/router.ts#L35"
      },
      "hops": {
        "direct": 1,
        "services": [
          "messaging-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "messaging-service",
            "path": "message.createMessage",
            "kind": "write",
            "inferred": false,
            "targetId": "messaging-service:message.createMessage",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/createMessage.mutation.ts#L8",
            "domain": "chat"
          }
        ]
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created",
        "platform-api/message.created"
      ],
      "emitsInngestDirectly": true,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "7ca33d61",
      "interpretation": {
        "sig": "7ca33d61",
        "summary": "Posts a new chat message to a channel via `messaging-service`, and if a `matterId` is supplied, fires a `platform-api/message.created` Inngest event so downstream functions can react (e.g. notifications). No caller found in apps or services.",
        "models": [
          {
            "model": "Message",
            "service": "messaging-service"
          }
        ],
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:messaging.validateAccess",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "messaging.validateAccess",
      "module": "messaging",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "clientProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "ValidateChannelAccessInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/messaging/procedures/validateAccess.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/procedures/validateAccess.query.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/messaging/router.ts",
        "line": 36,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/router.ts#L36"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "matterChannel.validateChannelAccess",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:matterChannel.validateChannelAccess",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/matterChannel/procedures/validateChannelAccess.query.ts#L8",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "790f462",
      "interpretation": {
        "sig": "790f462",
        "summary": "Checks whether the caller has access to a matter's chat channel by asking `matter-service` to validate channel access for that `matterId`. Read-only despite living under the chat domain grouping.",
        "flags": []
      }
    },
    {
      "id": "platform-api:messaging.updateReadStatus",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "messaging.updateReadStatus",
      "module": "messaging",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "clientProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "UpdateReadStatusInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/messaging/procedures/updateReadStatus.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/procedures/updateReadStatus.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/messaging/router.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/router.ts#L37"
      },
      "hops": {
        "direct": 1,
        "services": [
          "messaging-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "messaging-service",
            "path": "message.updateReadStatus",
            "kind": "write",
            "inferred": false,
            "targetId": "messaging-service:message.updateReadStatus",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/updateReadStatus.mutation.ts#L8",
            "domain": "chat"
          }
        ]
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "c916eaed",
      "interpretation": {
        "sig": "c916eaed",
        "summary": "Marks messages as read for the caller by forwarding the request to `messaging-service`'s `updateReadStatus`. No caller found in apps or services.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:messaging.getUnreadMessages",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "messaging.getUnreadMessages",
      "module": "messaging",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "clientProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/messaging/procedures/getUnreadMessages.query.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/procedures/getUnreadMessages.query.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/messaging/router.ts",
        "line": 38,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/router.ts#L38"
      },
      "hops": {
        "direct": 1,
        "services": [
          "messaging-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "messaging-service",
            "path": "message.getUnreadMessages",
            "kind": "read",
            "inferred": false,
            "targetId": "messaging-service:message.getUnreadMessages",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/getUnreadMessages.query.ts#L8",
            "domain": "chat"
          }
        ]
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "2ebf0ce8",
      "interpretation": {
        "sig": "2ebf0ce8",
        "summary": "Returns the caller's unread messages by calling `messaging-service`, using the identity from the request context rather than a client-supplied `identityId`.",
        "flags": []
      }
    },
    {
      "id": "platform-api:messaging.editMessage",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "messaging.editMessage",
      "module": "messaging",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "clientProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "EditMessageInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/messaging/procedures/editMessage.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/procedures/editMessage.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/messaging/router.ts",
        "line": 39,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/router.ts#L39"
      },
      "hops": {
        "direct": 1,
        "services": [
          "messaging-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "messaging-service",
            "path": "message.editMessage",
            "kind": "write",
            "inferred": false,
            "targetId": "messaging-service:message.editMessage",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/editMessage.mutation.ts#L9",
            "domain": "chat"
          }
        ]
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "c9d88d43",
      "interpretation": {
        "sig": "c9d88d43",
        "summary": "Edits the content of an existing chat message via `messaging-service`'s `editMessage` call. No caller found in apps or services.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:messaging.deleteMessage",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "messaging.deleteMessage",
      "module": "messaging",
      "roleFolder": null,
      "kind": "mutation",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "write",
        "actual": "write",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": true
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "clientProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": "DeleteMessageInputSchema",
      "hasOutput": true,
      "location": {
        "file": "apis/platform-api/src/modules/messaging/procedures/deleteMessage.mutation.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/procedures/deleteMessage.mutation.ts#L8"
      },
      "router": {
        "file": "apis/platform-api/src/modules/messaging/router.ts",
        "line": 40,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/messaging/router.ts#L40"
      },
      "hops": {
        "direct": 1,
        "services": [
          "messaging-service"
        ],
        "reachable": [
          "identity-service"
        ],
        "depth": 1,
        "calls": [
          {
            "service": "messaging-service",
            "path": "message.deleteMessage",
            "kind": "write",
            "inferred": false,
            "targetId": "messaging-service:message.deleteMessage",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/messaging-service/src/message/procedures/deleteMessage.mutation.ts#L9",
            "domain": "chat"
          }
        ]
      },
      "domain": "chat",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": false,
        "usedByServices": false,
        "confidence": null,
        "dead": true
      },
      "sig": "b5559c96",
      "interpretation": {
        "sig": "b5559c96",
        "summary": "Deletes a chat message via `messaging-service`'s `deleteMessage` call. No caller found in apps or services.",
        "flags": [
          "looks unused"
        ]
      }
    },
    {
      "id": "platform-api:intercom.client.getIntercomToken",
      "api": "platform-api",
      "origin": "platform-api",
      "surfaceKind": "external",
      "protocol": "trpc",
      "surface": "platformApiClientRouter",
      "mounts": [
        "/client/"
      ],
      "callers": [
        "client-os"
      ],
      "path": "intercom.client.getIntercomToken",
      "module": "intercom",
      "roleFolder": null,
      "kind": "query",
      "httpMethod": null,
      "httpPath": null,
      "rw": {
        "claimed": "read",
        "actual": "read",
        "discrepancy": false
      },
      "mechanism": {
        "direct": false,
        "framework": false,
        "viaServices": false
      },
      "scope": {
        "audience": "client-os",
        "member": "client (end user)",
        "kind": "client",
        "builder": "clientProcedure",
        "base": "apiUserIdentityProcedure",
        "middlewares": []
      },
      "middleware": [
        {
          "via": "authMiddleware",
          "service": "identity-service",
          "path": "resolveCaller",
          "kind": "read",
          "inferred": false,
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "inputName": null,
      "hasOutput": false,
      "location": {
        "file": "apis/platform-api/src/modules/intercom/procedures/getIntercomToken.query.ts",
        "line": 11,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/intercom/procedures/getIntercomToken.query.ts#L11"
      },
      "router": {
        "file": "apis/platform-api/src/modules/intercom/router.ts",
        "line": 14,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/intercom/router.ts#L14"
      },
      "hops": {
        "direct": 1,
        "services": [
          "matter-service"
        ],
        "reachable": [
          "identity-service",
          "content-service",
          "messaging-service",
          "work-service",
          "transaction-service",
          "assignment-service",
          "product-service"
        ],
        "depth": 2,
        "calls": [
          {
            "service": "matter-service",
            "path": "internal.listPersonMatters",
            "kind": "read",
            "inferred": false,
            "targetId": "matter-service:internal.listPersonMatters",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/matter-service/src/procedures/internal/listPersonMatters.query.ts#L6",
            "domain": "matters"
          }
        ]
      },
      "domain": "matters",
      "triggers": [
        "messaging-service/message.created"
      ],
      "emitsInngestDirectly": false,
      "usage": {
        "usedByApps": true,
        "usedByServices": false,
        "confidence": "path",
        "dead": false
      },
      "sig": "d6cf8f46",
      "interpretation": {
        "sig": "d6cf8f46",
        "summary": "Issues a signed Intercom identity token and app ID for a logged-in client, so their browser can open an authenticated Intercom chat widget. Resolves the client's market from the matters they're a party to (majority market wins) and signs the JWT with that market's Intercom secret.",
        "models": []
      }
    }
  ],
  "endpoints": [
    {
      "api": "content-retrieval-api",
      "protocol": "http",
      "method": "GET",
      "path": "/doc",
      "file": "apis/content-retrieval-api/app.ts",
      "line": 50,
      "middlewares": [],
      "router": {
        "file": "apis/content-retrieval-api/app.ts",
        "line": 50,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/content-retrieval-api/app.ts#L50"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/content-retrieval-api/app.ts"
      ],
      "id": "content-retrieval-api:GET /doc",
      "surfaceKind": "external",
      "location": {
        "file": "apis/content-retrieval-api/app.ts",
        "line": 50,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/content-retrieval-api/app.ts#L50"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [],
      "domain": null,
      "sig": "f3f27c0b",
      "interpretation": {
        "sig": "f3f27c0b",
        "summary": "Returns the Content Retrieval API's OpenAPI 3.1 spec as JSON, describing the emails, matters, and matter-notes routes and the KMS-signature auth scheme. No data read or write, just schema generation.",
        "flags": [
          "read-only",
          "docs-endpoint"
        ]
      }
    },
    {
      "api": "content-retrieval-api",
      "protocol": "http",
      "method": "GET",
      "path": "/ui",
      "file": "apis/content-retrieval-api/app.ts",
      "line": 50,
      "middlewares": [],
      "router": {
        "file": "apis/content-retrieval-api/app.ts",
        "line": 50,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/content-retrieval-api/app.ts#L50"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/content-retrieval-api/app.ts"
      ],
      "id": "content-retrieval-api:GET /ui",
      "surfaceKind": "external",
      "location": {
        "file": "apis/content-retrieval-api/app.ts",
        "line": 50,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/content-retrieval-api/app.ts#L50"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [],
      "domain": null,
      "sig": "4416df41",
      "interpretation": {
        "sig": "4416df41",
        "summary": "Serves the Scalar API reference UI (pointed at `/doc`) so a developer can browse and try the Content Retrieval API's documented endpoints in a browser.",
        "flags": [
          "read-only",
          "docs-endpoint"
        ]
      }
    },
    {
      "api": "lawrence-api",
      "protocol": "http",
      "method": "POST",
      "path": "/voice/session",
      "file": "apis/lawrence-api/src/voice/voice-router.ts",
      "line": 45,
      "middlewares": [
        {
          "name": "authRoute",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/middleware/auth/auth.ts#L25"
        }
      ],
      "router": {
        "file": "apis/lawrence-api/server.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/server.ts#L13"
      },
      "downstream": [],
      "middleware": [
        {
          "service": "auth-service",
          "path": "credential.getOrCreateFromClerk",
          "kind": "write",
          "inferred": false,
          "via": "authRoute",
          "targetId": null,
          "url": null,
          "domain": "people"
        }
      ],
      "tracedFiles": [
        "apis/lawrence-api/src/voice/voice-router.ts",
        "apis/lawrence-api/src/middleware/auth/auth.ts",
        "apis/lawrence-api/env.ts"
      ],
      "id": "lawrence-api:POST /voice/session",
      "surfaceKind": "external",
      "location": {
        "file": "apis/lawrence-api/src/voice/voice-router.ts",
        "line": 45,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/voice/voice-router.ts#L45"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [],
      "domain": "ai",
      "sig": "a39ea2a1",
      "interpretation": {
        "sig": "a39ea2a1",
        "summary": "Takes a client's WebRTC SDP offer and relays it to OpenAI's Realtime API to open a live transcription-only voice session, returning the SDP answer so the browser can connect directly to OpenAI for real-time speech-to-text.",
        "flags": [
          "via-services (calls OpenAI, no DB write)"
        ]
      }
    },
    {
      "api": "lawrence-api",
      "protocol": "http",
      "method": "GET",
      "path": "/vfs/read",
      "file": "apis/lawrence-api/src/content/vfs/vfs-router.ts",
      "line": 48,
      "middlewares": [],
      "router": {
        "file": "apis/lawrence-api/server.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/server.ts#L13"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/lawrence-api/src/content/vfs/vfs-router.ts",
        "apis/lawrence-api/src/content/vfs/vfs-registry.ts",
        "apis/lawrence-api/src/content/vfs/vfs-errors.ts"
      ],
      "id": "lawrence-api:GET /vfs/read",
      "surfaceKind": "external",
      "location": {
        "file": "apis/lawrence-api/src/content/vfs/vfs-router.ts",
        "line": 48,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/content/vfs/vfs-router.ts#L48"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [],
      "domain": "ai",
      "sig": "6b167c82",
      "interpretation": {
        "sig": "6b167c82",
        "summary": "Reads a piece of matter content (a document, note, filled form, folder listing, custom field, or template) by its virtual-filesystem path and returns its content, resolving which adapter to use from the path's protocol.",
        "models": [
          {
            "model": "MatterDocument",
            "service": "content"
          },
          {
            "model": "Note",
            "service": "content"
          }
        ]
      }
    },
    {
      "api": "lawrence-api",
      "protocol": "http",
      "method": "GET",
      "path": "/vfs/stat",
      "file": "apis/lawrence-api/src/content/vfs/vfs-router.ts",
      "line": 157,
      "middlewares": [],
      "router": {
        "file": "apis/lawrence-api/server.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/server.ts#L13"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/lawrence-api/src/content/vfs/vfs-router.ts",
        "apis/lawrence-api/src/content/vfs/vfs-registry.ts",
        "apis/lawrence-api/src/content/vfs/vfs-errors.ts"
      ],
      "id": "lawrence-api:GET /vfs/stat",
      "surfaceKind": "external",
      "location": {
        "file": "apis/lawrence-api/src/content/vfs/vfs-router.ts",
        "line": 157,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/content/vfs/vfs-router.ts#L157"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [],
      "domain": "ai",
      "sig": "4b7e558c",
      "interpretation": {
        "sig": "4b7e558c",
        "summary": "Returns metadata for a single matter-content resource (name, type, created/updated timestamps, and optionally its field schema) resolved through the matching vfs adapter."
      }
    },
    {
      "api": "lawrence-api",
      "protocol": "http",
      "method": "GET",
      "path": "/vfs/ls",
      "file": "apis/lawrence-api/src/content/vfs/vfs-router.ts",
      "line": 219,
      "middlewares": [],
      "router": {
        "file": "apis/lawrence-api/server.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/server.ts#L13"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/lawrence-api/src/content/vfs/vfs-router.ts",
        "apis/lawrence-api/src/content/vfs/vfs-registry.ts",
        "apis/lawrence-api/src/content/vfs/vfs-errors.ts"
      ],
      "id": "lawrence-api:GET /vfs/ls",
      "surfaceKind": "external",
      "location": {
        "file": "apis/lawrence-api/src/content/vfs/vfs-router.ts",
        "line": 219,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/content/vfs/vfs-router.ts#L219"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [],
      "domain": "ai",
      "sig": "43395d49",
      "interpretation": {
        "sig": "43395d49",
        "summary": "Lists the content entries under a matter path (documents, notes, files, filled forms, etc.), with cursor-based pagination, resolved through the matching vfs adapter."
      }
    },
    {
      "api": "lawrence-api",
      "protocol": "http",
      "method": "POST",
      "path": "/vfs/edit",
      "file": "apis/lawrence-api/src/content/vfs/vfs-router.ts",
      "line": 276,
      "middlewares": [
        {
          "name": "intraServiceAuthRoute",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/middleware/auth/intraServiceAuth.ts#L34"
        },
        {
          "name": "rawToJson",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/middleware/rawToJson.ts#L3"
        }
      ],
      "router": {
        "file": "apis/lawrence-api/server.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/server.ts#L13"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/lawrence-api/src/content/vfs/vfs-router.ts",
        "apis/lawrence-api/src/content/vfs/vfs-errors.ts",
        "apis/lawrence-api/src/content/vfs/vfs-registry.ts",
        "apis/lawrence-api/src/middleware/auth/intraServiceAuth.ts",
        "apis/lawrence-api/env.ts",
        "apis/lawrence-api/src/middleware/rawToJson.ts"
      ],
      "id": "lawrence-api:POST /vfs/edit",
      "surfaceKind": "external",
      "location": {
        "file": "apis/lawrence-api/src/content/vfs/vfs-router.ts",
        "line": 276,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/content/vfs/vfs-router.ts#L276"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [],
      "domain": "ai",
      "sig": "9e9f2d6",
      "interpretation": {
        "sig": "9e9f2d6",
        "summary": "Applies a structured edit to matter content: adds tracked-change marks to a document's or note's content, sets a filled-form field, runs a folder operation, sets/applies/removes a custom field, or applies a matter template, depending on the path's protocol and field segment.",
        "flags": [
          "via-services (writes delegated to the matching vfs adapter)"
        ],
        "models": [
          {
            "model": "MatterDocument",
            "service": "content"
          },
          {
            "model": "Note",
            "service": "content"
          },
          {
            "model": "CustomField",
            "service": "content"
          }
        ]
      }
    },
    {
      "api": "lawrence-api",
      "protocol": "http",
      "method": "POST",
      "path": "/vfs/find-replace",
      "file": "apis/lawrence-api/src/content/vfs/vfs-router.ts",
      "line": 490,
      "middlewares": [
        {
          "name": "intraServiceAuthRoute",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/middleware/auth/intraServiceAuth.ts#L34"
        },
        {
          "name": "rawToJson",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/middleware/rawToJson.ts#L3"
        }
      ],
      "router": {
        "file": "apis/lawrence-api/server.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/server.ts#L13"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/lawrence-api/src/content/vfs/vfs-router.ts",
        "apis/lawrence-api/src/content/vfs/vfs-errors.ts",
        "apis/lawrence-api/src/content/vfs/vfs-registry.ts",
        "apis/lawrence-api/src/middleware/auth/intraServiceAuth.ts",
        "apis/lawrence-api/env.ts",
        "apis/lawrence-api/src/middleware/rawToJson.ts"
      ],
      "id": "lawrence-api:POST /vfs/find-replace",
      "surfaceKind": "external",
      "location": {
        "file": "apis/lawrence-api/src/content/vfs/vfs-router.ts",
        "line": 490,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/content/vfs/vfs-router.ts#L490"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [],
      "domain": "ai",
      "sig": "137fc55c",
      "interpretation": {
        "sig": "137fc55c",
        "summary": "Runs a global find-and-replace over a matter document's content, landing each match as a separate tracked-change replacement; `documents://` only, rejects any other content type.",
        "flags": [
          "via-services (write delegated to MatterDocumentAdapter)"
        ],
        "models": [
          {
            "model": "MatterDocument",
            "service": "content"
          }
        ]
      }
    },
    {
      "api": "lawrence-api",
      "protocol": "http",
      "method": "POST",
      "path": "/vfs/create",
      "file": "apis/lawrence-api/src/content/vfs/vfs-router.ts",
      "line": 578,
      "middlewares": [
        {
          "name": "intraServiceAuthRoute",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/middleware/auth/intraServiceAuth.ts#L34"
        },
        {
          "name": "rawToJson",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/middleware/rawToJson.ts#L3"
        }
      ],
      "router": {
        "file": "apis/lawrence-api/server.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/server.ts#L13"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/lawrence-api/src/content/vfs/vfs-router.ts",
        "apis/lawrence-api/src/content/vfs/vfs-registry.ts",
        "apis/lawrence-api/src/content/vfs/vfs-errors.ts",
        "apis/lawrence-api/src/middleware/auth/intraServiceAuth.ts",
        "apis/lawrence-api/env.ts",
        "apis/lawrence-api/src/middleware/rawToJson.ts"
      ],
      "id": "lawrence-api:POST /vfs/create",
      "surfaceKind": "external",
      "location": {
        "file": "apis/lawrence-api/src/content/vfs/vfs-router.ts",
        "line": 578,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/content/vfs/vfs-router.ts#L578"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [],
      "domain": "ai",
      "sig": "5e55c41e",
      "interpretation": {
        "sig": "5e55c41e",
        "summary": "Creates a new matter-content resource (document, note, folder entry, etc.) at the given virtual-filesystem path, delegating creation to the adapter matching the path's protocol.",
        "flags": [
          "via-services (write delegated to the matching vfs adapter)"
        ]
      }
    },
    {
      "api": "lawrence-api",
      "protocol": "http",
      "method": "POST",
      "path": "/vfs/write",
      "file": "apis/lawrence-api/src/content/vfs/vfs-router.ts",
      "line": 625,
      "middlewares": [
        {
          "name": "intraServiceAuthRoute",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/middleware/auth/intraServiceAuth.ts#L34"
        },
        {
          "name": "rawToJson",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/middleware/rawToJson.ts#L3"
        }
      ],
      "router": {
        "file": "apis/lawrence-api/server.ts",
        "line": 13,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/server.ts#L13"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/lawrence-api/src/content/vfs/vfs-router.ts",
        "apis/lawrence-api/src/content/vfs/vfs-registry.ts",
        "apis/lawrence-api/src/content/vfs/vfs-errors.ts",
        "apis/lawrence-api/src/middleware/auth/intraServiceAuth.ts",
        "apis/lawrence-api/env.ts",
        "apis/lawrence-api/src/middleware/rawToJson.ts"
      ],
      "id": "lawrence-api:POST /vfs/write",
      "surfaceKind": "external",
      "location": {
        "file": "apis/lawrence-api/src/content/vfs/vfs-router.ts",
        "line": 625,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/lawrence-api/src/content/vfs/vfs-router.ts#L625"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [],
      "domain": "ai",
      "sig": "a3aaac87",
      "interpretation": {
        "sig": "a3aaac87",
        "summary": "Overwrites an existing matter-content resource's data at the given path, delegating the write to the adapter matching the path's protocol, and returns a simple success flag.",
        "flags": [
          "via-services (write delegated to the matching vfs adapter)"
        ]
      }
    },
    {
      "api": "platform-api",
      "protocol": "http",
      "method": "POST",
      "path": "/voice/tools/escalate-to-human",
      "file": "apis/platform-api/src/modules/telephony/voice/router.ts",
      "line": 213,
      "middlewares": [],
      "router": {
        "file": "apis/platform-api/server.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/server.ts#L23"
      },
      "downstream": [
        {
          "service": "telephonyVoice",
          "path": "voice.tools.escalateToHuman",
          "kind": "write",
          "seq": 0
        }
      ],
      "middleware": [],
      "tracedFiles": [
        "apis/platform-api/src/modules/telephony/voice/router.ts"
      ],
      "id": "platform-api:POST /voice/tools/escalate-to-human",
      "surfaceKind": "external",
      "location": {
        "file": "apis/platform-api/src/modules/telephony/voice/router.ts",
        "line": 213,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/voice/router.ts#L213"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "voice.tools.escalateToHuman",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:voice.tools.escalateToHuman",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L123",
            "domain": "voice"
          }
        ]
      },
      "triggers": [],
      "domain": "voice",
      "sig": "81de3800",
      "interpretation": {
        "sig": "81de3800",
        "summary": "Bearer-token tool endpoint the voice AI agent calls to hand a live call off to a human. Delegates to the telephony service's `escalateToHuman` mutation, which drives the actual call transfer.",
        "flags": [
          "transport-only, write happens in telephony-service"
        ]
      }
    },
    {
      "api": "platform-api",
      "protocol": "http",
      "method": "POST",
      "path": "/voice/tools/end-call",
      "file": "apis/platform-api/src/modules/telephony/voice/router.ts",
      "line": 221,
      "middlewares": [],
      "router": {
        "file": "apis/platform-api/server.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/server.ts#L23"
      },
      "downstream": [
        {
          "service": "telephonyVoice",
          "path": "voice.tools.endCall",
          "kind": "write",
          "seq": 0
        }
      ],
      "middleware": [],
      "tracedFiles": [
        "apis/platform-api/src/modules/telephony/voice/router.ts"
      ],
      "id": "platform-api:POST /voice/tools/end-call",
      "surfaceKind": "external",
      "location": {
        "file": "apis/platform-api/src/modules/telephony/voice/router.ts",
        "line": 221,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/voice/router.ts#L221"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "voice.tools.endCall",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:voice.tools.endCall",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L127",
            "domain": "voice"
          }
        ]
      },
      "triggers": [],
      "domain": "voice",
      "sig": "71a16e67",
      "interpretation": {
        "sig": "71a16e67",
        "summary": "Bearer-token tool endpoint the voice AI agent calls to hang up the current call. Delegates to the telephony service's `endCall` mutation to actually terminate it.",
        "flags": [
          "transport-only, write happens in telephony-service"
        ]
      }
    },
    {
      "api": "platform-api",
      "protocol": "http",
      "method": "POST",
      "path": "/voice/incoming",
      "file": "apis/platform-api/src/modules/telephony/voice/router.ts",
      "line": 87,
      "middlewares": [],
      "router": {
        "file": "apis/platform-api/server.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/server.ts#L23"
      },
      "downstream": [
        {
          "service": "telephonyVoice",
          "path": "voice.incoming",
          "kind": "write",
          "seq": 0
        }
      ],
      "middleware": [],
      "tracedFiles": [
        "apis/platform-api/src/modules/telephony/voice/router.ts"
      ],
      "id": "platform-api:POST /voice/incoming",
      "surfaceKind": "external",
      "location": {
        "file": "apis/platform-api/src/modules/telephony/voice/router.ts",
        "line": 87,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/voice/router.ts#L87"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "voice.incoming",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:voice.incoming",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L26",
            "domain": "voice"
          }
        ]
      },
      "triggers": [],
      "domain": "voice",
      "sig": "e9354d09",
      "interpretation": {
        "sig": "e9354d09",
        "summary": "Twilio webhook fired when a new call reaches a Lawhive number. Verifies the Twilio signature, then asks the telephony service's `incoming` mutation to set up the call and return the TwiML that controls what the caller hears next.",
        "flags": [
          "transport-only, write happens in telephony-service"
        ]
      }
    },
    {
      "api": "platform-api",
      "protocol": "http",
      "method": "POST",
      "path": "/voice/dial-status",
      "file": "apis/platform-api/src/modules/telephony/voice/router.ts",
      "line": 100,
      "middlewares": [],
      "router": {
        "file": "apis/platform-api/server.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/server.ts#L23"
      },
      "downstream": [
        {
          "service": "telephonyVoice",
          "path": "voice.dialStatus",
          "kind": "write",
          "seq": 0
        }
      ],
      "middleware": [],
      "tracedFiles": [
        "apis/platform-api/src/modules/telephony/voice/router.ts"
      ],
      "id": "platform-api:POST /voice/dial-status",
      "surfaceKind": "external",
      "location": {
        "file": "apis/platform-api/src/modules/telephony/voice/router.ts",
        "line": 100,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/voice/router.ts#L100"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "voice.dialStatus",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:voice.dialStatus",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L38",
            "domain": "voice"
          }
        ]
      },
      "triggers": [],
      "domain": "voice",
      "sig": "dfa074de",
      "interpretation": {
        "sig": "dfa074de",
        "summary": "Twilio webhook reporting how a dialed leg ended (e.g. the parent call completing while a transfer was in progress). Passes call and dial status to the telephony service's `dialStatus` mutation, which returns the next TwiML step.",
        "flags": [
          "transport-only, write happens in telephony-service"
        ]
      }
    },
    {
      "api": "platform-api",
      "protocol": "http",
      "method": "POST",
      "path": "/voice/human-answer",
      "file": "apis/platform-api/src/modules/telephony/voice/router.ts",
      "line": 113,
      "middlewares": [],
      "router": {
        "file": "apis/platform-api/server.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/server.ts#L23"
      },
      "downstream": [
        {
          "service": "telephonyVoice",
          "path": "voice.humanAnswer",
          "kind": "write",
          "seq": 0
        }
      ],
      "middleware": [],
      "tracedFiles": [
        "apis/platform-api/src/modules/telephony/voice/router.ts"
      ],
      "id": "platform-api:POST /voice/human-answer",
      "surfaceKind": "external",
      "location": {
        "file": "apis/platform-api/src/modules/telephony/voice/router.ts",
        "line": 113,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/voice/router.ts#L113"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "voice.humanAnswer",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:voice.humanAnswer",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L49",
            "domain": "voice"
          }
        ]
      },
      "triggers": [],
      "domain": "voice",
      "sig": "95f9ebea",
      "interpretation": {
        "sig": "95f9ebea",
        "summary": "Twilio webhook fired when a human screening leg picks up. Forwards the caller sid, answering-machine detection result, and leg sid to the telephony service's `humanAnswer` mutation to decide how the call proceeds.",
        "flags": [
          "transport-only, write happens in telephony-service"
        ]
      }
    },
    {
      "api": "platform-api",
      "protocol": "http",
      "method": "POST",
      "path": "/voice/human-status",
      "file": "apis/platform-api/src/modules/telephony/voice/router.ts",
      "line": 125,
      "middlewares": [],
      "router": {
        "file": "apis/platform-api/server.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/server.ts#L23"
      },
      "downstream": [
        {
          "service": "telephonyVoice",
          "path": "voice.humanStatus",
          "kind": "write",
          "seq": 0
        }
      ],
      "middleware": [],
      "tracedFiles": [
        "apis/platform-api/src/modules/telephony/voice/router.ts"
      ],
      "id": "platform-api:POST /voice/human-status",
      "surfaceKind": "external",
      "location": {
        "file": "apis/platform-api/src/modules/telephony/voice/router.ts",
        "line": 125,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/voice/router.ts#L125"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "voice.humanStatus",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:voice.humanStatus",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L60",
            "domain": "voice"
          }
        ]
      },
      "triggers": [],
      "domain": "voice",
      "sig": "381d1402",
      "interpretation": {
        "sig": "381d1402",
        "summary": "Fire-and-forget Twilio status callback for the human leg of a call (answered, completed, duration, etc). Forwards the details to the telephony service's `humanStatus` mutation and always returns 204, logging rather than surfacing errors.",
        "flags": [
          "transport-only, write happens in telephony-service",
          "errors swallowed and only logged"
        ]
      }
    },
    {
      "api": "platform-api",
      "protocol": "http",
      "method": "POST",
      "path": "/voice/conference-status",
      "file": "apis/platform-api/src/modules/telephony/voice/router.ts",
      "line": 138,
      "middlewares": [],
      "router": {
        "file": "apis/platform-api/server.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/server.ts#L23"
      },
      "downstream": [
        {
          "service": "telephonyVoice",
          "path": "voice.conferenceStatus",
          "kind": "write",
          "seq": 0
        }
      ],
      "middleware": [],
      "tracedFiles": [
        "apis/platform-api/src/modules/telephony/voice/router.ts"
      ],
      "id": "platform-api:POST /voice/conference-status",
      "surfaceKind": "external",
      "location": {
        "file": "apis/platform-api/src/modules/telephony/voice/router.ts",
        "line": 138,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/voice/router.ts#L138"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "voice.conferenceStatus",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:voice.conferenceStatus",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L102",
            "domain": "voice"
          }
        ]
      },
      "triggers": [],
      "domain": "voice",
      "sig": "1caaf13e",
      "interpretation": {
        "sig": "1caaf13e",
        "summary": "Fire-and-forget Twilio status callback for conference events (a leg joining/leaving the bridge). Forwards the event and call sid to the telephony service's `conferenceStatus` mutation and always returns 204, logging rather than surfacing errors.",
        "flags": [
          "transport-only, write happens in telephony-service",
          "errors swallowed and only logged"
        ]
      }
    },
    {
      "api": "platform-api",
      "protocol": "http",
      "method": "POST",
      "path": "/voice/escalation-answer",
      "file": "apis/platform-api/src/modules/telephony/voice/router.ts",
      "line": 149,
      "middlewares": [],
      "router": {
        "file": "apis/platform-api/server.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/server.ts#L23"
      },
      "downstream": [
        {
          "service": "telephonyVoice",
          "path": "voice.escalationAnswer",
          "kind": "write",
          "seq": 0
        }
      ],
      "middleware": [],
      "tracedFiles": [
        "apis/platform-api/src/modules/telephony/voice/router.ts"
      ],
      "id": "platform-api:POST /voice/escalation-answer",
      "surfaceKind": "external",
      "location": {
        "file": "apis/platform-api/src/modules/telephony/voice/router.ts",
        "line": 149,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/voice/router.ts#L149"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "voice.escalationAnswer",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:voice.escalationAnswer",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L74",
            "domain": "voice"
          }
        ]
      },
      "triggers": [],
      "domain": "voice",
      "sig": "6e33be0e",
      "interpretation": {
        "sig": "6e33be0e",
        "summary": "Twilio webhook fired when the escalation leg (a human agent being paged in) picks up. Forwards caller sid, answering-machine detection, and leg sid to the telephony service's `escalationAnswer` mutation to decide the next TwiML step.",
        "flags": [
          "transport-only, write happens in telephony-service"
        ]
      }
    },
    {
      "api": "platform-api",
      "protocol": "http",
      "method": "POST",
      "path": "/voice/escalation-leg-status",
      "file": "apis/platform-api/src/modules/telephony/voice/router.ts",
      "line": 160,
      "middlewares": [],
      "router": {
        "file": "apis/platform-api/server.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/server.ts#L23"
      },
      "downstream": [
        {
          "service": "telephonyVoice",
          "path": "voice.escalationLegStatus",
          "kind": "write",
          "seq": 0
        }
      ],
      "middleware": [],
      "tracedFiles": [
        "apis/platform-api/src/modules/telephony/voice/router.ts"
      ],
      "id": "platform-api:POST /voice/escalation-leg-status",
      "surfaceKind": "external",
      "location": {
        "file": "apis/platform-api/src/modules/telephony/voice/router.ts",
        "line": 160,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/voice/router.ts#L160"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "voice.escalationLegStatus",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:voice.escalationLegStatus",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L84",
            "domain": "voice"
          }
        ]
      },
      "triggers": [],
      "domain": "voice",
      "sig": "9f10315",
      "interpretation": {
        "sig": "9f10315",
        "summary": "Fire-and-forget Twilio status callback for the escalation leg (status, duration, timestamp). Forwards the details to the telephony service's `escalationLegStatus` mutation and always returns 204, logging rather than surfacing errors.",
        "flags": [
          "transport-only, write happens in telephony-service",
          "errors swallowed and only logged"
        ]
      }
    },
    {
      "api": "platform-api",
      "protocol": "http",
      "method": "POST",
      "path": "/voice/escalation-fallback",
      "file": "apis/platform-api/src/modules/telephony/voice/router.ts",
      "line": 173,
      "middlewares": [],
      "router": {
        "file": "apis/platform-api/server.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/server.ts#L23"
      },
      "downstream": [
        {
          "service": "telephonyVoice",
          "path": "voice.escalationFallback",
          "kind": "write",
          "seq": 0
        }
      ],
      "middleware": [],
      "tracedFiles": [
        "apis/platform-api/src/modules/telephony/voice/router.ts"
      ],
      "id": "platform-api:POST /voice/escalation-fallback",
      "surfaceKind": "external",
      "location": {
        "file": "apis/platform-api/src/modules/telephony/voice/router.ts",
        "line": 173,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/voice/router.ts#L173"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "voice.escalationFallback",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:voice.escalationFallback",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L98",
            "domain": "voice"
          }
        ]
      },
      "triggers": [],
      "domain": "voice",
      "sig": "d3483796",
      "interpretation": {
        "sig": "d3483796",
        "summary": "Twilio webhook hit when an escalation attempt fails outright (e.g. no answer or an error connecting the human agent). Calls the telephony service's `escalationFallback` mutation with no params to get the fallback TwiML.",
        "flags": [
          "transport-only, write happens in telephony-service"
        ]
      }
    },
    {
      "api": "platform-api",
      "protocol": "http",
      "method": "POST",
      "path": "/voice/human-fallback",
      "file": "apis/platform-api/src/modules/telephony/voice/router.ts",
      "line": 180,
      "middlewares": [],
      "router": {
        "file": "apis/platform-api/server.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/server.ts#L23"
      },
      "downstream": [
        {
          "service": "telephonyVoice",
          "path": "voice.humanFallback",
          "kind": "write",
          "seq": 0
        }
      ],
      "middleware": [],
      "tracedFiles": [
        "apis/platform-api/src/modules/telephony/voice/router.ts"
      ],
      "id": "platform-api:POST /voice/human-fallback",
      "surfaceKind": "external",
      "location": {
        "file": "apis/platform-api/src/modules/telephony/voice/router.ts",
        "line": 180,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/platform-api/src/modules/telephony/voice/router.ts#L180"
      },
      "hops": {
        "direct": 1,
        "services": [
          "telephony-service"
        ],
        "reachable": [],
        "depth": 1,
        "calls": [
          {
            "service": "telephony-service",
            "path": "voice.humanFallback",
            "kind": "write",
            "inferred": false,
            "targetId": "telephony-service:voice.humanFallback",
            "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/services/telephony-service/src/voice/voice-controller.ts#L114",
            "domain": "voice"
          }
        ]
      },
      "triggers": [],
      "domain": "voice",
      "sig": "8fabd772",
      "interpretation": {
        "sig": "8fabd772",
        "summary": "Twilio webhook hit when transferring to a human fails (no answer, busy, or error). Passes the caller sid to the telephony service's `humanFallback` mutation to get the TwiML that handles the failed transfer.",
        "flags": [
          "transport-only, write happens in telephony-service"
        ]
      }
    },
    {
      "api": "webhook-api",
      "protocol": "http",
      "method": "POST",
      "path": "/stripe/{*stripe}",
      "file": "apis/webhook-api/src/routes/stripe/index.ts",
      "line": 35,
      "middlewares": [
        {
          "name": "verify",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/middleware/verify.ts#L5"
        },
        {
          "name": "stripeVerify",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/routes/stripe/index.ts#L17"
        }
      ],
      "router": {
        "file": "apis/webhook-api/server.ts",
        "line": 46,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/server.ts#L46"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/webhook-api/src/routes/stripe/index.ts",
        "apis/webhook-api/src/routes/stripe/payment_intent/index.ts",
        "apis/webhook-api/src/routes/stripe/payment_intent/succeeded.ts",
        "apis/webhook-api/src/routes/stripe/payment_intent/failed.ts",
        "apis/webhook-api/src/routes/stripe/payment_intent/canceled.ts",
        "apis/webhook-api/src/routes/stripe/refund/index.ts",
        "apis/webhook-api/src/routes/stripe/refund/created.ts",
        "apis/webhook-api/src/routes/stripe/refund/updated.ts",
        "apis/webhook-api/src/middleware/verify.ts",
        "apis/webhook-api/src/middleware/clientVerify.ts"
      ],
      "id": "webhook-api:POST /stripe/{*stripe}",
      "surfaceKind": "external",
      "location": {
        "file": "apis/webhook-api/src/routes/stripe/index.ts",
        "line": 35,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/routes/stripe/index.ts#L35"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [
        "webhook/stripe/payment.canceled",
        "webhook/stripe/payment.failed",
        "webhook/stripe/payment.succeeded",
        "webhook/stripe/refund.received"
      ],
      "domain": null,
      "sig": "fbba7ec9",
      "interpretation": {
        "sig": "fbba7ec9",
        "summary": "Receives Stripe `payment_intent` and refund webhooks for a given market, verifies the Stripe signature, and republishes each as an Inngest event (`webhook/stripe/payment.succeeded`, `.failed`, `.canceled`) for the transaction service to act on. Refund events are parsed but currently only logged, since `refund.created`/`updated` have no downstream handler beyond a warn log.",
        "flags": [
          "write-mechanism-is-framework-publish"
        ]
      }
    },
    {
      "api": "webhook-api",
      "protocol": "http",
      "method": "POST",
      "path": "/sanity/{*sanity}",
      "file": "apis/webhook-api/src/routes/sanity.ts",
      "line": 8,
      "middlewares": [
        {
          "name": "verify",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/middleware/verify.ts#L5"
        }
      ],
      "router": {
        "file": "apis/webhook-api/server.ts",
        "line": 47,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/server.ts#L47"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/webhook-api/src/routes/sanity.ts",
        "apis/webhook-api/src/middleware/verify.ts"
      ],
      "id": "webhook-api:POST /sanity/{*sanity}",
      "surfaceKind": "external",
      "location": {
        "file": "apis/webhook-api/src/routes/sanity.ts",
        "line": 8,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/routes/sanity.ts#L8"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [
        "webhook/sanity/event"
      ],
      "domain": null,
      "sig": "5f62768c",
      "interpretation": {
        "sig": "5f62768c",
        "summary": "Takes any Sanity CMS webhook, wraps the raw document payload, and publishes it as `webhook/sanity/event` on Inngest without inspecting or validating its shape.",
        "flags": [
          "write-mechanism-is-framework-publish"
        ]
      }
    },
    {
      "api": "webhook-api",
      "protocol": "http",
      "method": "POST",
      "path": "/savvy-cal/{*savvy-cal}",
      "file": "apis/webhook-api/src/routes/savvyCal.ts",
      "line": 67,
      "middlewares": [
        {
          "name": "verify",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/middleware/verify.ts#L5"
        }
      ],
      "router": {
        "file": "apis/webhook-api/server.ts",
        "line": 48,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/server.ts#L48"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/webhook-api/src/routes/savvyCal.ts",
        "apis/webhook-api/src/middleware/verify.ts"
      ],
      "id": "webhook-api:POST /savvy-cal/{*savvy-cal}",
      "surfaceKind": "external",
      "location": {
        "file": "apis/webhook-api/src/routes/savvyCal.ts",
        "line": 67,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/routes/savvyCal.ts#L67"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [
        "webhook/savvyCal/eventCancelled",
        "webhook/savvyCal/eventRescheduled",
        "webhook/savvyCal/workflowTriggered"
      ],
      "domain": null,
      "sig": "9b1bc68d",
      "interpretation": {
        "sig": "9b1bc68d",
        "summary": "Handles SavvyCal booking events (rescheduled, cancelled, workflow action triggered), filters out events from a different SavvyCal link/environment, and publishes the matching one as an Inngest event so a meeting-reminder flow can react.",
        "flags": [
          "write-mechanism-is-framework-publish"
        ]
      }
    },
    {
      "api": "webhook-api",
      "protocol": "http",
      "method": "POST",
      "path": "/clerk/{*clerk}",
      "file": "apis/webhook-api/src/routes/clerk.ts",
      "line": 32,
      "middlewares": [
        {
          "name": "verify",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/middleware/verify.ts#L5"
        }
      ],
      "router": {
        "file": "apis/webhook-api/server.ts",
        "line": 49,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/server.ts#L49"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/webhook-api/src/routes/clerk.ts",
        "apis/webhook-api/src/middleware/verify.ts"
      ],
      "id": "webhook-api:POST /clerk/{*clerk}",
      "surfaceKind": "external",
      "location": {
        "file": "apis/webhook-api/src/routes/clerk.ts",
        "line": 32,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/routes/clerk.ts#L32"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [
        "webhook/clerk/user.updated"
      ],
      "domain": null,
      "sig": "2190f36c",
      "interpretation": {
        "sig": "2190f36c",
        "summary": "Handles Clerk auth webhooks: `user.created` and `user.deleted` are only logged, while `user.updated` is validated and republished as `webhook/clerk/user.updated` on Inngest.",
        "flags": [
          "write-mechanism-is-framework-publish"
        ]
      }
    },
    {
      "api": "webhook-api",
      "protocol": "http",
      "method": "POST",
      "path": "/nylas/{*nylas}",
      "file": "apis/webhook-api/src/routes/nylas.ts",
      "line": 98,
      "middlewares": [
        {
          "name": "clientVerify",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/middleware/clientVerify.ts#L5"
        }
      ],
      "router": {
        "file": "apis/webhook-api/server.ts",
        "line": 50,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/server.ts#L50"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/webhook-api/src/routes/nylas.ts",
        "apis/webhook-api/src/middleware/clientVerify.ts"
      ],
      "id": "webhook-api:POST /nylas/{*nylas}",
      "surfaceKind": "external",
      "location": {
        "file": "apis/webhook-api/src/routes/nylas.ts",
        "line": 98,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/routes/nylas.ts#L98"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [
        "webhook/nylas/folder.created",
        "webhook/nylas/folder.deleted",
        "webhook/nylas/folder.updated",
        "webhook/nylas/message.created",
        "webhook/nylas/message.updated"
      ],
      "domain": null,
      "sig": "a4b6a0f7",
      "interpretation": {
        "sig": "a4b6a0f7",
        "summary": "Verifies the Nylas HMAC signature on inbound email/folder change notifications and republishes `message.created`, `message.updated`, `folder.created`, `folder.updated`, and `folder.deleted` as Inngest events for the mail sync pipeline.",
        "flags": [
          "write-mechanism-is-framework-publish"
        ]
      }
    },
    {
      "api": "webhook-api",
      "protocol": "http",
      "method": "POST",
      "path": "/s3-malware-scan/{*s3-malware-scan}",
      "file": "apis/webhook-api/src/routes/s3MalwareScan.ts",
      "line": 62,
      "middlewares": [
        {
          "name": "snsVerifier",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/routes/s3MalwareScan.ts#L49"
        }
      ],
      "router": {
        "file": "apis/webhook-api/server.ts",
        "line": 51,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/server.ts#L51"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/webhook-api/src/routes/s3MalwareScan.ts",
        "apis/webhook-api/src/middleware/clientVerify.ts"
      ],
      "id": "webhook-api:POST /s3-malware-scan/{*s3-malware-scan}",
      "surfaceKind": "external",
      "location": {
        "file": "apis/webhook-api/src/routes/s3MalwareScan.ts",
        "line": 62,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/routes/s3MalwareScan.ts#L62"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [
        "webhook/s3/malwareScan.completed",
        "webhook/s3/malwareScan.failed",
        "webhook/s3/malwareScan.skipped"
      ],
      "domain": null,
      "sig": "d4677ae",
      "interpretation": {
        "sig": "d4677ae",
        "summary": "Validates an SNS-wrapped GuardDuty malware-scan-result notification and republishes it as one of `webhook/s3/malwareScan.completed`, `.skipped`, or `.failed` on Inngest, depending on the scan status.",
        "flags": [
          "write-mechanism-is-framework-publish"
        ]
      }
    },
    {
      "api": "webhook-api",
      "protocol": "http",
      "method": "POST",
      "path": "/s3-connect-recordings/{*s3-connect-recordings}",
      "file": "apis/webhook-api/src/routes/s3ConnectRecordings.ts",
      "line": 23,
      "middlewares": [
        {
          "name": "snsVerifier",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/routes/s3MalwareScan.ts#L49"
        }
      ],
      "router": {
        "file": "apis/webhook-api/server.ts",
        "line": 52,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/server.ts#L52"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/webhook-api/src/routes/s3ConnectRecordings.ts",
        "apis/webhook-api/src/routes/s3MalwareScan.ts",
        "apis/webhook-api/src/middleware/clientVerify.ts"
      ],
      "id": "webhook-api:POST /s3-connect-recordings/{*s3-connect-recordings}",
      "surfaceKind": "external",
      "location": {
        "file": "apis/webhook-api/src/routes/s3ConnectRecordings.ts",
        "line": 23,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/routes/s3ConnectRecordings.ts#L23"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [
        "webhook/s3/callRecordingsBucketObject.created",
        "webhook/s3/malwareScan.completed",
        "webhook/s3/malwareScan.failed",
        "webhook/s3/malwareScan.skipped"
      ],
      "domain": null,
      "sig": "2399ab14",
      "interpretation": {
        "sig": "2399ab14",
        "summary": "Validates an SNS notification for objects landing in the Connect call-recordings bucket and republishes each S3 record as `webhook/s3/callRecordingsBucketObject.created` on Inngest.",
        "flags": [
          "write-mechanism-is-framework-publish"
        ]
      }
    },
    {
      "api": "webhook-api",
      "protocol": "http",
      "method": "POST",
      "path": "/s3-object-created/{*s3-object-created}",
      "file": "apis/webhook-api/src/routes/s3ObjectCreated.ts",
      "line": 25,
      "middlewares": [
        {
          "name": "snsVerifier",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/routes/s3MalwareScan.ts#L49"
        }
      ],
      "router": {
        "file": "apis/webhook-api/server.ts",
        "line": 53,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/server.ts#L53"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/webhook-api/src/routes/s3ObjectCreated.ts",
        "apis/webhook-api/src/routes/s3MalwareScan.ts",
        "apis/webhook-api/src/middleware/clientVerify.ts"
      ],
      "id": "webhook-api:POST /s3-object-created/{*s3-object-created}",
      "surfaceKind": "external",
      "location": {
        "file": "apis/webhook-api/src/routes/s3ObjectCreated.ts",
        "line": 25,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/routes/s3ObjectCreated.ts#L25"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [
        "webhook/s3/malwareScan.completed",
        "webhook/s3/malwareScan.failed",
        "webhook/s3/malwareScan.skipped",
        "webhook/s3/object.created"
      ],
      "domain": null,
      "sig": "f71a00c9",
      "interpretation": {
        "sig": "f71a00c9",
        "summary": "Validates an SNS notification for a general S3 object-created event and republishes each record (bucket, key, size) as `webhook/s3/object.created` on Inngest.",
        "flags": [
          "write-mechanism-is-framework-publish"
        ]
      }
    },
    {
      "api": "webhook-api",
      "protocol": "http",
      "method": "POST",
      "path": "/connect/{*connect}",
      "file": "apis/webhook-api/src/routes/connect.ts",
      "line": 32,
      "middlewares": [
        {
          "name": "clientVerify",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/middleware/clientVerify.ts#L5"
        }
      ],
      "router": {
        "file": "apis/webhook-api/server.ts",
        "line": 54,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/server.ts#L54"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/webhook-api/src/routes/connect.ts",
        "apis/webhook-api/src/middleware/clientVerify.ts"
      ],
      "id": "webhook-api:POST /connect/{*connect}",
      "surfaceKind": "external",
      "location": {
        "file": "apis/webhook-api/src/routes/connect.ts",
        "line": 32,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/routes/connect.ts#L32"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [
        "webhook/connect/incomingCall.received"
      ],
      "domain": null,
      "sig": "3e92894f",
      "interpretation": {
        "sig": "3e92894f",
        "summary": "Verifies the Lawhive Connect HMAC signature on an `INCOMING_CALL` notification and republishes it as `webhook/connect/incomingCall.received` on Inngest with the from/to numbers.",
        "flags": [
          "write-mechanism-is-framework-publish"
        ]
      }
    },
    {
      "api": "webhook-api",
      "protocol": "http",
      "method": "POST",
      "path": "/customerio/{*customerio}",
      "file": "apis/webhook-api/src/routes/customerio.ts",
      "line": 37,
      "middlewares": [
        {
          "name": "verify",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/middleware/verify.ts#L5"
        }
      ],
      "router": {
        "file": "apis/webhook-api/server.ts",
        "line": 55,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/server.ts#L55"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/webhook-api/src/routes/customerio.ts",
        "apis/webhook-api/src/middleware/verify.ts"
      ],
      "id": "webhook-api:POST /customerio/{*customerio}",
      "surfaceKind": "external",
      "location": {
        "file": "apis/webhook-api/src/routes/customerio.ts",
        "line": 37,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/routes/customerio.ts#L37"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [],
      "domain": null,
      "sig": "3d9e146d",
      "interpretation": {
        "sig": "3d9e146d",
        "summary": "Receives Customer.io email-event webhooks and, for `object_type` email, posts an alert with the event payload to a Slack channel (`v3-errors-prod`/`dev` depending on environment). It does not write to the database or emit any Inngest event; other event types are just logged.",
        "flags": [
          "read-only-besides-slack-alert"
        ]
      }
    },
    {
      "api": "webhook-api",
      "protocol": "http",
      "method": "POST",
      "path": "/legl",
      "file": "apis/webhook-api/src/routes/legl/index.ts",
      "line": 40,
      "middlewares": [],
      "router": {
        "file": "apis/webhook-api/server.ts",
        "line": 56,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/server.ts#L56"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/webhook-api/src/routes/legl/index.ts"
      ],
      "id": "webhook-api:POST /legl",
      "surfaceKind": "external",
      "location": {
        "file": "apis/webhook-api/src/routes/legl/index.ts",
        "line": 40,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/routes/legl/index.ts#L40"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [
        "legl/engage.readyForReview",
        "legl/engage.reviewed"
      ],
      "domain": null,
      "sig": "f9fb5f20",
      "interpretation": {
        "sig": "f9fb5f20",
        "summary": "Verifies the LEGL HMAC signature on an engage lifecycle webhook and republishes `engage_request_ready_for_review` and `engage_request_reviewed` as `legl/engage.readyForReview` and `legl/engage.reviewed` on Inngest, carrying the engage request reference. Other LEGL event types are accepted (200) but ignored.",
        "flags": [
          "write-mechanism-is-framework-publish"
        ]
      }
    },
    {
      "api": "webhook-api",
      "protocol": "http",
      "method": "POST",
      "path": "/tally/{*tally}",
      "file": "apis/webhook-api/src/routes/tally.ts",
      "line": 47,
      "middlewares": [],
      "router": {
        "file": "apis/webhook-api/server.ts",
        "line": 57,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/server.ts#L57"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/webhook-api/src/routes/tally.ts"
      ],
      "id": "webhook-api:POST /tally/{*tally}",
      "surfaceKind": "external",
      "location": {
        "file": "apis/webhook-api/src/routes/tally.ts",
        "line": 47,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/routes/tally.ts#L47"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [
        "webhooks/v3/tally/submission.received"
      ],
      "domain": null,
      "sig": "c4fe8a8e",
      "interpretation": {
        "sig": "c4fe8a8e",
        "summary": "Receives Tally form-submission webhooks, pulls a matter/case ID out of the form's hidden fields, and republishes the submission as `webhooks/v3/tally/submission.received` on Inngest for that matter. Non-`FORM_RESPONSE` events or submissions missing a `case_id` are logged and ignored.",
        "flags": [
          "write-mechanism-is-framework-publish"
        ]
      }
    },
    {
      "api": "webhook-api",
      "protocol": "http",
      "method": "POST",
      "path": "/therefore/{*therefore}",
      "file": "apis/webhook-api/src/routes/therefore.ts",
      "line": 24,
      "middlewares": [
        {
          "name": "verify",
          "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/middleware/verify.ts#L5"
        }
      ],
      "router": {
        "file": "apis/webhook-api/server.ts",
        "line": 58,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/server.ts#L58"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/webhook-api/src/routes/therefore.ts",
        "apis/webhook-api/src/middleware/verify.ts"
      ],
      "id": "webhook-api:POST /therefore/{*therefore}",
      "surfaceKind": "external",
      "location": {
        "file": "apis/webhook-api/src/routes/therefore.ts",
        "line": 24,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/routes/therefore.ts#L24"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [
        "webhook/therefore/item.added"
      ],
      "domain": null,
      "sig": "e1ff7e25",
      "interpretation": {
        "sig": "e1ff7e25",
        "summary": "Receives item-added notifications from Therefore (document management) and republishes them as `webhook/therefore/item.added` on Inngest with the tenant name and document number.",
        "flags": [
          "write-mechanism-is-framework-publish"
        ]
      }
    },
    {
      "api": "webhook-api",
      "protocol": "http",
      "method": "POST",
      "path": "/twilio",
      "file": "apis/webhook-api/src/routes/twilio.ts",
      "line": 350,
      "middlewares": [],
      "router": {
        "file": "apis/webhook-api/server.ts",
        "line": 59,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/server.ts#L59"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/webhook-api/src/routes/twilio.ts",
        "apis/webhook-api/src/routes/twilioCredentials.ts"
      ],
      "id": "webhook-api:POST /twilio",
      "surfaceKind": "external",
      "location": {
        "file": "apis/webhook-api/src/routes/twilio.ts",
        "line": 350,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/routes/twilio.ts#L350"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [
        "matter-service/call.conference.updated",
        "matter-service/call.failed",
        "matter-service/call.recording.completed"
      ],
      "domain": "matters",
      "sig": "67051b22",
      "interpretation": {
        "sig": "67051b22",
        "summary": "Verifies the Twilio request signature per market account, then handles conference and call status callbacks: it can call the Twilio API directly to trigger a recording announcement on a conference, and it publishes `matter-service/call.conference.updated`, `call.failed`, or `call.recording.completed` on Inngest so the matter service can update call state.",
        "flags": [
          "write-mechanism-is-framework-publish",
          "also-calls-twilio-api-directly"
        ]
      }
    },
    {
      "api": "webhook-api",
      "protocol": "http",
      "method": "POST",
      "path": "/twilio-voice/call-status",
      "file": "apis/webhook-api/src/routes/twilioVoice.ts",
      "line": 38,
      "middlewares": [],
      "router": {
        "file": "apis/webhook-api/server.ts",
        "line": 60,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/server.ts#L60"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/webhook-api/src/routes/twilioVoice.ts"
      ],
      "id": "webhook-api:POST /twilio-voice/call-status",
      "surfaceKind": "external",
      "location": {
        "file": "apis/webhook-api/src/routes/twilioVoice.ts",
        "line": 38,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/routes/twilioVoice.ts#L38"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [
        "telephony-service/call.humanLegStatus.received",
        "telephony-service/call.recordingStatus.received",
        "telephony-service/call.status.received"
      ],
      "domain": "voice",
      "sig": "e58ff903",
      "interpretation": {
        "sig": "e58ff903",
        "summary": "Receives Twilio's number-level call-status callback (verified via a Hookdeck signature, since Twilio's own signature doesn't survive the Hookdeck relay) and republishes it as `telephony-service/call.status.received` on Inngest for the telephony service.",
        "flags": [
          "write-mechanism-is-framework-publish"
        ]
      }
    },
    {
      "api": "webhook-api",
      "protocol": "http",
      "method": "POST",
      "path": "/twilio-voice/dial-leg-status",
      "file": "apis/webhook-api/src/routes/twilioVoice.ts",
      "line": 75,
      "middlewares": [],
      "router": {
        "file": "apis/webhook-api/server.ts",
        "line": 60,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/server.ts#L60"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/webhook-api/src/routes/twilioVoice.ts"
      ],
      "id": "webhook-api:POST /twilio-voice/dial-leg-status",
      "surfaceKind": "external",
      "location": {
        "file": "apis/webhook-api/src/routes/twilioVoice.ts",
        "line": 75,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/routes/twilioVoice.ts#L75"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [
        "telephony-service/call.humanLegStatus.received",
        "telephony-service/call.recordingStatus.received",
        "telephony-service/call.status.received"
      ],
      "domain": "voice",
      "sig": "c12e365c",
      "interpretation": {
        "sig": "c12e365c",
        "summary": "Receives Twilio's per-leg dial status callback for hunt-group and escalation call legs, validates the leg kind from the query string, and republishes it as `telephony-service/call.humanLegStatus.received` on Inngest. An unknown/missing kind or unparseable body returns 422 so Hookdeck retries. Note: this route also defines /recording-status, which republishes `telephony-service/call.recordingStatus.received`, not covered by the batch's listed triggers for this id.",
        "flags": [
          "write-mechanism-is-framework-publish"
        ]
      }
    },
    {
      "api": "webhook-api",
      "protocol": "http",
      "method": "POST",
      "path": "/twilio-voice/recording-status",
      "file": "apis/webhook-api/src/routes/twilioVoice.ts",
      "line": 114,
      "middlewares": [],
      "router": {
        "file": "apis/webhook-api/server.ts",
        "line": 60,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/server.ts#L60"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/webhook-api/src/routes/twilioVoice.ts"
      ],
      "id": "webhook-api:POST /twilio-voice/recording-status",
      "surfaceKind": "external",
      "location": {
        "file": "apis/webhook-api/src/routes/twilioVoice.ts",
        "line": 114,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/routes/twilioVoice.ts#L114"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [
        "telephony-service/call.humanLegStatus.received",
        "telephony-service/call.recordingStatus.received",
        "telephony-service/call.status.received"
      ],
      "domain": "voice",
      "sig": "f21ad768",
      "interpretation": {
        "sig": "f21ad768",
        "summary": "Receives Twilio's recording-status callback (verified via Hookdeck's signature, since Twilio's own can't survive that hop) and republishes it as `telephony-service/call.recordingStatus.received` for the telephony service to pick up. An unparseable body is logged and acknowledged with 204 rather than retried.",
        "flags": [
          "write-mechanism-is-event-publish"
        ]
      }
    },
    {
      "api": "webhook-api",
      "protocol": "http",
      "method": "POST",
      "path": "/elevenlabs/post-call",
      "file": "apis/webhook-api/src/routes/elevenlabs.ts",
      "line": 168,
      "middlewares": [],
      "router": {
        "file": "apis/webhook-api/server.ts",
        "line": 61,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/server.ts#L61"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/webhook-api/src/routes/elevenlabs.ts"
      ],
      "id": "webhook-api:POST /elevenlabs/post-call",
      "surfaceKind": "external",
      "location": {
        "file": "apis/webhook-api/src/routes/elevenlabs.ts",
        "line": 168,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/src/routes/elevenlabs.ts#L168"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [
        "telephony-service/call.elevenLabsPostCall.received"
      ],
      "domain": "voice",
      "sig": "d2c9257",
      "interpretation": {
        "sig": "d2c9257",
        "summary": "Takes ElevenLabs' post-call webhook (transcript, analysis, agent state), validates it strictly against the expected shape, and emits `telephony-service/call.elevenLabsPostCall.received` with a narrowed payload (secrets and duplicate fields stripped out). A payload that fails validation gets a 422 so Hookdeck retries after a schema fix; a payload with no call SID is acknowledged and dropped since retrying it would never produce one.",
        "flags": [
          "write-mechanism-is-event-publish"
        ]
      }
    },
    {
      "api": "webhook-api",
      "protocol": "http",
      "method": "GET",
      "path": "/health",
      "file": "apis/webhook-api/server.ts",
      "line": 62,
      "middlewares": [],
      "router": {
        "file": "apis/webhook-api/server.ts",
        "line": 62,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/server.ts#L62"
      },
      "downstream": [],
      "middleware": [],
      "tracedFiles": [
        "apis/webhook-api/server.ts"
      ],
      "id": "webhook-api:GET /health",
      "surfaceKind": "external",
      "location": {
        "file": "apis/webhook-api/server.ts",
        "line": 62,
        "url": "https://github.com/Lawhive/platform-v3/blob/07-27-add_support_for_border_styling_on_tables_when_creaing_content_from_html/apis/webhook-api/server.ts#L62"
      },
      "hops": {
        "direct": 0,
        "services": [],
        "reachable": [],
        "depth": 0,
        "calls": []
      },
      "triggers": [],
      "domain": null,
      "sig": "5e901403",
      "interpretation": {
        "sig": "5e901403",
        "summary": "Returns 200 with `{ok: true}` for uptime checks. Does nothing else.",
        "flags": [
          "looks unused beyond health checks"
        ]
      }
    }
  ]
}