@contractspec/example.service-business-os 3.7.20 → 3.7.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- import{defineExample as g}from"@contractspec/lib.contracts-spec";var h=g({meta:{key:"service-business-os",version:"1.0.0",title:"Service Business OS",description:"Service business operating system: jobs, clients, scheduling, invoicing, and ops dashboards.",kind:"template",visibility:"public",stability:"experimental",owners:["@platform.core"],tags:["service-business","jobs","scheduling","invoicing"]},docs:{rootDocId:"docs.examples.service-business-os"},entrypoints:{packageName:"@contractspec/example.service-business-os",feature:"./feature",contracts:"./contracts",presentations:"./presentations",handlers:"./handlers",docs:"./docs"},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs","builder","markdown","evolution"]},studio:{enabled:!0,installable:!0},mcp:{enabled:!0}}}),q=h;export{q as default};
1
+ import{defineExample as b}from"@contractspec/lib.contracts-spec/examples";var g=b({meta:{key:"examples.service-business-os",version:"1.0.0",title:"Service Business Os",description:"Service Business OS example (clients, quotes, jobs, invoices) for ContractSpec",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","service-business-os"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.service-business-os"}}),k=g;export{k as default,g as ExamplesServiceBusinessOsExample};
@@ -1 +1 @@
1
- import{defineSchemaModel as $,ScalarTypeEnum as o}from"@contractspec/lib.schema";var A=$({name:"Client",description:"Client profile",fields:{id:{type:o.String_unsecure(),isOptional:!1},name:{type:o.String_unsecure(),isOptional:!1},contactEmail:{type:o.String_unsecure(),isOptional:!0},phone:{type:o.String_unsecure(),isOptional:!0},orgId:{type:o.String_unsecure(),isOptional:!1},ownerId:{type:o.String_unsecure(),isOptional:!1},createdAt:{type:o.DateTime(),isOptional:!1}}}),B=$({name:"CreateClientInput",description:"Input for creating a client",fields:{name:{type:o.String_unsecure(),isOptional:!1},contactEmail:{type:o.String_unsecure(),isOptional:!0},phone:{type:o.String_unsecure(),isOptional:!0},orgId:{type:o.String_unsecure(),isOptional:!1},ownerId:{type:o.String_unsecure(),isOptional:!1},metadata:{type:o.JSON(),isOptional:!0}}});import{defineCommand as W}from"@contractspec/lib.contracts-spec";var b=["@examples.service-business-os"],f=W({meta:{key:"service.client.create",version:"1.0.0",stability:"stable",owners:[...b],tags:["service-business-os","client","create"],description:"Create a new client.",goal:"Onboard clients.",context:"CRM."},io:{input:B,output:A},policy:{auth:"user"},acceptance:{scenarios:[{key:"create-client-happy-path",given:["User is authenticated"],when:["User creates a new client"],then:["Client is created"]}],examples:[{key:"create-basic",input:{name:"Acme Corp",email:"contact@acme.com",phone:"555-0123"},output:{id:"client-123",name:"Acme Corp"}}]}});import{defineSchemaModel as j,ScalarTypeEnum as v}from"@contractspec/lib.schema";var L=j({name:"Invoice",description:"Invoice issued for a job",fields:{id:{type:v.String_unsecure(),isOptional:!1},jobId:{type:v.String_unsecure(),isOptional:!1},invoiceNumber:{type:v.String_unsecure(),isOptional:!1},amount:{type:v.Float_unsecure(),isOptional:!1},currency:{type:v.String_unsecure(),isOptional:!1},status:{type:v.String_unsecure(),isOptional:!1},dueDate:{type:v.DateTime(),isOptional:!0},issuedAt:{type:v.DateTime(),isOptional:!0},paidAt:{type:v.DateTime(),isOptional:!0}}}),z=j({name:"IssueInvoiceInput",description:"Input for issuing an invoice",fields:{jobId:{type:v.String_unsecure(),isOptional:!1},dueDate:{type:v.DateTime(),isOptional:!0},notes:{type:v.String_unsecure(),isOptional:!0},lineItems:{type:v.JSON(),isOptional:!0}}});import{defineCommand as M}from"@contractspec/lib.contracts-spec";var h=["@examples.service-business-os"],t=M({meta:{key:"service.invoice.issue",version:"1.0.0",stability:"stable",owners:[...h],tags:["service-business-os","invoice","issue"],description:"Issue an invoice for a job.",goal:"Bill clients.",context:"Billing."},io:{input:z,output:L},policy:{auth:"user"},acceptance:{scenarios:[{key:"issue-invoice-happy-path",given:["Job is complete"],when:["User issues invoice"],then:["Invoice is created and sent"]}],examples:[{key:"issue-standard",input:{jobId:"job-123",dueDate:"2025-02-01",items:[{description:"Service",amount:100}]},output:{id:"inv-456",status:"issued",total:100}}]}});import{defineSchemaModel as G,ScalarTypeEnum as C}from"@contractspec/lib.schema";var Q=G({name:"Job",description:"Scheduled job",fields:{id:{type:C.String_unsecure(),isOptional:!1},quoteId:{type:C.String_unsecure(),isOptional:!1},clientId:{type:C.String_unsecure(),isOptional:!1},title:{type:C.String_unsecure(),isOptional:!1},status:{type:C.String_unsecure(),isOptional:!1},scheduledAt:{type:C.DateTime(),isOptional:!0},completedAt:{type:C.DateTime(),isOptional:!0},assignedTo:{type:C.String_unsecure(),isOptional:!0}}}),H=G({name:"ScheduleJobInput",description:"Input for scheduling a job",fields:{quoteId:{type:C.String_unsecure(),isOptional:!1},scheduledAt:{type:C.DateTime(),isOptional:!1},assignedTo:{type:C.String_unsecure(),isOptional:!0},location:{type:C.JSON(),isOptional:!0},title:{type:C.String_unsecure(),isOptional:!0}}}),K=G({name:"CompleteJobInput",description:"Input for completing a job",fields:{jobId:{type:C.String_unsecure(),isOptional:!1},completedAt:{type:C.DateTime(),isOptional:!0},notes:{type:C.String_unsecure(),isOptional:!0}}});import{defineCommand as q,defineQuery as s}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as F,ScalarTypeEnum as g}from"@contractspec/lib.schema";var U=["@examples.service-business-os"],I=F({name:"ListJobsInput",description:"Input for listing jobs",fields:{status:{type:g.String_unsecure(),isOptional:!0},clientId:{type:g.String_unsecure(),isOptional:!0},limit:{type:g.Int_unsecure(),isOptional:!0},offset:{type:g.Int_unsecure(),isOptional:!0}}}),P=F({name:"ListJobsOutput",description:"Output for listing jobs",fields:{jobs:{type:Q,isOptional:!1,isList:!0},total:{type:g.Int_unsecure(),isOptional:!1}}}),d=s({meta:{key:"service.job.list",version:"1.0.0",stability:"stable",owners:[...U],tags:["service-business-os","job","list","query"],description:"List all jobs with filtering",goal:"Retrieve list of jobs",context:"Job management"},io:{input:I,output:P},policy:{auth:"user"},acceptance:{scenarios:[{key:"list-jobs-happy-path",given:["Jobs exist"],when:["User lists jobs"],then:["List of jobs is returned"]}],examples:[{key:"list-active",input:{status:"scheduled",limit:10},output:{jobs:[],total:5}}]}}),i=q({meta:{key:"service.job.schedule",version:"1.0.0",stability:"stable",owners:[...U],tags:["service-business-os","job","schedule"],description:"Schedule a job.",goal:"Schedule work.",context:"Job scheduling."},io:{input:H,output:Q},policy:{auth:"user"},acceptance:{scenarios:[{key:"schedule-job-happy-path",given:["Client exists"],when:["User schedules job"],then:["Job is created with status SCHEDULED"]}],examples:[{key:"schedule-repair",input:{clientId:"client-123",date:"2025-01-20T10:00:00Z",type:"repair"},output:{id:"job-456",status:"scheduled"}}]}}),r=q({meta:{key:"service.job.complete",version:"1.0.0",stability:"stable",owners:[...U],tags:["service-business-os","job","complete"],description:"Mark a job as complete.",goal:"Record job completion.",context:"Job management."},io:{input:K,output:Q},policy:{auth:"user"},acceptance:{scenarios:[{key:"complete-job-happy-path",given:["Job is scheduled"],when:["User completes job"],then:["Job status becomes COMPLETED"]}],examples:[{key:"mark-complete",input:{jobId:"job-456",notes:"Done successfully"},output:{id:"job-456",status:"completed"}}]}});import{defineSchemaModel as O,ScalarTypeEnum as w}from"@contractspec/lib.schema";var V=O({name:"Payment",description:"Payment applied to invoice",fields:{id:{type:w.String_unsecure(),isOptional:!1},invoiceId:{type:w.String_unsecure(),isOptional:!1},amount:{type:w.Float_unsecure(),isOptional:!1},currency:{type:w.String_unsecure(),isOptional:!1},method:{type:w.String_unsecure(),isOptional:!1},reference:{type:w.String_unsecure(),isOptional:!0},receivedAt:{type:w.DateTime(),isOptional:!1}}}),X=O({name:"RecordPaymentInput",description:"Input for recording a payment",fields:{invoiceId:{type:w.String_unsecure(),isOptional:!1},amount:{type:w.Float_unsecure(),isOptional:!1},method:{type:w.String_unsecure(),isOptional:!1},reference:{type:w.String_unsecure(),isOptional:!0},receivedAt:{type:w.DateTime(),isOptional:!0}}});import{defineCommand as T}from"@contractspec/lib.contracts-spec";var p=["@examples.service-business-os"],y=T({meta:{key:"service.payment.record",version:"1.0.0",stability:"stable",owners:[...p],tags:["service-business-os","payment","record"],description:"Record a payment.",goal:"Track payments.",context:"Billing."},io:{input:X,output:V},policy:{auth:"user"},acceptance:{scenarios:[{key:"record-payment-happy-path",given:["Invoice exists"],when:["User records payment"],then:["Payment is recorded"]}],examples:[{key:"record-check",input:{invoiceId:"inv-456",amount:100,method:"check"},output:{id:"pay-123",status:"completed"}}]}});import{definePresentation as J,StabilityEnum as D}from"@contractspec/lib.contracts-spec";var Px=J({meta:{key:"service-business-os.dashboard",version:"1.0.0",title:"Service Dashboard",description:"Service business dashboard with overview metrics",domain:"services",owners:["@service-os"],tags:["services","dashboard"],stability:D.Experimental,goal:"Overview of service business metrics",context:"Service home page"},source:{type:"component",framework:"react",componentKey:"ServiceDashboard"},targets:["react","markdown"],policy:{flags:["service.dashboard.enabled"]}}),Ox=J({meta:{key:"service-business-os.client.list",version:"1.0.0",title:"Client List",description:"List of service clients",domain:"services",owners:["@service-os"],tags:["services","clients","list"],stability:D.Experimental,goal:"Browse and manage service clients",context:"Client management"},source:{type:"component",framework:"react",componentKey:"ClientList"},targets:["react","markdown"],policy:{flags:["service.clients.enabled"]}}),Rx=J({meta:{key:"service-business-os.quote.list",version:"1.0.0",title:"Quote List",description:"List of quotes with status",domain:"services",owners:["@service-os"],tags:["services","quotes","list"],stability:D.Experimental,goal:"Track and manage quotes",context:"Quote management"},source:{type:"component",framework:"react",componentKey:"QuoteList"},targets:["react","markdown"],policy:{flags:["service.quotes.enabled"]}}),Nx=J({meta:{key:"service-business-os.quote.detail",version:"1.0.0",title:"Quote Details",description:"Quote detail with line items",domain:"services",owners:["@service-os"],tags:["services","quote","detail"],stability:D.Experimental,goal:"View and edit quote details",context:"Quote inspection"},source:{type:"component",framework:"react",componentKey:"QuoteDetail"},targets:["react","markdown"],policy:{flags:["service.quotes.enabled"]}}),Wx=J({meta:{key:"service-business-os.job.board",version:"1.0.0",title:"Job Board",description:"Job board with kanban view",domain:"services",owners:["@service-os"],tags:["services","jobs","board","kanban"],stability:D.Experimental,goal:"Visual job management",context:"Field service scheduling"},source:{type:"component",framework:"react",componentKey:"JobBoard"},targets:["react"],policy:{flags:["service.jobs.enabled"]}}),bx=J({meta:{key:"service-business-os.invoice.list",version:"1.0.0",title:"Invoice List",description:"List of invoices with payment status",domain:"services",owners:["@service-os"],tags:["services","invoices","list"],stability:D.Experimental,goal:"Track invoices and payments",context:"Billing management"},source:{type:"component",framework:"react",componentKey:"InvoiceList"},targets:["react","markdown"],policy:{flags:["service.invoices.enabled"]}}),fx=J({meta:{key:"service-business-os.payment.list",version:"1.0.0",title:"Payment List",description:"List of payments received",domain:"services",owners:["@service-os"],tags:["services","payments","list"],stability:D.Experimental,goal:"Track received payments",context:"Payment reconciliation"},source:{type:"component",framework:"react",componentKey:"PaymentList"},targets:["react","markdown"],policy:{flags:["service.payments.enabled"]}});import{defineSchemaModel as Y,ScalarTypeEnum as x}from"@contractspec/lib.schema";var k=Y({name:"Quote",description:"Quote/proposal",fields:{id:{type:x.String_unsecure(),isOptional:!1},clientId:{type:x.String_unsecure(),isOptional:!1},title:{type:x.String_unsecure(),isOptional:!1},description:{type:x.String_unsecure(),isOptional:!0},amount:{type:x.Float_unsecure(),isOptional:!1},currency:{type:x.String_unsecure(),isOptional:!1},status:{type:x.String_unsecure(),isOptional:!1},validUntil:{type:x.DateTime(),isOptional:!0},createdAt:{type:x.DateTime(),isOptional:!1}}}),Z=Y({name:"CreateQuoteInput",description:"Input for creating a quote",fields:{clientId:{type:x.String_unsecure(),isOptional:!1},title:{type:x.String_unsecure(),isOptional:!1},description:{type:x.String_unsecure(),isOptional:!0},amount:{type:x.Float_unsecure(),isOptional:!1},currency:{type:x.String_unsecure(),isOptional:!0},validUntil:{type:x.DateTime(),isOptional:!0},orgId:{type:x.String_unsecure(),isOptional:!1},ownerId:{type:x.String_unsecure(),isOptional:!1}}}),_=Y({name:"AcceptQuoteInput",description:"Input for accepting a quote",fields:{quoteId:{type:x.String_unsecure(),isOptional:!1},acceptedBy:{type:x.String_unsecure(),isOptional:!1},notes:{type:x.String_unsecure(),isOptional:!0}}});import{defineCommand as R}from"@contractspec/lib.contracts-spec";var N=["@examples.service-business-os"],m=R({meta:{key:"service.quote.create",version:"1.0.0",stability:"stable",owners:[...N],tags:["service-business-os","quote","create"],description:"Create a quote/proposal.",goal:"Quote clients.",context:"Quote creation."},io:{input:Z,output:k},policy:{auth:"user"},acceptance:{scenarios:[{key:"create-quote-happy-path",given:["Client exists"],when:["User creates quote"],then:["Quote is created"]}],examples:[{key:"create-proposal",input:{clientId:"client-123",items:[{description:"Project A",price:5000}]},output:{id:"quote-123",status:"draft",total:5000}}]}}),u=R({meta:{key:"service.quote.accept",version:"1.0.0",stability:"stable",owners:[...N],tags:["service-business-os","quote","accept"],description:"Accept a quote.",goal:"Confirm quote.",context:"Quote acceptance."},io:{input:_,output:k},policy:{auth:"user"},acceptance:{scenarios:[{key:"accept-quote-happy-path",given:["Quote is open"],when:["Client accepts quote"],then:["Quote status becomes ACCEPTED"]}],examples:[{key:"client-accepts",input:{quoteId:"quote-123",signature:"John Doe"},output:{id:"quote-123",status:"accepted"}}]}});import{defineFeature as E}from"@contractspec/lib.contracts-spec";var mx=E({meta:{key:"service-business-os",title:"Service Business OS",description:"Quotes → jobs → invoices → payments for field services and agencies.",domain:"services",owners:["@service-os"],tags:["services","quotes","jobs","invoices","payments"],stability:"experimental",version:"1.0.0"},operations:[{key:"service.client.create",version:"1.0.0"},{key:"service.quote.create",version:"1.0.0"},{key:"service.quote.accept",version:"1.0.0"},{key:"service.job.schedule",version:"1.0.0"},{key:"service.job.complete",version:"1.0.0"},{key:"service.invoice.issue",version:"1.0.0"},{key:"service.payment.record",version:"1.0.0"},{key:"service.job.list",version:"1.0.0"}],events:[{key:"service.quote.sent",version:"1.0.0"},{key:"service.quote.accepted",version:"1.0.0"},{key:"service.job.scheduled",version:"1.0.0"},{key:"service.job.completed",version:"1.0.0"},{key:"service.invoice.issued",version:"1.0.0"},{key:"service.payment.received",version:"1.0.0"}],presentations:[{key:"service-business-os.dashboard",version:"1.0.0"},{key:"service-business-os.client.list",version:"1.0.0"},{key:"service-business-os.quote.list",version:"1.0.0"},{key:"service-business-os.quote.detail",version:"1.0.0"},{key:"service-business-os.job.board",version:"1.0.0"},{key:"service-business-os.invoice.list",version:"1.0.0"},{key:"service-business-os.payment.list",version:"1.0.0"}],presentationsTargets:[{key:"service-business-os.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.quote.list",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.invoice.list",version:"1.0.0",targets:["react","markdown"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"files",version:"1.0.0"}],provides:[{key:"quotes",version:"1.0.0"},{key:"jobs",version:"1.0.0"},{key:"invoices",version:"1.0.0"}]},telemetry:[{key:"service-business-os.telemetry",version:"1.0.0"}],jobs:[{key:"service-business-os.job.schedule-dispatch",version:"1.0.0"},{key:"service-business-os.job.invoice-reminder",version:"1.0.0"}],docs:["docs.examples.service-business-os","docs.examples.service-business-os.goal","docs.examples.service-business-os.usage","docs.examples.service-business-os.constraints"]});export{Px as ServiceDashboardPresentation,mx as ServiceBusinessFeature,H as ScheduleJobInputModel,i as ScheduleJobContract,X as RecordPaymentInputModel,y as RecordPaymentContract,k as QuoteModel,Rx as QuoteListPresentation,Nx as QuoteDetailPresentation,V as PaymentModel,fx as PaymentListPresentation,P as ListJobsOutputModel,d as ListJobsOperation,I as ListJobsInputModel,Q as JobModel,Wx as JobBoardPresentation,z as IssueInvoiceInputModel,t as IssueInvoiceContract,L as InvoiceModel,bx as InvoiceListPresentation,Z as CreateQuoteInputModel,m as CreateQuoteContract,B as CreateClientInputModel,f as CreateClientContract,K as CompleteJobInputModel,r as CompleteJobContract,A as ClientModel,Ox as ClientListPresentation,_ as AcceptQuoteInputModel,u as AcceptQuoteContract};
1
+ import{defineSchemaModel as j,ScalarTypeEnum as C}from"@contractspec/lib.schema";var A=j({name:"Client",description:"Client profile",fields:{id:{type:C.String_unsecure(),isOptional:!1},name:{type:C.String_unsecure(),isOptional:!1},contactEmail:{type:C.String_unsecure(),isOptional:!0},phone:{type:C.String_unsecure(),isOptional:!0},orgId:{type:C.String_unsecure(),isOptional:!1},ownerId:{type:C.String_unsecure(),isOptional:!1},createdAt:{type:C.DateTime(),isOptional:!1}}}),L=j({name:"CreateClientInput",description:"Input for creating a client",fields:{name:{type:C.String_unsecure(),isOptional:!1},contactEmail:{type:C.String_unsecure(),isOptional:!0},phone:{type:C.String_unsecure(),isOptional:!0},orgId:{type:C.String_unsecure(),isOptional:!1},ownerId:{type:C.String_unsecure(),isOptional:!1},metadata:{type:C.JSON(),isOptional:!0}}});import{defineCommand as W}from"@contractspec/lib.contracts-spec";var b=["@examples.service-business-os"],M=W({meta:{key:"service.client.create",version:"1.0.0",stability:"stable",owners:[...b],tags:["service-business-os","client","create"],description:"Create a new client.",goal:"Onboard clients.",context:"CRM."},io:{input:L,output:A},policy:{auth:"user"},acceptance:{scenarios:[{key:"create-client-happy-path",given:["User is authenticated"],when:["User creates a new client"],then:["Client is created"]}],examples:[{key:"create-basic",input:{name:"Acme Corp",email:"contact@acme.com",phone:"555-0123"},output:{id:"client-123",name:"Acme Corp"}}]}});import{defineExample as f}from"@contractspec/lib.contracts-spec/examples";var h=f({meta:{key:"examples.service-business-os",version:"1.0.0",title:"Service Business Os",description:"Service Business OS example (clients, quotes, jobs, invoices) for ContractSpec",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","service-business-os"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.service-business-os"}}),Dx=h;import{defineSchemaModel as q,ScalarTypeEnum as w}from"@contractspec/lib.schema";var z=q({name:"Invoice",description:"Invoice issued for a job",fields:{id:{type:w.String_unsecure(),isOptional:!1},jobId:{type:w.String_unsecure(),isOptional:!1},invoiceNumber:{type:w.String_unsecure(),isOptional:!1},amount:{type:w.Float_unsecure(),isOptional:!1},currency:{type:w.String_unsecure(),isOptional:!1},status:{type:w.String_unsecure(),isOptional:!1},dueDate:{type:w.DateTime(),isOptional:!0},issuedAt:{type:w.DateTime(),isOptional:!0},paidAt:{type:w.DateTime(),isOptional:!0}}}),G=q({name:"IssueInvoiceInput",description:"Input for issuing an invoice",fields:{jobId:{type:w.String_unsecure(),isOptional:!1},dueDate:{type:w.DateTime(),isOptional:!0},notes:{type:w.String_unsecure(),isOptional:!0},lineItems:{type:w.JSON(),isOptional:!0}}});import{defineCommand as t}from"@contractspec/lib.contracts-spec";var s=["@examples.service-business-os"],d=t({meta:{key:"service.invoice.issue",version:"1.0.0",stability:"stable",owners:[...s],tags:["service-business-os","invoice","issue"],description:"Issue an invoice for a job.",goal:"Bill clients.",context:"Billing."},io:{input:G,output:z},policy:{auth:"user"},acceptance:{scenarios:[{key:"issue-invoice-happy-path",given:["Job is complete"],when:["User issues invoice"],then:["Invoice is created and sent"]}],examples:[{key:"issue-standard",input:{jobId:"job-123",dueDate:"2025-02-01",items:[{description:"Service",amount:100}]},output:{id:"inv-456",status:"issued",total:100}}]}});import{defineSchemaModel as H,ScalarTypeEnum as o}from"@contractspec/lib.schema";var Q=H({name:"Job",description:"Scheduled job",fields:{id:{type:o.String_unsecure(),isOptional:!1},quoteId:{type:o.String_unsecure(),isOptional:!1},clientId:{type:o.String_unsecure(),isOptional:!1},title:{type:o.String_unsecure(),isOptional:!1},status:{type:o.String_unsecure(),isOptional:!1},scheduledAt:{type:o.DateTime(),isOptional:!0},completedAt:{type:o.DateTime(),isOptional:!0},assignedTo:{type:o.String_unsecure(),isOptional:!0}}}),K=H({name:"ScheduleJobInput",description:"Input for scheduling a job",fields:{quoteId:{type:o.String_unsecure(),isOptional:!1},scheduledAt:{type:o.DateTime(),isOptional:!1},assignedTo:{type:o.String_unsecure(),isOptional:!0},location:{type:o.JSON(),isOptional:!0},title:{type:o.String_unsecure(),isOptional:!0}}}),U=H({name:"CompleteJobInput",description:"Input for completing a job",fields:{jobId:{type:o.String_unsecure(),isOptional:!1},completedAt:{type:o.DateTime(),isOptional:!0},notes:{type:o.String_unsecure(),isOptional:!0}}});import{defineCommand as B,defineQuery as i}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as F,ScalarTypeEnum as g}from"@contractspec/lib.schema";var V=["@examples.service-business-os"],I=F({name:"ListJobsInput",description:"Input for listing jobs",fields:{status:{type:g.String_unsecure(),isOptional:!0},clientId:{type:g.String_unsecure(),isOptional:!0},limit:{type:g.Int_unsecure(),isOptional:!0},offset:{type:g.Int_unsecure(),isOptional:!0}}}),P=F({name:"ListJobsOutput",description:"Output for listing jobs",fields:{jobs:{type:Q,isOptional:!1,isList:!0},total:{type:g.Int_unsecure(),isOptional:!1}}}),r=i({meta:{key:"service.job.list",version:"1.0.0",stability:"stable",owners:[...V],tags:["service-business-os","job","list","query"],description:"List all jobs with filtering",goal:"Retrieve list of jobs",context:"Job management"},io:{input:I,output:P},policy:{auth:"user"},acceptance:{scenarios:[{key:"list-jobs-happy-path",given:["Jobs exist"],when:["User lists jobs"],then:["List of jobs is returned"]}],examples:[{key:"list-active",input:{status:"scheduled",limit:10},output:{jobs:[],total:5}}]}}),T=B({meta:{key:"service.job.schedule",version:"1.0.0",stability:"stable",owners:[...V],tags:["service-business-os","job","schedule"],description:"Schedule a job.",goal:"Schedule work.",context:"Job scheduling."},io:{input:K,output:Q},policy:{auth:"user"},acceptance:{scenarios:[{key:"schedule-job-happy-path",given:["Client exists"],when:["User schedules job"],then:["Job is created with status SCHEDULED"]}],examples:[{key:"schedule-repair",input:{clientId:"client-123",date:"2025-01-20T10:00:00Z",type:"repair"},output:{id:"job-456",status:"scheduled"}}]}}),y=B({meta:{key:"service.job.complete",version:"1.0.0",stability:"stable",owners:[...V],tags:["service-business-os","job","complete"],description:"Mark a job as complete.",goal:"Record job completion.",context:"Job management."},io:{input:U,output:Q},policy:{auth:"user"},acceptance:{scenarios:[{key:"complete-job-happy-path",given:["Job is scheduled"],when:["User completes job"],then:["Job status becomes COMPLETED"]}],examples:[{key:"mark-complete",input:{jobId:"job-456",notes:"Done successfully"},output:{id:"job-456",status:"completed"}}]}});import{defineSchemaModel as R,ScalarTypeEnum as J}from"@contractspec/lib.schema";var X=R({name:"Payment",description:"Payment applied to invoice",fields:{id:{type:J.String_unsecure(),isOptional:!1},invoiceId:{type:J.String_unsecure(),isOptional:!1},amount:{type:J.Float_unsecure(),isOptional:!1},currency:{type:J.String_unsecure(),isOptional:!1},method:{type:J.String_unsecure(),isOptional:!1},reference:{type:J.String_unsecure(),isOptional:!0},receivedAt:{type:J.DateTime(),isOptional:!1}}}),Y=R({name:"RecordPaymentInput",description:"Input for recording a payment",fields:{invoiceId:{type:J.String_unsecure(),isOptional:!1},amount:{type:J.Float_unsecure(),isOptional:!1},method:{type:J.String_unsecure(),isOptional:!1},reference:{type:J.String_unsecure(),isOptional:!0},receivedAt:{type:J.DateTime(),isOptional:!0}}});import{defineCommand as p}from"@contractspec/lib.contracts-spec";var u=["@examples.service-business-os"],m=p({meta:{key:"service.payment.record",version:"1.0.0",stability:"stable",owners:[...u],tags:["service-business-os","payment","record"],description:"Record a payment.",goal:"Track payments.",context:"Billing."},io:{input:Y,output:X},policy:{auth:"user"},acceptance:{scenarios:[{key:"record-payment-happy-path",given:["Invoice exists"],when:["User records payment"],then:["Payment is recorded"]}],examples:[{key:"record-check",input:{invoiceId:"inv-456",amount:100,method:"check"},output:{id:"pay-123",status:"completed"}}]}});import{definePresentation as v,StabilityEnum as D}from"@contractspec/lib.contracts-spec";var bx=v({meta:{key:"service-business-os.dashboard",version:"1.0.0",title:"Service Dashboard",description:"Service business dashboard with overview metrics",domain:"services",owners:["@service-os"],tags:["services","dashboard"],stability:D.Experimental,goal:"Overview of service business metrics",context:"Service home page"},source:{type:"component",framework:"react",componentKey:"ServiceDashboard"},targets:["react","markdown"],policy:{flags:["service.dashboard.enabled"]}}),Mx=v({meta:{key:"service-business-os.client.list",version:"1.0.0",title:"Client List",description:"List of service clients",domain:"services",owners:["@service-os"],tags:["services","clients","list"],stability:D.Experimental,goal:"Browse and manage service clients",context:"Client management"},source:{type:"component",framework:"react",componentKey:"ClientList"},targets:["react","markdown"],policy:{flags:["service.clients.enabled"]}}),fx=v({meta:{key:"service-business-os.quote.list",version:"1.0.0",title:"Quote List",description:"List of quotes with status",domain:"services",owners:["@service-os"],tags:["services","quotes","list"],stability:D.Experimental,goal:"Track and manage quotes",context:"Quote management"},source:{type:"component",framework:"react",componentKey:"QuoteList"},targets:["react","markdown"],policy:{flags:["service.quotes.enabled"]}}),hx=v({meta:{key:"service-business-os.quote.detail",version:"1.0.0",title:"Quote Details",description:"Quote detail with line items",domain:"services",owners:["@service-os"],tags:["services","quote","detail"],stability:D.Experimental,goal:"View and edit quote details",context:"Quote inspection"},source:{type:"component",framework:"react",componentKey:"QuoteDetail"},targets:["react","markdown"],policy:{flags:["service.quotes.enabled"]}}),tx=v({meta:{key:"service-business-os.job.board",version:"1.0.0",title:"Job Board",description:"Job board with kanban view",domain:"services",owners:["@service-os"],tags:["services","jobs","board","kanban"],stability:D.Experimental,goal:"Visual job management",context:"Field service scheduling"},source:{type:"component",framework:"react",componentKey:"JobBoard"},targets:["react"],policy:{flags:["service.jobs.enabled"]}}),sx=v({meta:{key:"service-business-os.invoice.list",version:"1.0.0",title:"Invoice List",description:"List of invoices with payment status",domain:"services",owners:["@service-os"],tags:["services","invoices","list"],stability:D.Experimental,goal:"Track invoices and payments",context:"Billing management"},source:{type:"component",framework:"react",componentKey:"InvoiceList"},targets:["react","markdown"],policy:{flags:["service.invoices.enabled"]}}),dx=v({meta:{key:"service-business-os.payment.list",version:"1.0.0",title:"Payment List",description:"List of payments received",domain:"services",owners:["@service-os"],tags:["services","payments","list"],stability:D.Experimental,goal:"Track received payments",context:"Payment reconciliation"},source:{type:"component",framework:"react",componentKey:"PaymentList"},targets:["react","markdown"],policy:{flags:["service.payments.enabled"]}});import{defineSchemaModel as Z,ScalarTypeEnum as x}from"@contractspec/lib.schema";var k=Z({name:"Quote",description:"Quote/proposal",fields:{id:{type:x.String_unsecure(),isOptional:!1},clientId:{type:x.String_unsecure(),isOptional:!1},title:{type:x.String_unsecure(),isOptional:!1},description:{type:x.String_unsecure(),isOptional:!0},amount:{type:x.Float_unsecure(),isOptional:!1},currency:{type:x.String_unsecure(),isOptional:!1},status:{type:x.String_unsecure(),isOptional:!1},validUntil:{type:x.DateTime(),isOptional:!0},createdAt:{type:x.DateTime(),isOptional:!1}}}),_=Z({name:"CreateQuoteInput",description:"Input for creating a quote",fields:{clientId:{type:x.String_unsecure(),isOptional:!1},title:{type:x.String_unsecure(),isOptional:!1},description:{type:x.String_unsecure(),isOptional:!0},amount:{type:x.Float_unsecure(),isOptional:!1},currency:{type:x.String_unsecure(),isOptional:!0},validUntil:{type:x.DateTime(),isOptional:!0},orgId:{type:x.String_unsecure(),isOptional:!1},ownerId:{type:x.String_unsecure(),isOptional:!1}}}),$=Z({name:"AcceptQuoteInput",description:"Input for accepting a quote",fields:{quoteId:{type:x.String_unsecure(),isOptional:!1},acceptedBy:{type:x.String_unsecure(),isOptional:!1},notes:{type:x.String_unsecure(),isOptional:!0}}});import{defineCommand as N}from"@contractspec/lib.contracts-spec";var O=["@examples.service-business-os"],E=N({meta:{key:"service.quote.create",version:"1.0.0",stability:"stable",owners:[...O],tags:["service-business-os","quote","create"],description:"Create a quote/proposal.",goal:"Quote clients.",context:"Quote creation."},io:{input:_,output:k},policy:{auth:"user"},acceptance:{scenarios:[{key:"create-quote-happy-path",given:["Client exists"],when:["User creates quote"],then:["Quote is created"]}],examples:[{key:"create-proposal",input:{clientId:"client-123",items:[{description:"Project A",price:5000}]},output:{id:"quote-123",status:"draft",total:5000}}]}}),S=N({meta:{key:"service.quote.accept",version:"1.0.0",stability:"stable",owners:[...O],tags:["service-business-os","quote","accept"],description:"Accept a quote.",goal:"Confirm quote.",context:"Quote acceptance."},io:{input:$,output:k},policy:{auth:"user"},acceptance:{scenarios:[{key:"accept-quote-happy-path",given:["Quote is open"],when:["Client accepts quote"],then:["Quote status becomes ACCEPTED"]}],examples:[{key:"client-accepts",input:{quoteId:"quote-123",signature:"John Doe"},output:{id:"quote-123",status:"accepted"}}]}});import{defineFeature as l}from"@contractspec/lib.contracts-spec/features";var nx=l({meta:{key:"service-business-os",title:"Service Business OS",description:"Quotes → jobs → invoices → payments for field services and agencies.",domain:"services",owners:["@service-os"],tags:["services","quotes","jobs","invoices","payments"],stability:"experimental",version:"1.0.0"},operations:[{key:"service.client.create",version:"1.0.0"},{key:"service.quote.create",version:"1.0.0"},{key:"service.quote.accept",version:"1.0.0"},{key:"service.job.schedule",version:"1.0.0"},{key:"service.job.complete",version:"1.0.0"},{key:"service.invoice.issue",version:"1.0.0"},{key:"service.payment.record",version:"1.0.0"},{key:"service.job.list",version:"1.0.0"}],events:[{key:"service.quote.sent",version:"1.0.0"},{key:"service.quote.accepted",version:"1.0.0"},{key:"service.job.scheduled",version:"1.0.0"},{key:"service.job.completed",version:"1.0.0"},{key:"service.invoice.issued",version:"1.0.0"},{key:"service.payment.received",version:"1.0.0"}],presentations:[{key:"service-business-os.dashboard",version:"1.0.0"},{key:"service-business-os.client.list",version:"1.0.0"},{key:"service-business-os.quote.list",version:"1.0.0"},{key:"service-business-os.quote.detail",version:"1.0.0"},{key:"service-business-os.job.board",version:"1.0.0"},{key:"service-business-os.invoice.list",version:"1.0.0"},{key:"service-business-os.payment.list",version:"1.0.0"}],presentationsTargets:[{key:"service-business-os.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.quote.list",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.invoice.list",version:"1.0.0",targets:["react","markdown"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"files",version:"1.0.0"}],provides:[{key:"quotes",version:"1.0.0"},{key:"jobs",version:"1.0.0"},{key:"invoices",version:"1.0.0"}]},telemetry:[{key:"service-business-os.telemetry",version:"1.0.0"}],jobs:[{key:"service-business-os.job.schedule-dispatch",version:"1.0.0"},{key:"service-business-os.job.invoice-reminder",version:"1.0.0"}],docs:["docs.examples.service-business-os","docs.examples.service-business-os.goal","docs.examples.service-business-os.usage","docs.examples.service-business-os.constraints"]});export{bx as ServiceDashboardPresentation,nx as ServiceBusinessFeature,K as ScheduleJobInputModel,T as ScheduleJobContract,Y as RecordPaymentInputModel,m as RecordPaymentContract,k as QuoteModel,fx as QuoteListPresentation,hx as QuoteDetailPresentation,X as PaymentModel,dx as PaymentListPresentation,P as ListJobsOutputModel,r as ListJobsOperation,I as ListJobsInputModel,Q as JobModel,tx as JobBoardPresentation,G as IssueInvoiceInputModel,d as IssueInvoiceContract,z as InvoiceModel,sx as InvoiceListPresentation,h as ExamplesServiceBusinessOsExample,_ as CreateQuoteInputModel,E as CreateQuoteContract,L as CreateClientInputModel,M as CreateClientContract,U as CompleteJobInputModel,y as CompleteJobContract,A as ClientModel,Mx as ClientListPresentation,$ as AcceptQuoteInputModel,S as AcceptQuoteContract};
@@ -1 +1 @@
1
- import{defineFeature as g}from"@contractspec/lib.contracts-spec";var j=g({meta:{key:"service-business-os",title:"Service Business OS",description:"Quotes → jobs → invoices → payments for field services and agencies.",domain:"services",owners:["@service-os"],tags:["services","quotes","jobs","invoices","payments"],stability:"experimental",version:"1.0.0"},operations:[{key:"service.client.create",version:"1.0.0"},{key:"service.quote.create",version:"1.0.0"},{key:"service.quote.accept",version:"1.0.0"},{key:"service.job.schedule",version:"1.0.0"},{key:"service.job.complete",version:"1.0.0"},{key:"service.invoice.issue",version:"1.0.0"},{key:"service.payment.record",version:"1.0.0"},{key:"service.job.list",version:"1.0.0"}],events:[{key:"service.quote.sent",version:"1.0.0"},{key:"service.quote.accepted",version:"1.0.0"},{key:"service.job.scheduled",version:"1.0.0"},{key:"service.job.completed",version:"1.0.0"},{key:"service.invoice.issued",version:"1.0.0"},{key:"service.payment.received",version:"1.0.0"}],presentations:[{key:"service-business-os.dashboard",version:"1.0.0"},{key:"service-business-os.client.list",version:"1.0.0"},{key:"service-business-os.quote.list",version:"1.0.0"},{key:"service-business-os.quote.detail",version:"1.0.0"},{key:"service-business-os.job.board",version:"1.0.0"},{key:"service-business-os.invoice.list",version:"1.0.0"},{key:"service-business-os.payment.list",version:"1.0.0"}],presentationsTargets:[{key:"service-business-os.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.quote.list",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.invoice.list",version:"1.0.0",targets:["react","markdown"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"files",version:"1.0.0"}],provides:[{key:"quotes",version:"1.0.0"},{key:"jobs",version:"1.0.0"},{key:"invoices",version:"1.0.0"}]},telemetry:[{key:"service-business-os.telemetry",version:"1.0.0"}],jobs:[{key:"service-business-os.job.schedule-dispatch",version:"1.0.0"},{key:"service-business-os.job.invoice-reminder",version:"1.0.0"}],docs:["docs.examples.service-business-os","docs.examples.service-business-os.goal","docs.examples.service-business-os.usage","docs.examples.service-business-os.constraints"]});export{j as ServiceBusinessFeature};
1
+ import{defineFeature as g}from"@contractspec/lib.contracts-spec/features";var j=g({meta:{key:"service-business-os",title:"Service Business OS",description:"Quotes → jobs → invoices → payments for field services and agencies.",domain:"services",owners:["@service-os"],tags:["services","quotes","jobs","invoices","payments"],stability:"experimental",version:"1.0.0"},operations:[{key:"service.client.create",version:"1.0.0"},{key:"service.quote.create",version:"1.0.0"},{key:"service.quote.accept",version:"1.0.0"},{key:"service.job.schedule",version:"1.0.0"},{key:"service.job.complete",version:"1.0.0"},{key:"service.invoice.issue",version:"1.0.0"},{key:"service.payment.record",version:"1.0.0"},{key:"service.job.list",version:"1.0.0"}],events:[{key:"service.quote.sent",version:"1.0.0"},{key:"service.quote.accepted",version:"1.0.0"},{key:"service.job.scheduled",version:"1.0.0"},{key:"service.job.completed",version:"1.0.0"},{key:"service.invoice.issued",version:"1.0.0"},{key:"service.payment.received",version:"1.0.0"}],presentations:[{key:"service-business-os.dashboard",version:"1.0.0"},{key:"service-business-os.client.list",version:"1.0.0"},{key:"service-business-os.quote.list",version:"1.0.0"},{key:"service-business-os.quote.detail",version:"1.0.0"},{key:"service-business-os.job.board",version:"1.0.0"},{key:"service-business-os.invoice.list",version:"1.0.0"},{key:"service-business-os.payment.list",version:"1.0.0"}],presentationsTargets:[{key:"service-business-os.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.quote.list",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.invoice.list",version:"1.0.0",targets:["react","markdown"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"files",version:"1.0.0"}],provides:[{key:"quotes",version:"1.0.0"},{key:"jobs",version:"1.0.0"},{key:"invoices",version:"1.0.0"}]},telemetry:[{key:"service-business-os.telemetry",version:"1.0.0"}],jobs:[{key:"service-business-os.job.schedule-dispatch",version:"1.0.0"},{key:"service-business-os.job.invoice-reminder",version:"1.0.0"}],docs:["docs.examples.service-business-os","docs.examples.service-business-os.goal","docs.examples.service-business-os.usage","docs.examples.service-business-os.constraints"]});export{j as ServiceBusinessFeature};
package/dist/example.d.ts CHANGED
@@ -1,2 +1,3 @@
1
- declare const example: import("@contractspec/lib.contracts-spec").ExampleSpec;
2
- export default example;
1
+ declare const ExamplesServiceBusinessOsExample: import("@contractspec/lib.contracts-spec").ExampleSpec;
2
+ export default ExamplesServiceBusinessOsExample;
3
+ export { ExamplesServiceBusinessOsExample };
package/dist/example.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{defineExample as g}from"@contractspec/lib.contracts-spec";var h=g({meta:{key:"service-business-os",version:"1.0.0",title:"Service Business OS",description:"Service business operating system: jobs, clients, scheduling, invoicing, and ops dashboards.",kind:"template",visibility:"public",stability:"experimental",owners:["@platform.core"],tags:["service-business","jobs","scheduling","invoicing"]},docs:{rootDocId:"docs.examples.service-business-os"},entrypoints:{packageName:"@contractspec/example.service-business-os",feature:"./feature",contracts:"./contracts",presentations:"./presentations",handlers:"./handlers",docs:"./docs"},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs","builder","markdown","evolution"]},studio:{enabled:!0,installable:!0},mcp:{enabled:!0}}}),q=h;export{q as default};
2
+ import{defineExample as b}from"@contractspec/lib.contracts-spec/examples";var g=b({meta:{key:"examples.service-business-os",version:"1.0.0",title:"Service Business Os",description:"Service Business OS example (clients, quotes, jobs, invoices) for ContractSpec",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","service-business-os"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.service-business-os"}}),k=g;export{k as default,g as ExamplesServiceBusinessOsExample};
package/dist/index.d.ts CHANGED
@@ -4,6 +4,7 @@
4
4
  * Demonstrates a complete service business workflow with clients, quotes, jobs, invoices, and payments.
5
5
  */
6
6
  export * from './client';
7
+ export * from './example';
7
8
  export * from './invoice';
8
9
  export * from './job';
9
10
  export * from './payment';
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{defineSchemaModel as $,ScalarTypeEnum as o}from"@contractspec/lib.schema";var A=$({name:"Client",description:"Client profile",fields:{id:{type:o.String_unsecure(),isOptional:!1},name:{type:o.String_unsecure(),isOptional:!1},contactEmail:{type:o.String_unsecure(),isOptional:!0},phone:{type:o.String_unsecure(),isOptional:!0},orgId:{type:o.String_unsecure(),isOptional:!1},ownerId:{type:o.String_unsecure(),isOptional:!1},createdAt:{type:o.DateTime(),isOptional:!1}}}),B=$({name:"CreateClientInput",description:"Input for creating a client",fields:{name:{type:o.String_unsecure(),isOptional:!1},contactEmail:{type:o.String_unsecure(),isOptional:!0},phone:{type:o.String_unsecure(),isOptional:!0},orgId:{type:o.String_unsecure(),isOptional:!1},ownerId:{type:o.String_unsecure(),isOptional:!1},metadata:{type:o.JSON(),isOptional:!0}}});import{defineCommand as W}from"@contractspec/lib.contracts-spec";var b=["@examples.service-business-os"],f=W({meta:{key:"service.client.create",version:"1.0.0",stability:"stable",owners:[...b],tags:["service-business-os","client","create"],description:"Create a new client.",goal:"Onboard clients.",context:"CRM."},io:{input:B,output:A},policy:{auth:"user"},acceptance:{scenarios:[{key:"create-client-happy-path",given:["User is authenticated"],when:["User creates a new client"],then:["Client is created"]}],examples:[{key:"create-basic",input:{name:"Acme Corp",email:"contact@acme.com",phone:"555-0123"},output:{id:"client-123",name:"Acme Corp"}}]}});import{defineSchemaModel as j,ScalarTypeEnum as v}from"@contractspec/lib.schema";var L=j({name:"Invoice",description:"Invoice issued for a job",fields:{id:{type:v.String_unsecure(),isOptional:!1},jobId:{type:v.String_unsecure(),isOptional:!1},invoiceNumber:{type:v.String_unsecure(),isOptional:!1},amount:{type:v.Float_unsecure(),isOptional:!1},currency:{type:v.String_unsecure(),isOptional:!1},status:{type:v.String_unsecure(),isOptional:!1},dueDate:{type:v.DateTime(),isOptional:!0},issuedAt:{type:v.DateTime(),isOptional:!0},paidAt:{type:v.DateTime(),isOptional:!0}}}),z=j({name:"IssueInvoiceInput",description:"Input for issuing an invoice",fields:{jobId:{type:v.String_unsecure(),isOptional:!1},dueDate:{type:v.DateTime(),isOptional:!0},notes:{type:v.String_unsecure(),isOptional:!0},lineItems:{type:v.JSON(),isOptional:!0}}});import{defineCommand as M}from"@contractspec/lib.contracts-spec";var h=["@examples.service-business-os"],t=M({meta:{key:"service.invoice.issue",version:"1.0.0",stability:"stable",owners:[...h],tags:["service-business-os","invoice","issue"],description:"Issue an invoice for a job.",goal:"Bill clients.",context:"Billing."},io:{input:z,output:L},policy:{auth:"user"},acceptance:{scenarios:[{key:"issue-invoice-happy-path",given:["Job is complete"],when:["User issues invoice"],then:["Invoice is created and sent"]}],examples:[{key:"issue-standard",input:{jobId:"job-123",dueDate:"2025-02-01",items:[{description:"Service",amount:100}]},output:{id:"inv-456",status:"issued",total:100}}]}});import{defineSchemaModel as G,ScalarTypeEnum as C}from"@contractspec/lib.schema";var Q=G({name:"Job",description:"Scheduled job",fields:{id:{type:C.String_unsecure(),isOptional:!1},quoteId:{type:C.String_unsecure(),isOptional:!1},clientId:{type:C.String_unsecure(),isOptional:!1},title:{type:C.String_unsecure(),isOptional:!1},status:{type:C.String_unsecure(),isOptional:!1},scheduledAt:{type:C.DateTime(),isOptional:!0},completedAt:{type:C.DateTime(),isOptional:!0},assignedTo:{type:C.String_unsecure(),isOptional:!0}}}),H=G({name:"ScheduleJobInput",description:"Input for scheduling a job",fields:{quoteId:{type:C.String_unsecure(),isOptional:!1},scheduledAt:{type:C.DateTime(),isOptional:!1},assignedTo:{type:C.String_unsecure(),isOptional:!0},location:{type:C.JSON(),isOptional:!0},title:{type:C.String_unsecure(),isOptional:!0}}}),K=G({name:"CompleteJobInput",description:"Input for completing a job",fields:{jobId:{type:C.String_unsecure(),isOptional:!1},completedAt:{type:C.DateTime(),isOptional:!0},notes:{type:C.String_unsecure(),isOptional:!0}}});import{defineCommand as q,defineQuery as s}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as F,ScalarTypeEnum as g}from"@contractspec/lib.schema";var U=["@examples.service-business-os"],I=F({name:"ListJobsInput",description:"Input for listing jobs",fields:{status:{type:g.String_unsecure(),isOptional:!0},clientId:{type:g.String_unsecure(),isOptional:!0},limit:{type:g.Int_unsecure(),isOptional:!0},offset:{type:g.Int_unsecure(),isOptional:!0}}}),P=F({name:"ListJobsOutput",description:"Output for listing jobs",fields:{jobs:{type:Q,isOptional:!1,isList:!0},total:{type:g.Int_unsecure(),isOptional:!1}}}),d=s({meta:{key:"service.job.list",version:"1.0.0",stability:"stable",owners:[...U],tags:["service-business-os","job","list","query"],description:"List all jobs with filtering",goal:"Retrieve list of jobs",context:"Job management"},io:{input:I,output:P},policy:{auth:"user"},acceptance:{scenarios:[{key:"list-jobs-happy-path",given:["Jobs exist"],when:["User lists jobs"],then:["List of jobs is returned"]}],examples:[{key:"list-active",input:{status:"scheduled",limit:10},output:{jobs:[],total:5}}]}}),i=q({meta:{key:"service.job.schedule",version:"1.0.0",stability:"stable",owners:[...U],tags:["service-business-os","job","schedule"],description:"Schedule a job.",goal:"Schedule work.",context:"Job scheduling."},io:{input:H,output:Q},policy:{auth:"user"},acceptance:{scenarios:[{key:"schedule-job-happy-path",given:["Client exists"],when:["User schedules job"],then:["Job is created with status SCHEDULED"]}],examples:[{key:"schedule-repair",input:{clientId:"client-123",date:"2025-01-20T10:00:00Z",type:"repair"},output:{id:"job-456",status:"scheduled"}}]}}),r=q({meta:{key:"service.job.complete",version:"1.0.0",stability:"stable",owners:[...U],tags:["service-business-os","job","complete"],description:"Mark a job as complete.",goal:"Record job completion.",context:"Job management."},io:{input:K,output:Q},policy:{auth:"user"},acceptance:{scenarios:[{key:"complete-job-happy-path",given:["Job is scheduled"],when:["User completes job"],then:["Job status becomes COMPLETED"]}],examples:[{key:"mark-complete",input:{jobId:"job-456",notes:"Done successfully"},output:{id:"job-456",status:"completed"}}]}});import{defineSchemaModel as O,ScalarTypeEnum as w}from"@contractspec/lib.schema";var V=O({name:"Payment",description:"Payment applied to invoice",fields:{id:{type:w.String_unsecure(),isOptional:!1},invoiceId:{type:w.String_unsecure(),isOptional:!1},amount:{type:w.Float_unsecure(),isOptional:!1},currency:{type:w.String_unsecure(),isOptional:!1},method:{type:w.String_unsecure(),isOptional:!1},reference:{type:w.String_unsecure(),isOptional:!0},receivedAt:{type:w.DateTime(),isOptional:!1}}}),X=O({name:"RecordPaymentInput",description:"Input for recording a payment",fields:{invoiceId:{type:w.String_unsecure(),isOptional:!1},amount:{type:w.Float_unsecure(),isOptional:!1},method:{type:w.String_unsecure(),isOptional:!1},reference:{type:w.String_unsecure(),isOptional:!0},receivedAt:{type:w.DateTime(),isOptional:!0}}});import{defineCommand as T}from"@contractspec/lib.contracts-spec";var p=["@examples.service-business-os"],y=T({meta:{key:"service.payment.record",version:"1.0.0",stability:"stable",owners:[...p],tags:["service-business-os","payment","record"],description:"Record a payment.",goal:"Track payments.",context:"Billing."},io:{input:X,output:V},policy:{auth:"user"},acceptance:{scenarios:[{key:"record-payment-happy-path",given:["Invoice exists"],when:["User records payment"],then:["Payment is recorded"]}],examples:[{key:"record-check",input:{invoiceId:"inv-456",amount:100,method:"check"},output:{id:"pay-123",status:"completed"}}]}});import{definePresentation as J,StabilityEnum as D}from"@contractspec/lib.contracts-spec";var Px=J({meta:{key:"service-business-os.dashboard",version:"1.0.0",title:"Service Dashboard",description:"Service business dashboard with overview metrics",domain:"services",owners:["@service-os"],tags:["services","dashboard"],stability:D.Experimental,goal:"Overview of service business metrics",context:"Service home page"},source:{type:"component",framework:"react",componentKey:"ServiceDashboard"},targets:["react","markdown"],policy:{flags:["service.dashboard.enabled"]}}),Ox=J({meta:{key:"service-business-os.client.list",version:"1.0.0",title:"Client List",description:"List of service clients",domain:"services",owners:["@service-os"],tags:["services","clients","list"],stability:D.Experimental,goal:"Browse and manage service clients",context:"Client management"},source:{type:"component",framework:"react",componentKey:"ClientList"},targets:["react","markdown"],policy:{flags:["service.clients.enabled"]}}),Rx=J({meta:{key:"service-business-os.quote.list",version:"1.0.0",title:"Quote List",description:"List of quotes with status",domain:"services",owners:["@service-os"],tags:["services","quotes","list"],stability:D.Experimental,goal:"Track and manage quotes",context:"Quote management"},source:{type:"component",framework:"react",componentKey:"QuoteList"},targets:["react","markdown"],policy:{flags:["service.quotes.enabled"]}}),Nx=J({meta:{key:"service-business-os.quote.detail",version:"1.0.0",title:"Quote Details",description:"Quote detail with line items",domain:"services",owners:["@service-os"],tags:["services","quote","detail"],stability:D.Experimental,goal:"View and edit quote details",context:"Quote inspection"},source:{type:"component",framework:"react",componentKey:"QuoteDetail"},targets:["react","markdown"],policy:{flags:["service.quotes.enabled"]}}),Wx=J({meta:{key:"service-business-os.job.board",version:"1.0.0",title:"Job Board",description:"Job board with kanban view",domain:"services",owners:["@service-os"],tags:["services","jobs","board","kanban"],stability:D.Experimental,goal:"Visual job management",context:"Field service scheduling"},source:{type:"component",framework:"react",componentKey:"JobBoard"},targets:["react"],policy:{flags:["service.jobs.enabled"]}}),bx=J({meta:{key:"service-business-os.invoice.list",version:"1.0.0",title:"Invoice List",description:"List of invoices with payment status",domain:"services",owners:["@service-os"],tags:["services","invoices","list"],stability:D.Experimental,goal:"Track invoices and payments",context:"Billing management"},source:{type:"component",framework:"react",componentKey:"InvoiceList"},targets:["react","markdown"],policy:{flags:["service.invoices.enabled"]}}),fx=J({meta:{key:"service-business-os.payment.list",version:"1.0.0",title:"Payment List",description:"List of payments received",domain:"services",owners:["@service-os"],tags:["services","payments","list"],stability:D.Experimental,goal:"Track received payments",context:"Payment reconciliation"},source:{type:"component",framework:"react",componentKey:"PaymentList"},targets:["react","markdown"],policy:{flags:["service.payments.enabled"]}});import{defineSchemaModel as Y,ScalarTypeEnum as x}from"@contractspec/lib.schema";var k=Y({name:"Quote",description:"Quote/proposal",fields:{id:{type:x.String_unsecure(),isOptional:!1},clientId:{type:x.String_unsecure(),isOptional:!1},title:{type:x.String_unsecure(),isOptional:!1},description:{type:x.String_unsecure(),isOptional:!0},amount:{type:x.Float_unsecure(),isOptional:!1},currency:{type:x.String_unsecure(),isOptional:!1},status:{type:x.String_unsecure(),isOptional:!1},validUntil:{type:x.DateTime(),isOptional:!0},createdAt:{type:x.DateTime(),isOptional:!1}}}),Z=Y({name:"CreateQuoteInput",description:"Input for creating a quote",fields:{clientId:{type:x.String_unsecure(),isOptional:!1},title:{type:x.String_unsecure(),isOptional:!1},description:{type:x.String_unsecure(),isOptional:!0},amount:{type:x.Float_unsecure(),isOptional:!1},currency:{type:x.String_unsecure(),isOptional:!0},validUntil:{type:x.DateTime(),isOptional:!0},orgId:{type:x.String_unsecure(),isOptional:!1},ownerId:{type:x.String_unsecure(),isOptional:!1}}}),_=Y({name:"AcceptQuoteInput",description:"Input for accepting a quote",fields:{quoteId:{type:x.String_unsecure(),isOptional:!1},acceptedBy:{type:x.String_unsecure(),isOptional:!1},notes:{type:x.String_unsecure(),isOptional:!0}}});import{defineCommand as R}from"@contractspec/lib.contracts-spec";var N=["@examples.service-business-os"],m=R({meta:{key:"service.quote.create",version:"1.0.0",stability:"stable",owners:[...N],tags:["service-business-os","quote","create"],description:"Create a quote/proposal.",goal:"Quote clients.",context:"Quote creation."},io:{input:Z,output:k},policy:{auth:"user"},acceptance:{scenarios:[{key:"create-quote-happy-path",given:["Client exists"],when:["User creates quote"],then:["Quote is created"]}],examples:[{key:"create-proposal",input:{clientId:"client-123",items:[{description:"Project A",price:5000}]},output:{id:"quote-123",status:"draft",total:5000}}]}}),u=R({meta:{key:"service.quote.accept",version:"1.0.0",stability:"stable",owners:[...N],tags:["service-business-os","quote","accept"],description:"Accept a quote.",goal:"Confirm quote.",context:"Quote acceptance."},io:{input:_,output:k},policy:{auth:"user"},acceptance:{scenarios:[{key:"accept-quote-happy-path",given:["Quote is open"],when:["Client accepts quote"],then:["Quote status becomes ACCEPTED"]}],examples:[{key:"client-accepts",input:{quoteId:"quote-123",signature:"John Doe"},output:{id:"quote-123",status:"accepted"}}]}});import{defineFeature as E}from"@contractspec/lib.contracts-spec";var mx=E({meta:{key:"service-business-os",title:"Service Business OS",description:"Quotes \u2192 jobs \u2192 invoices \u2192 payments for field services and agencies.",domain:"services",owners:["@service-os"],tags:["services","quotes","jobs","invoices","payments"],stability:"experimental",version:"1.0.0"},operations:[{key:"service.client.create",version:"1.0.0"},{key:"service.quote.create",version:"1.0.0"},{key:"service.quote.accept",version:"1.0.0"},{key:"service.job.schedule",version:"1.0.0"},{key:"service.job.complete",version:"1.0.0"},{key:"service.invoice.issue",version:"1.0.0"},{key:"service.payment.record",version:"1.0.0"},{key:"service.job.list",version:"1.0.0"}],events:[{key:"service.quote.sent",version:"1.0.0"},{key:"service.quote.accepted",version:"1.0.0"},{key:"service.job.scheduled",version:"1.0.0"},{key:"service.job.completed",version:"1.0.0"},{key:"service.invoice.issued",version:"1.0.0"},{key:"service.payment.received",version:"1.0.0"}],presentations:[{key:"service-business-os.dashboard",version:"1.0.0"},{key:"service-business-os.client.list",version:"1.0.0"},{key:"service-business-os.quote.list",version:"1.0.0"},{key:"service-business-os.quote.detail",version:"1.0.0"},{key:"service-business-os.job.board",version:"1.0.0"},{key:"service-business-os.invoice.list",version:"1.0.0"},{key:"service-business-os.payment.list",version:"1.0.0"}],presentationsTargets:[{key:"service-business-os.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.quote.list",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.invoice.list",version:"1.0.0",targets:["react","markdown"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"files",version:"1.0.0"}],provides:[{key:"quotes",version:"1.0.0"},{key:"jobs",version:"1.0.0"},{key:"invoices",version:"1.0.0"}]},telemetry:[{key:"service-business-os.telemetry",version:"1.0.0"}],jobs:[{key:"service-business-os.job.schedule-dispatch",version:"1.0.0"},{key:"service-business-os.job.invoice-reminder",version:"1.0.0"}],docs:["docs.examples.service-business-os","docs.examples.service-business-os.goal","docs.examples.service-business-os.usage","docs.examples.service-business-os.constraints"]});export{Px as ServiceDashboardPresentation,mx as ServiceBusinessFeature,H as ScheduleJobInputModel,i as ScheduleJobContract,X as RecordPaymentInputModel,y as RecordPaymentContract,k as QuoteModel,Rx as QuoteListPresentation,Nx as QuoteDetailPresentation,V as PaymentModel,fx as PaymentListPresentation,P as ListJobsOutputModel,d as ListJobsOperation,I as ListJobsInputModel,Q as JobModel,Wx as JobBoardPresentation,z as IssueInvoiceInputModel,t as IssueInvoiceContract,L as InvoiceModel,bx as InvoiceListPresentation,Z as CreateQuoteInputModel,m as CreateQuoteContract,B as CreateClientInputModel,f as CreateClientContract,K as CompleteJobInputModel,r as CompleteJobContract,A as ClientModel,Ox as ClientListPresentation,_ as AcceptQuoteInputModel,u as AcceptQuoteContract};
2
+ import{defineSchemaModel as j,ScalarTypeEnum as C}from"@contractspec/lib.schema";var A=j({name:"Client",description:"Client profile",fields:{id:{type:C.String_unsecure(),isOptional:!1},name:{type:C.String_unsecure(),isOptional:!1},contactEmail:{type:C.String_unsecure(),isOptional:!0},phone:{type:C.String_unsecure(),isOptional:!0},orgId:{type:C.String_unsecure(),isOptional:!1},ownerId:{type:C.String_unsecure(),isOptional:!1},createdAt:{type:C.DateTime(),isOptional:!1}}}),L=j({name:"CreateClientInput",description:"Input for creating a client",fields:{name:{type:C.String_unsecure(),isOptional:!1},contactEmail:{type:C.String_unsecure(),isOptional:!0},phone:{type:C.String_unsecure(),isOptional:!0},orgId:{type:C.String_unsecure(),isOptional:!1},ownerId:{type:C.String_unsecure(),isOptional:!1},metadata:{type:C.JSON(),isOptional:!0}}});import{defineCommand as W}from"@contractspec/lib.contracts-spec";var b=["@examples.service-business-os"],M=W({meta:{key:"service.client.create",version:"1.0.0",stability:"stable",owners:[...b],tags:["service-business-os","client","create"],description:"Create a new client.",goal:"Onboard clients.",context:"CRM."},io:{input:L,output:A},policy:{auth:"user"},acceptance:{scenarios:[{key:"create-client-happy-path",given:["User is authenticated"],when:["User creates a new client"],then:["Client is created"]}],examples:[{key:"create-basic",input:{name:"Acme Corp",email:"contact@acme.com",phone:"555-0123"},output:{id:"client-123",name:"Acme Corp"}}]}});import{defineExample as f}from"@contractspec/lib.contracts-spec/examples";var h=f({meta:{key:"examples.service-business-os",version:"1.0.0",title:"Service Business Os",description:"Service Business OS example (clients, quotes, jobs, invoices) for ContractSpec",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","service-business-os"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.service-business-os"}}),Dx=h;import{defineSchemaModel as q,ScalarTypeEnum as w}from"@contractspec/lib.schema";var z=q({name:"Invoice",description:"Invoice issued for a job",fields:{id:{type:w.String_unsecure(),isOptional:!1},jobId:{type:w.String_unsecure(),isOptional:!1},invoiceNumber:{type:w.String_unsecure(),isOptional:!1},amount:{type:w.Float_unsecure(),isOptional:!1},currency:{type:w.String_unsecure(),isOptional:!1},status:{type:w.String_unsecure(),isOptional:!1},dueDate:{type:w.DateTime(),isOptional:!0},issuedAt:{type:w.DateTime(),isOptional:!0},paidAt:{type:w.DateTime(),isOptional:!0}}}),G=q({name:"IssueInvoiceInput",description:"Input for issuing an invoice",fields:{jobId:{type:w.String_unsecure(),isOptional:!1},dueDate:{type:w.DateTime(),isOptional:!0},notes:{type:w.String_unsecure(),isOptional:!0},lineItems:{type:w.JSON(),isOptional:!0}}});import{defineCommand as t}from"@contractspec/lib.contracts-spec";var s=["@examples.service-business-os"],d=t({meta:{key:"service.invoice.issue",version:"1.0.0",stability:"stable",owners:[...s],tags:["service-business-os","invoice","issue"],description:"Issue an invoice for a job.",goal:"Bill clients.",context:"Billing."},io:{input:G,output:z},policy:{auth:"user"},acceptance:{scenarios:[{key:"issue-invoice-happy-path",given:["Job is complete"],when:["User issues invoice"],then:["Invoice is created and sent"]}],examples:[{key:"issue-standard",input:{jobId:"job-123",dueDate:"2025-02-01",items:[{description:"Service",amount:100}]},output:{id:"inv-456",status:"issued",total:100}}]}});import{defineSchemaModel as H,ScalarTypeEnum as o}from"@contractspec/lib.schema";var Q=H({name:"Job",description:"Scheduled job",fields:{id:{type:o.String_unsecure(),isOptional:!1},quoteId:{type:o.String_unsecure(),isOptional:!1},clientId:{type:o.String_unsecure(),isOptional:!1},title:{type:o.String_unsecure(),isOptional:!1},status:{type:o.String_unsecure(),isOptional:!1},scheduledAt:{type:o.DateTime(),isOptional:!0},completedAt:{type:o.DateTime(),isOptional:!0},assignedTo:{type:o.String_unsecure(),isOptional:!0}}}),K=H({name:"ScheduleJobInput",description:"Input for scheduling a job",fields:{quoteId:{type:o.String_unsecure(),isOptional:!1},scheduledAt:{type:o.DateTime(),isOptional:!1},assignedTo:{type:o.String_unsecure(),isOptional:!0},location:{type:o.JSON(),isOptional:!0},title:{type:o.String_unsecure(),isOptional:!0}}}),U=H({name:"CompleteJobInput",description:"Input for completing a job",fields:{jobId:{type:o.String_unsecure(),isOptional:!1},completedAt:{type:o.DateTime(),isOptional:!0},notes:{type:o.String_unsecure(),isOptional:!0}}});import{defineCommand as B,defineQuery as i}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as F,ScalarTypeEnum as g}from"@contractspec/lib.schema";var V=["@examples.service-business-os"],I=F({name:"ListJobsInput",description:"Input for listing jobs",fields:{status:{type:g.String_unsecure(),isOptional:!0},clientId:{type:g.String_unsecure(),isOptional:!0},limit:{type:g.Int_unsecure(),isOptional:!0},offset:{type:g.Int_unsecure(),isOptional:!0}}}),P=F({name:"ListJobsOutput",description:"Output for listing jobs",fields:{jobs:{type:Q,isOptional:!1,isList:!0},total:{type:g.Int_unsecure(),isOptional:!1}}}),r=i({meta:{key:"service.job.list",version:"1.0.0",stability:"stable",owners:[...V],tags:["service-business-os","job","list","query"],description:"List all jobs with filtering",goal:"Retrieve list of jobs",context:"Job management"},io:{input:I,output:P},policy:{auth:"user"},acceptance:{scenarios:[{key:"list-jobs-happy-path",given:["Jobs exist"],when:["User lists jobs"],then:["List of jobs is returned"]}],examples:[{key:"list-active",input:{status:"scheduled",limit:10},output:{jobs:[],total:5}}]}}),T=B({meta:{key:"service.job.schedule",version:"1.0.0",stability:"stable",owners:[...V],tags:["service-business-os","job","schedule"],description:"Schedule a job.",goal:"Schedule work.",context:"Job scheduling."},io:{input:K,output:Q},policy:{auth:"user"},acceptance:{scenarios:[{key:"schedule-job-happy-path",given:["Client exists"],when:["User schedules job"],then:["Job is created with status SCHEDULED"]}],examples:[{key:"schedule-repair",input:{clientId:"client-123",date:"2025-01-20T10:00:00Z",type:"repair"},output:{id:"job-456",status:"scheduled"}}]}}),y=B({meta:{key:"service.job.complete",version:"1.0.0",stability:"stable",owners:[...V],tags:["service-business-os","job","complete"],description:"Mark a job as complete.",goal:"Record job completion.",context:"Job management."},io:{input:U,output:Q},policy:{auth:"user"},acceptance:{scenarios:[{key:"complete-job-happy-path",given:["Job is scheduled"],when:["User completes job"],then:["Job status becomes COMPLETED"]}],examples:[{key:"mark-complete",input:{jobId:"job-456",notes:"Done successfully"},output:{id:"job-456",status:"completed"}}]}});import{defineSchemaModel as R,ScalarTypeEnum as J}from"@contractspec/lib.schema";var X=R({name:"Payment",description:"Payment applied to invoice",fields:{id:{type:J.String_unsecure(),isOptional:!1},invoiceId:{type:J.String_unsecure(),isOptional:!1},amount:{type:J.Float_unsecure(),isOptional:!1},currency:{type:J.String_unsecure(),isOptional:!1},method:{type:J.String_unsecure(),isOptional:!1},reference:{type:J.String_unsecure(),isOptional:!0},receivedAt:{type:J.DateTime(),isOptional:!1}}}),Y=R({name:"RecordPaymentInput",description:"Input for recording a payment",fields:{invoiceId:{type:J.String_unsecure(),isOptional:!1},amount:{type:J.Float_unsecure(),isOptional:!1},method:{type:J.String_unsecure(),isOptional:!1},reference:{type:J.String_unsecure(),isOptional:!0},receivedAt:{type:J.DateTime(),isOptional:!0}}});import{defineCommand as p}from"@contractspec/lib.contracts-spec";var u=["@examples.service-business-os"],m=p({meta:{key:"service.payment.record",version:"1.0.0",stability:"stable",owners:[...u],tags:["service-business-os","payment","record"],description:"Record a payment.",goal:"Track payments.",context:"Billing."},io:{input:Y,output:X},policy:{auth:"user"},acceptance:{scenarios:[{key:"record-payment-happy-path",given:["Invoice exists"],when:["User records payment"],then:["Payment is recorded"]}],examples:[{key:"record-check",input:{invoiceId:"inv-456",amount:100,method:"check"},output:{id:"pay-123",status:"completed"}}]}});import{definePresentation as v,StabilityEnum as D}from"@contractspec/lib.contracts-spec";var bx=v({meta:{key:"service-business-os.dashboard",version:"1.0.0",title:"Service Dashboard",description:"Service business dashboard with overview metrics",domain:"services",owners:["@service-os"],tags:["services","dashboard"],stability:D.Experimental,goal:"Overview of service business metrics",context:"Service home page"},source:{type:"component",framework:"react",componentKey:"ServiceDashboard"},targets:["react","markdown"],policy:{flags:["service.dashboard.enabled"]}}),Mx=v({meta:{key:"service-business-os.client.list",version:"1.0.0",title:"Client List",description:"List of service clients",domain:"services",owners:["@service-os"],tags:["services","clients","list"],stability:D.Experimental,goal:"Browse and manage service clients",context:"Client management"},source:{type:"component",framework:"react",componentKey:"ClientList"},targets:["react","markdown"],policy:{flags:["service.clients.enabled"]}}),fx=v({meta:{key:"service-business-os.quote.list",version:"1.0.0",title:"Quote List",description:"List of quotes with status",domain:"services",owners:["@service-os"],tags:["services","quotes","list"],stability:D.Experimental,goal:"Track and manage quotes",context:"Quote management"},source:{type:"component",framework:"react",componentKey:"QuoteList"},targets:["react","markdown"],policy:{flags:["service.quotes.enabled"]}}),hx=v({meta:{key:"service-business-os.quote.detail",version:"1.0.0",title:"Quote Details",description:"Quote detail with line items",domain:"services",owners:["@service-os"],tags:["services","quote","detail"],stability:D.Experimental,goal:"View and edit quote details",context:"Quote inspection"},source:{type:"component",framework:"react",componentKey:"QuoteDetail"},targets:["react","markdown"],policy:{flags:["service.quotes.enabled"]}}),tx=v({meta:{key:"service-business-os.job.board",version:"1.0.0",title:"Job Board",description:"Job board with kanban view",domain:"services",owners:["@service-os"],tags:["services","jobs","board","kanban"],stability:D.Experimental,goal:"Visual job management",context:"Field service scheduling"},source:{type:"component",framework:"react",componentKey:"JobBoard"},targets:["react"],policy:{flags:["service.jobs.enabled"]}}),sx=v({meta:{key:"service-business-os.invoice.list",version:"1.0.0",title:"Invoice List",description:"List of invoices with payment status",domain:"services",owners:["@service-os"],tags:["services","invoices","list"],stability:D.Experimental,goal:"Track invoices and payments",context:"Billing management"},source:{type:"component",framework:"react",componentKey:"InvoiceList"},targets:["react","markdown"],policy:{flags:["service.invoices.enabled"]}}),dx=v({meta:{key:"service-business-os.payment.list",version:"1.0.0",title:"Payment List",description:"List of payments received",domain:"services",owners:["@service-os"],tags:["services","payments","list"],stability:D.Experimental,goal:"Track received payments",context:"Payment reconciliation"},source:{type:"component",framework:"react",componentKey:"PaymentList"},targets:["react","markdown"],policy:{flags:["service.payments.enabled"]}});import{defineSchemaModel as Z,ScalarTypeEnum as x}from"@contractspec/lib.schema";var k=Z({name:"Quote",description:"Quote/proposal",fields:{id:{type:x.String_unsecure(),isOptional:!1},clientId:{type:x.String_unsecure(),isOptional:!1},title:{type:x.String_unsecure(),isOptional:!1},description:{type:x.String_unsecure(),isOptional:!0},amount:{type:x.Float_unsecure(),isOptional:!1},currency:{type:x.String_unsecure(),isOptional:!1},status:{type:x.String_unsecure(),isOptional:!1},validUntil:{type:x.DateTime(),isOptional:!0},createdAt:{type:x.DateTime(),isOptional:!1}}}),_=Z({name:"CreateQuoteInput",description:"Input for creating a quote",fields:{clientId:{type:x.String_unsecure(),isOptional:!1},title:{type:x.String_unsecure(),isOptional:!1},description:{type:x.String_unsecure(),isOptional:!0},amount:{type:x.Float_unsecure(),isOptional:!1},currency:{type:x.String_unsecure(),isOptional:!0},validUntil:{type:x.DateTime(),isOptional:!0},orgId:{type:x.String_unsecure(),isOptional:!1},ownerId:{type:x.String_unsecure(),isOptional:!1}}}),$=Z({name:"AcceptQuoteInput",description:"Input for accepting a quote",fields:{quoteId:{type:x.String_unsecure(),isOptional:!1},acceptedBy:{type:x.String_unsecure(),isOptional:!1},notes:{type:x.String_unsecure(),isOptional:!0}}});import{defineCommand as N}from"@contractspec/lib.contracts-spec";var O=["@examples.service-business-os"],E=N({meta:{key:"service.quote.create",version:"1.0.0",stability:"stable",owners:[...O],tags:["service-business-os","quote","create"],description:"Create a quote/proposal.",goal:"Quote clients.",context:"Quote creation."},io:{input:_,output:k},policy:{auth:"user"},acceptance:{scenarios:[{key:"create-quote-happy-path",given:["Client exists"],when:["User creates quote"],then:["Quote is created"]}],examples:[{key:"create-proposal",input:{clientId:"client-123",items:[{description:"Project A",price:5000}]},output:{id:"quote-123",status:"draft",total:5000}}]}}),S=N({meta:{key:"service.quote.accept",version:"1.0.0",stability:"stable",owners:[...O],tags:["service-business-os","quote","accept"],description:"Accept a quote.",goal:"Confirm quote.",context:"Quote acceptance."},io:{input:$,output:k},policy:{auth:"user"},acceptance:{scenarios:[{key:"accept-quote-happy-path",given:["Quote is open"],when:["Client accepts quote"],then:["Quote status becomes ACCEPTED"]}],examples:[{key:"client-accepts",input:{quoteId:"quote-123",signature:"John Doe"},output:{id:"quote-123",status:"accepted"}}]}});import{defineFeature as l}from"@contractspec/lib.contracts-spec/features";var nx=l({meta:{key:"service-business-os",title:"Service Business OS",description:"Quotes \u2192 jobs \u2192 invoices \u2192 payments for field services and agencies.",domain:"services",owners:["@service-os"],tags:["services","quotes","jobs","invoices","payments"],stability:"experimental",version:"1.0.0"},operations:[{key:"service.client.create",version:"1.0.0"},{key:"service.quote.create",version:"1.0.0"},{key:"service.quote.accept",version:"1.0.0"},{key:"service.job.schedule",version:"1.0.0"},{key:"service.job.complete",version:"1.0.0"},{key:"service.invoice.issue",version:"1.0.0"},{key:"service.payment.record",version:"1.0.0"},{key:"service.job.list",version:"1.0.0"}],events:[{key:"service.quote.sent",version:"1.0.0"},{key:"service.quote.accepted",version:"1.0.0"},{key:"service.job.scheduled",version:"1.0.0"},{key:"service.job.completed",version:"1.0.0"},{key:"service.invoice.issued",version:"1.0.0"},{key:"service.payment.received",version:"1.0.0"}],presentations:[{key:"service-business-os.dashboard",version:"1.0.0"},{key:"service-business-os.client.list",version:"1.0.0"},{key:"service-business-os.quote.list",version:"1.0.0"},{key:"service-business-os.quote.detail",version:"1.0.0"},{key:"service-business-os.job.board",version:"1.0.0"},{key:"service-business-os.invoice.list",version:"1.0.0"},{key:"service-business-os.payment.list",version:"1.0.0"}],presentationsTargets:[{key:"service-business-os.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.quote.list",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.invoice.list",version:"1.0.0",targets:["react","markdown"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"files",version:"1.0.0"}],provides:[{key:"quotes",version:"1.0.0"},{key:"jobs",version:"1.0.0"},{key:"invoices",version:"1.0.0"}]},telemetry:[{key:"service-business-os.telemetry",version:"1.0.0"}],jobs:[{key:"service-business-os.job.schedule-dispatch",version:"1.0.0"},{key:"service-business-os.job.invoice-reminder",version:"1.0.0"}],docs:["docs.examples.service-business-os","docs.examples.service-business-os.goal","docs.examples.service-business-os.usage","docs.examples.service-business-os.constraints"]});export{bx as ServiceDashboardPresentation,nx as ServiceBusinessFeature,K as ScheduleJobInputModel,T as ScheduleJobContract,Y as RecordPaymentInputModel,m as RecordPaymentContract,k as QuoteModel,fx as QuoteListPresentation,hx as QuoteDetailPresentation,X as PaymentModel,dx as PaymentListPresentation,P as ListJobsOutputModel,r as ListJobsOperation,I as ListJobsInputModel,Q as JobModel,tx as JobBoardPresentation,G as IssueInvoiceInputModel,d as IssueInvoiceContract,z as InvoiceModel,sx as InvoiceListPresentation,h as ExamplesServiceBusinessOsExample,_ as CreateQuoteInputModel,E as CreateQuoteContract,L as CreateClientInputModel,M as CreateClientContract,U as CompleteJobInputModel,y as CompleteJobContract,A as ClientModel,Mx as ClientListPresentation,$ as AcceptQuoteInputModel,S as AcceptQuoteContract};
@@ -1 +1 @@
1
- import{defineExample as g}from"@contractspec/lib.contracts-spec";var h=g({meta:{key:"service-business-os",version:"1.0.0",title:"Service Business OS",description:"Service business operating system: jobs, clients, scheduling, invoicing, and ops dashboards.",kind:"template",visibility:"public",stability:"experimental",owners:["@platform.core"],tags:["service-business","jobs","scheduling","invoicing"]},docs:{rootDocId:"docs.examples.service-business-os"},entrypoints:{packageName:"@contractspec/example.service-business-os",feature:"./feature",contracts:"./contracts",presentations:"./presentations",handlers:"./handlers",docs:"./docs"},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs","builder","markdown","evolution"]},studio:{enabled:!0,installable:!0},mcp:{enabled:!0}}}),q=h;export{q as default};
1
+ import{defineExample as b}from"@contractspec/lib.contracts-spec/examples";var g=b({meta:{key:"examples.service-business-os",version:"1.0.0",title:"Service Business Os",description:"Service Business OS example (clients, quotes, jobs, invoices) for ContractSpec",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","service-business-os"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.service-business-os"}}),k=g;export{k as default,g as ExamplesServiceBusinessOsExample};
@@ -1 +1 @@
1
- import{defineSchemaModel as $,ScalarTypeEnum as o}from"@contractspec/lib.schema";var A=$({name:"Client",description:"Client profile",fields:{id:{type:o.String_unsecure(),isOptional:!1},name:{type:o.String_unsecure(),isOptional:!1},contactEmail:{type:o.String_unsecure(),isOptional:!0},phone:{type:o.String_unsecure(),isOptional:!0},orgId:{type:o.String_unsecure(),isOptional:!1},ownerId:{type:o.String_unsecure(),isOptional:!1},createdAt:{type:o.DateTime(),isOptional:!1}}}),B=$({name:"CreateClientInput",description:"Input for creating a client",fields:{name:{type:o.String_unsecure(),isOptional:!1},contactEmail:{type:o.String_unsecure(),isOptional:!0},phone:{type:o.String_unsecure(),isOptional:!0},orgId:{type:o.String_unsecure(),isOptional:!1},ownerId:{type:o.String_unsecure(),isOptional:!1},metadata:{type:o.JSON(),isOptional:!0}}});import{defineCommand as W}from"@contractspec/lib.contracts-spec";var b=["@examples.service-business-os"],f=W({meta:{key:"service.client.create",version:"1.0.0",stability:"stable",owners:[...b],tags:["service-business-os","client","create"],description:"Create a new client.",goal:"Onboard clients.",context:"CRM."},io:{input:B,output:A},policy:{auth:"user"},acceptance:{scenarios:[{key:"create-client-happy-path",given:["User is authenticated"],when:["User creates a new client"],then:["Client is created"]}],examples:[{key:"create-basic",input:{name:"Acme Corp",email:"contact@acme.com",phone:"555-0123"},output:{id:"client-123",name:"Acme Corp"}}]}});import{defineSchemaModel as j,ScalarTypeEnum as v}from"@contractspec/lib.schema";var L=j({name:"Invoice",description:"Invoice issued for a job",fields:{id:{type:v.String_unsecure(),isOptional:!1},jobId:{type:v.String_unsecure(),isOptional:!1},invoiceNumber:{type:v.String_unsecure(),isOptional:!1},amount:{type:v.Float_unsecure(),isOptional:!1},currency:{type:v.String_unsecure(),isOptional:!1},status:{type:v.String_unsecure(),isOptional:!1},dueDate:{type:v.DateTime(),isOptional:!0},issuedAt:{type:v.DateTime(),isOptional:!0},paidAt:{type:v.DateTime(),isOptional:!0}}}),z=j({name:"IssueInvoiceInput",description:"Input for issuing an invoice",fields:{jobId:{type:v.String_unsecure(),isOptional:!1},dueDate:{type:v.DateTime(),isOptional:!0},notes:{type:v.String_unsecure(),isOptional:!0},lineItems:{type:v.JSON(),isOptional:!0}}});import{defineCommand as M}from"@contractspec/lib.contracts-spec";var h=["@examples.service-business-os"],t=M({meta:{key:"service.invoice.issue",version:"1.0.0",stability:"stable",owners:[...h],tags:["service-business-os","invoice","issue"],description:"Issue an invoice for a job.",goal:"Bill clients.",context:"Billing."},io:{input:z,output:L},policy:{auth:"user"},acceptance:{scenarios:[{key:"issue-invoice-happy-path",given:["Job is complete"],when:["User issues invoice"],then:["Invoice is created and sent"]}],examples:[{key:"issue-standard",input:{jobId:"job-123",dueDate:"2025-02-01",items:[{description:"Service",amount:100}]},output:{id:"inv-456",status:"issued",total:100}}]}});import{defineSchemaModel as G,ScalarTypeEnum as C}from"@contractspec/lib.schema";var Q=G({name:"Job",description:"Scheduled job",fields:{id:{type:C.String_unsecure(),isOptional:!1},quoteId:{type:C.String_unsecure(),isOptional:!1},clientId:{type:C.String_unsecure(),isOptional:!1},title:{type:C.String_unsecure(),isOptional:!1},status:{type:C.String_unsecure(),isOptional:!1},scheduledAt:{type:C.DateTime(),isOptional:!0},completedAt:{type:C.DateTime(),isOptional:!0},assignedTo:{type:C.String_unsecure(),isOptional:!0}}}),H=G({name:"ScheduleJobInput",description:"Input for scheduling a job",fields:{quoteId:{type:C.String_unsecure(),isOptional:!1},scheduledAt:{type:C.DateTime(),isOptional:!1},assignedTo:{type:C.String_unsecure(),isOptional:!0},location:{type:C.JSON(),isOptional:!0},title:{type:C.String_unsecure(),isOptional:!0}}}),K=G({name:"CompleteJobInput",description:"Input for completing a job",fields:{jobId:{type:C.String_unsecure(),isOptional:!1},completedAt:{type:C.DateTime(),isOptional:!0},notes:{type:C.String_unsecure(),isOptional:!0}}});import{defineCommand as q,defineQuery as s}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as F,ScalarTypeEnum as g}from"@contractspec/lib.schema";var U=["@examples.service-business-os"],I=F({name:"ListJobsInput",description:"Input for listing jobs",fields:{status:{type:g.String_unsecure(),isOptional:!0},clientId:{type:g.String_unsecure(),isOptional:!0},limit:{type:g.Int_unsecure(),isOptional:!0},offset:{type:g.Int_unsecure(),isOptional:!0}}}),P=F({name:"ListJobsOutput",description:"Output for listing jobs",fields:{jobs:{type:Q,isOptional:!1,isList:!0},total:{type:g.Int_unsecure(),isOptional:!1}}}),d=s({meta:{key:"service.job.list",version:"1.0.0",stability:"stable",owners:[...U],tags:["service-business-os","job","list","query"],description:"List all jobs with filtering",goal:"Retrieve list of jobs",context:"Job management"},io:{input:I,output:P},policy:{auth:"user"},acceptance:{scenarios:[{key:"list-jobs-happy-path",given:["Jobs exist"],when:["User lists jobs"],then:["List of jobs is returned"]}],examples:[{key:"list-active",input:{status:"scheduled",limit:10},output:{jobs:[],total:5}}]}}),i=q({meta:{key:"service.job.schedule",version:"1.0.0",stability:"stable",owners:[...U],tags:["service-business-os","job","schedule"],description:"Schedule a job.",goal:"Schedule work.",context:"Job scheduling."},io:{input:H,output:Q},policy:{auth:"user"},acceptance:{scenarios:[{key:"schedule-job-happy-path",given:["Client exists"],when:["User schedules job"],then:["Job is created with status SCHEDULED"]}],examples:[{key:"schedule-repair",input:{clientId:"client-123",date:"2025-01-20T10:00:00Z",type:"repair"},output:{id:"job-456",status:"scheduled"}}]}}),r=q({meta:{key:"service.job.complete",version:"1.0.0",stability:"stable",owners:[...U],tags:["service-business-os","job","complete"],description:"Mark a job as complete.",goal:"Record job completion.",context:"Job management."},io:{input:K,output:Q},policy:{auth:"user"},acceptance:{scenarios:[{key:"complete-job-happy-path",given:["Job is scheduled"],when:["User completes job"],then:["Job status becomes COMPLETED"]}],examples:[{key:"mark-complete",input:{jobId:"job-456",notes:"Done successfully"},output:{id:"job-456",status:"completed"}}]}});import{defineSchemaModel as O,ScalarTypeEnum as w}from"@contractspec/lib.schema";var V=O({name:"Payment",description:"Payment applied to invoice",fields:{id:{type:w.String_unsecure(),isOptional:!1},invoiceId:{type:w.String_unsecure(),isOptional:!1},amount:{type:w.Float_unsecure(),isOptional:!1},currency:{type:w.String_unsecure(),isOptional:!1},method:{type:w.String_unsecure(),isOptional:!1},reference:{type:w.String_unsecure(),isOptional:!0},receivedAt:{type:w.DateTime(),isOptional:!1}}}),X=O({name:"RecordPaymentInput",description:"Input for recording a payment",fields:{invoiceId:{type:w.String_unsecure(),isOptional:!1},amount:{type:w.Float_unsecure(),isOptional:!1},method:{type:w.String_unsecure(),isOptional:!1},reference:{type:w.String_unsecure(),isOptional:!0},receivedAt:{type:w.DateTime(),isOptional:!0}}});import{defineCommand as T}from"@contractspec/lib.contracts-spec";var p=["@examples.service-business-os"],y=T({meta:{key:"service.payment.record",version:"1.0.0",stability:"stable",owners:[...p],tags:["service-business-os","payment","record"],description:"Record a payment.",goal:"Track payments.",context:"Billing."},io:{input:X,output:V},policy:{auth:"user"},acceptance:{scenarios:[{key:"record-payment-happy-path",given:["Invoice exists"],when:["User records payment"],then:["Payment is recorded"]}],examples:[{key:"record-check",input:{invoiceId:"inv-456",amount:100,method:"check"},output:{id:"pay-123",status:"completed"}}]}});import{definePresentation as J,StabilityEnum as D}from"@contractspec/lib.contracts-spec";var Px=J({meta:{key:"service-business-os.dashboard",version:"1.0.0",title:"Service Dashboard",description:"Service business dashboard with overview metrics",domain:"services",owners:["@service-os"],tags:["services","dashboard"],stability:D.Experimental,goal:"Overview of service business metrics",context:"Service home page"},source:{type:"component",framework:"react",componentKey:"ServiceDashboard"},targets:["react","markdown"],policy:{flags:["service.dashboard.enabled"]}}),Ox=J({meta:{key:"service-business-os.client.list",version:"1.0.0",title:"Client List",description:"List of service clients",domain:"services",owners:["@service-os"],tags:["services","clients","list"],stability:D.Experimental,goal:"Browse and manage service clients",context:"Client management"},source:{type:"component",framework:"react",componentKey:"ClientList"},targets:["react","markdown"],policy:{flags:["service.clients.enabled"]}}),Rx=J({meta:{key:"service-business-os.quote.list",version:"1.0.0",title:"Quote List",description:"List of quotes with status",domain:"services",owners:["@service-os"],tags:["services","quotes","list"],stability:D.Experimental,goal:"Track and manage quotes",context:"Quote management"},source:{type:"component",framework:"react",componentKey:"QuoteList"},targets:["react","markdown"],policy:{flags:["service.quotes.enabled"]}}),Nx=J({meta:{key:"service-business-os.quote.detail",version:"1.0.0",title:"Quote Details",description:"Quote detail with line items",domain:"services",owners:["@service-os"],tags:["services","quote","detail"],stability:D.Experimental,goal:"View and edit quote details",context:"Quote inspection"},source:{type:"component",framework:"react",componentKey:"QuoteDetail"},targets:["react","markdown"],policy:{flags:["service.quotes.enabled"]}}),Wx=J({meta:{key:"service-business-os.job.board",version:"1.0.0",title:"Job Board",description:"Job board with kanban view",domain:"services",owners:["@service-os"],tags:["services","jobs","board","kanban"],stability:D.Experimental,goal:"Visual job management",context:"Field service scheduling"},source:{type:"component",framework:"react",componentKey:"JobBoard"},targets:["react"],policy:{flags:["service.jobs.enabled"]}}),bx=J({meta:{key:"service-business-os.invoice.list",version:"1.0.0",title:"Invoice List",description:"List of invoices with payment status",domain:"services",owners:["@service-os"],tags:["services","invoices","list"],stability:D.Experimental,goal:"Track invoices and payments",context:"Billing management"},source:{type:"component",framework:"react",componentKey:"InvoiceList"},targets:["react","markdown"],policy:{flags:["service.invoices.enabled"]}}),fx=J({meta:{key:"service-business-os.payment.list",version:"1.0.0",title:"Payment List",description:"List of payments received",domain:"services",owners:["@service-os"],tags:["services","payments","list"],stability:D.Experimental,goal:"Track received payments",context:"Payment reconciliation"},source:{type:"component",framework:"react",componentKey:"PaymentList"},targets:["react","markdown"],policy:{flags:["service.payments.enabled"]}});import{defineSchemaModel as Y,ScalarTypeEnum as x}from"@contractspec/lib.schema";var k=Y({name:"Quote",description:"Quote/proposal",fields:{id:{type:x.String_unsecure(),isOptional:!1},clientId:{type:x.String_unsecure(),isOptional:!1},title:{type:x.String_unsecure(),isOptional:!1},description:{type:x.String_unsecure(),isOptional:!0},amount:{type:x.Float_unsecure(),isOptional:!1},currency:{type:x.String_unsecure(),isOptional:!1},status:{type:x.String_unsecure(),isOptional:!1},validUntil:{type:x.DateTime(),isOptional:!0},createdAt:{type:x.DateTime(),isOptional:!1}}}),Z=Y({name:"CreateQuoteInput",description:"Input for creating a quote",fields:{clientId:{type:x.String_unsecure(),isOptional:!1},title:{type:x.String_unsecure(),isOptional:!1},description:{type:x.String_unsecure(),isOptional:!0},amount:{type:x.Float_unsecure(),isOptional:!1},currency:{type:x.String_unsecure(),isOptional:!0},validUntil:{type:x.DateTime(),isOptional:!0},orgId:{type:x.String_unsecure(),isOptional:!1},ownerId:{type:x.String_unsecure(),isOptional:!1}}}),_=Y({name:"AcceptQuoteInput",description:"Input for accepting a quote",fields:{quoteId:{type:x.String_unsecure(),isOptional:!1},acceptedBy:{type:x.String_unsecure(),isOptional:!1},notes:{type:x.String_unsecure(),isOptional:!0}}});import{defineCommand as R}from"@contractspec/lib.contracts-spec";var N=["@examples.service-business-os"],m=R({meta:{key:"service.quote.create",version:"1.0.0",stability:"stable",owners:[...N],tags:["service-business-os","quote","create"],description:"Create a quote/proposal.",goal:"Quote clients.",context:"Quote creation."},io:{input:Z,output:k},policy:{auth:"user"},acceptance:{scenarios:[{key:"create-quote-happy-path",given:["Client exists"],when:["User creates quote"],then:["Quote is created"]}],examples:[{key:"create-proposal",input:{clientId:"client-123",items:[{description:"Project A",price:5000}]},output:{id:"quote-123",status:"draft",total:5000}}]}}),u=R({meta:{key:"service.quote.accept",version:"1.0.0",stability:"stable",owners:[...N],tags:["service-business-os","quote","accept"],description:"Accept a quote.",goal:"Confirm quote.",context:"Quote acceptance."},io:{input:_,output:k},policy:{auth:"user"},acceptance:{scenarios:[{key:"accept-quote-happy-path",given:["Quote is open"],when:["Client accepts quote"],then:["Quote status becomes ACCEPTED"]}],examples:[{key:"client-accepts",input:{quoteId:"quote-123",signature:"John Doe"},output:{id:"quote-123",status:"accepted"}}]}});import{defineFeature as E}from"@contractspec/lib.contracts-spec";var mx=E({meta:{key:"service-business-os",title:"Service Business OS",description:"Quotes → jobs → invoices → payments for field services and agencies.",domain:"services",owners:["@service-os"],tags:["services","quotes","jobs","invoices","payments"],stability:"experimental",version:"1.0.0"},operations:[{key:"service.client.create",version:"1.0.0"},{key:"service.quote.create",version:"1.0.0"},{key:"service.quote.accept",version:"1.0.0"},{key:"service.job.schedule",version:"1.0.0"},{key:"service.job.complete",version:"1.0.0"},{key:"service.invoice.issue",version:"1.0.0"},{key:"service.payment.record",version:"1.0.0"},{key:"service.job.list",version:"1.0.0"}],events:[{key:"service.quote.sent",version:"1.0.0"},{key:"service.quote.accepted",version:"1.0.0"},{key:"service.job.scheduled",version:"1.0.0"},{key:"service.job.completed",version:"1.0.0"},{key:"service.invoice.issued",version:"1.0.0"},{key:"service.payment.received",version:"1.0.0"}],presentations:[{key:"service-business-os.dashboard",version:"1.0.0"},{key:"service-business-os.client.list",version:"1.0.0"},{key:"service-business-os.quote.list",version:"1.0.0"},{key:"service-business-os.quote.detail",version:"1.0.0"},{key:"service-business-os.job.board",version:"1.0.0"},{key:"service-business-os.invoice.list",version:"1.0.0"},{key:"service-business-os.payment.list",version:"1.0.0"}],presentationsTargets:[{key:"service-business-os.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.quote.list",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.invoice.list",version:"1.0.0",targets:["react","markdown"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"files",version:"1.0.0"}],provides:[{key:"quotes",version:"1.0.0"},{key:"jobs",version:"1.0.0"},{key:"invoices",version:"1.0.0"}]},telemetry:[{key:"service-business-os.telemetry",version:"1.0.0"}],jobs:[{key:"service-business-os.job.schedule-dispatch",version:"1.0.0"},{key:"service-business-os.job.invoice-reminder",version:"1.0.0"}],docs:["docs.examples.service-business-os","docs.examples.service-business-os.goal","docs.examples.service-business-os.usage","docs.examples.service-business-os.constraints"]});export{Px as ServiceDashboardPresentation,mx as ServiceBusinessFeature,H as ScheduleJobInputModel,i as ScheduleJobContract,X as RecordPaymentInputModel,y as RecordPaymentContract,k as QuoteModel,Rx as QuoteListPresentation,Nx as QuoteDetailPresentation,V as PaymentModel,fx as PaymentListPresentation,P as ListJobsOutputModel,d as ListJobsOperation,I as ListJobsInputModel,Q as JobModel,Wx as JobBoardPresentation,z as IssueInvoiceInputModel,t as IssueInvoiceContract,L as InvoiceModel,bx as InvoiceListPresentation,Z as CreateQuoteInputModel,m as CreateQuoteContract,B as CreateClientInputModel,f as CreateClientContract,K as CompleteJobInputModel,r as CompleteJobContract,A as ClientModel,Ox as ClientListPresentation,_ as AcceptQuoteInputModel,u as AcceptQuoteContract};
1
+ import{defineSchemaModel as j,ScalarTypeEnum as C}from"@contractspec/lib.schema";var A=j({name:"Client",description:"Client profile",fields:{id:{type:C.String_unsecure(),isOptional:!1},name:{type:C.String_unsecure(),isOptional:!1},contactEmail:{type:C.String_unsecure(),isOptional:!0},phone:{type:C.String_unsecure(),isOptional:!0},orgId:{type:C.String_unsecure(),isOptional:!1},ownerId:{type:C.String_unsecure(),isOptional:!1},createdAt:{type:C.DateTime(),isOptional:!1}}}),L=j({name:"CreateClientInput",description:"Input for creating a client",fields:{name:{type:C.String_unsecure(),isOptional:!1},contactEmail:{type:C.String_unsecure(),isOptional:!0},phone:{type:C.String_unsecure(),isOptional:!0},orgId:{type:C.String_unsecure(),isOptional:!1},ownerId:{type:C.String_unsecure(),isOptional:!1},metadata:{type:C.JSON(),isOptional:!0}}});import{defineCommand as W}from"@contractspec/lib.contracts-spec";var b=["@examples.service-business-os"],M=W({meta:{key:"service.client.create",version:"1.0.0",stability:"stable",owners:[...b],tags:["service-business-os","client","create"],description:"Create a new client.",goal:"Onboard clients.",context:"CRM."},io:{input:L,output:A},policy:{auth:"user"},acceptance:{scenarios:[{key:"create-client-happy-path",given:["User is authenticated"],when:["User creates a new client"],then:["Client is created"]}],examples:[{key:"create-basic",input:{name:"Acme Corp",email:"contact@acme.com",phone:"555-0123"},output:{id:"client-123",name:"Acme Corp"}}]}});import{defineExample as f}from"@contractspec/lib.contracts-spec/examples";var h=f({meta:{key:"examples.service-business-os",version:"1.0.0",title:"Service Business Os",description:"Service Business OS example (clients, quotes, jobs, invoices) for ContractSpec",kind:"template",visibility:"experimental",stability:"experimental",owners:["@contractspec-core"],tags:["package","examples","service-business-os"]},surfaces:{templates:!0,sandbox:{enabled:!0,modes:["playground","specs"]},studio:{enabled:!1,installable:!1},mcp:{enabled:!1}},entrypoints:{packageName:"@contractspec/example.service-business-os"}}),Dx=h;import{defineSchemaModel as q,ScalarTypeEnum as w}from"@contractspec/lib.schema";var z=q({name:"Invoice",description:"Invoice issued for a job",fields:{id:{type:w.String_unsecure(),isOptional:!1},jobId:{type:w.String_unsecure(),isOptional:!1},invoiceNumber:{type:w.String_unsecure(),isOptional:!1},amount:{type:w.Float_unsecure(),isOptional:!1},currency:{type:w.String_unsecure(),isOptional:!1},status:{type:w.String_unsecure(),isOptional:!1},dueDate:{type:w.DateTime(),isOptional:!0},issuedAt:{type:w.DateTime(),isOptional:!0},paidAt:{type:w.DateTime(),isOptional:!0}}}),G=q({name:"IssueInvoiceInput",description:"Input for issuing an invoice",fields:{jobId:{type:w.String_unsecure(),isOptional:!1},dueDate:{type:w.DateTime(),isOptional:!0},notes:{type:w.String_unsecure(),isOptional:!0},lineItems:{type:w.JSON(),isOptional:!0}}});import{defineCommand as t}from"@contractspec/lib.contracts-spec";var s=["@examples.service-business-os"],d=t({meta:{key:"service.invoice.issue",version:"1.0.0",stability:"stable",owners:[...s],tags:["service-business-os","invoice","issue"],description:"Issue an invoice for a job.",goal:"Bill clients.",context:"Billing."},io:{input:G,output:z},policy:{auth:"user"},acceptance:{scenarios:[{key:"issue-invoice-happy-path",given:["Job is complete"],when:["User issues invoice"],then:["Invoice is created and sent"]}],examples:[{key:"issue-standard",input:{jobId:"job-123",dueDate:"2025-02-01",items:[{description:"Service",amount:100}]},output:{id:"inv-456",status:"issued",total:100}}]}});import{defineSchemaModel as H,ScalarTypeEnum as o}from"@contractspec/lib.schema";var Q=H({name:"Job",description:"Scheduled job",fields:{id:{type:o.String_unsecure(),isOptional:!1},quoteId:{type:o.String_unsecure(),isOptional:!1},clientId:{type:o.String_unsecure(),isOptional:!1},title:{type:o.String_unsecure(),isOptional:!1},status:{type:o.String_unsecure(),isOptional:!1},scheduledAt:{type:o.DateTime(),isOptional:!0},completedAt:{type:o.DateTime(),isOptional:!0},assignedTo:{type:o.String_unsecure(),isOptional:!0}}}),K=H({name:"ScheduleJobInput",description:"Input for scheduling a job",fields:{quoteId:{type:o.String_unsecure(),isOptional:!1},scheduledAt:{type:o.DateTime(),isOptional:!1},assignedTo:{type:o.String_unsecure(),isOptional:!0},location:{type:o.JSON(),isOptional:!0},title:{type:o.String_unsecure(),isOptional:!0}}}),U=H({name:"CompleteJobInput",description:"Input for completing a job",fields:{jobId:{type:o.String_unsecure(),isOptional:!1},completedAt:{type:o.DateTime(),isOptional:!0},notes:{type:o.String_unsecure(),isOptional:!0}}});import{defineCommand as B,defineQuery as i}from"@contractspec/lib.contracts-spec";import{defineSchemaModel as F,ScalarTypeEnum as g}from"@contractspec/lib.schema";var V=["@examples.service-business-os"],I=F({name:"ListJobsInput",description:"Input for listing jobs",fields:{status:{type:g.String_unsecure(),isOptional:!0},clientId:{type:g.String_unsecure(),isOptional:!0},limit:{type:g.Int_unsecure(),isOptional:!0},offset:{type:g.Int_unsecure(),isOptional:!0}}}),P=F({name:"ListJobsOutput",description:"Output for listing jobs",fields:{jobs:{type:Q,isOptional:!1,isList:!0},total:{type:g.Int_unsecure(),isOptional:!1}}}),r=i({meta:{key:"service.job.list",version:"1.0.0",stability:"stable",owners:[...V],tags:["service-business-os","job","list","query"],description:"List all jobs with filtering",goal:"Retrieve list of jobs",context:"Job management"},io:{input:I,output:P},policy:{auth:"user"},acceptance:{scenarios:[{key:"list-jobs-happy-path",given:["Jobs exist"],when:["User lists jobs"],then:["List of jobs is returned"]}],examples:[{key:"list-active",input:{status:"scheduled",limit:10},output:{jobs:[],total:5}}]}}),T=B({meta:{key:"service.job.schedule",version:"1.0.0",stability:"stable",owners:[...V],tags:["service-business-os","job","schedule"],description:"Schedule a job.",goal:"Schedule work.",context:"Job scheduling."},io:{input:K,output:Q},policy:{auth:"user"},acceptance:{scenarios:[{key:"schedule-job-happy-path",given:["Client exists"],when:["User schedules job"],then:["Job is created with status SCHEDULED"]}],examples:[{key:"schedule-repair",input:{clientId:"client-123",date:"2025-01-20T10:00:00Z",type:"repair"},output:{id:"job-456",status:"scheduled"}}]}}),y=B({meta:{key:"service.job.complete",version:"1.0.0",stability:"stable",owners:[...V],tags:["service-business-os","job","complete"],description:"Mark a job as complete.",goal:"Record job completion.",context:"Job management."},io:{input:U,output:Q},policy:{auth:"user"},acceptance:{scenarios:[{key:"complete-job-happy-path",given:["Job is scheduled"],when:["User completes job"],then:["Job status becomes COMPLETED"]}],examples:[{key:"mark-complete",input:{jobId:"job-456",notes:"Done successfully"},output:{id:"job-456",status:"completed"}}]}});import{defineSchemaModel as R,ScalarTypeEnum as J}from"@contractspec/lib.schema";var X=R({name:"Payment",description:"Payment applied to invoice",fields:{id:{type:J.String_unsecure(),isOptional:!1},invoiceId:{type:J.String_unsecure(),isOptional:!1},amount:{type:J.Float_unsecure(),isOptional:!1},currency:{type:J.String_unsecure(),isOptional:!1},method:{type:J.String_unsecure(),isOptional:!1},reference:{type:J.String_unsecure(),isOptional:!0},receivedAt:{type:J.DateTime(),isOptional:!1}}}),Y=R({name:"RecordPaymentInput",description:"Input for recording a payment",fields:{invoiceId:{type:J.String_unsecure(),isOptional:!1},amount:{type:J.Float_unsecure(),isOptional:!1},method:{type:J.String_unsecure(),isOptional:!1},reference:{type:J.String_unsecure(),isOptional:!0},receivedAt:{type:J.DateTime(),isOptional:!0}}});import{defineCommand as p}from"@contractspec/lib.contracts-spec";var u=["@examples.service-business-os"],m=p({meta:{key:"service.payment.record",version:"1.0.0",stability:"stable",owners:[...u],tags:["service-business-os","payment","record"],description:"Record a payment.",goal:"Track payments.",context:"Billing."},io:{input:Y,output:X},policy:{auth:"user"},acceptance:{scenarios:[{key:"record-payment-happy-path",given:["Invoice exists"],when:["User records payment"],then:["Payment is recorded"]}],examples:[{key:"record-check",input:{invoiceId:"inv-456",amount:100,method:"check"},output:{id:"pay-123",status:"completed"}}]}});import{definePresentation as v,StabilityEnum as D}from"@contractspec/lib.contracts-spec";var bx=v({meta:{key:"service-business-os.dashboard",version:"1.0.0",title:"Service Dashboard",description:"Service business dashboard with overview metrics",domain:"services",owners:["@service-os"],tags:["services","dashboard"],stability:D.Experimental,goal:"Overview of service business metrics",context:"Service home page"},source:{type:"component",framework:"react",componentKey:"ServiceDashboard"},targets:["react","markdown"],policy:{flags:["service.dashboard.enabled"]}}),Mx=v({meta:{key:"service-business-os.client.list",version:"1.0.0",title:"Client List",description:"List of service clients",domain:"services",owners:["@service-os"],tags:["services","clients","list"],stability:D.Experimental,goal:"Browse and manage service clients",context:"Client management"},source:{type:"component",framework:"react",componentKey:"ClientList"},targets:["react","markdown"],policy:{flags:["service.clients.enabled"]}}),fx=v({meta:{key:"service-business-os.quote.list",version:"1.0.0",title:"Quote List",description:"List of quotes with status",domain:"services",owners:["@service-os"],tags:["services","quotes","list"],stability:D.Experimental,goal:"Track and manage quotes",context:"Quote management"},source:{type:"component",framework:"react",componentKey:"QuoteList"},targets:["react","markdown"],policy:{flags:["service.quotes.enabled"]}}),hx=v({meta:{key:"service-business-os.quote.detail",version:"1.0.0",title:"Quote Details",description:"Quote detail with line items",domain:"services",owners:["@service-os"],tags:["services","quote","detail"],stability:D.Experimental,goal:"View and edit quote details",context:"Quote inspection"},source:{type:"component",framework:"react",componentKey:"QuoteDetail"},targets:["react","markdown"],policy:{flags:["service.quotes.enabled"]}}),tx=v({meta:{key:"service-business-os.job.board",version:"1.0.0",title:"Job Board",description:"Job board with kanban view",domain:"services",owners:["@service-os"],tags:["services","jobs","board","kanban"],stability:D.Experimental,goal:"Visual job management",context:"Field service scheduling"},source:{type:"component",framework:"react",componentKey:"JobBoard"},targets:["react"],policy:{flags:["service.jobs.enabled"]}}),sx=v({meta:{key:"service-business-os.invoice.list",version:"1.0.0",title:"Invoice List",description:"List of invoices with payment status",domain:"services",owners:["@service-os"],tags:["services","invoices","list"],stability:D.Experimental,goal:"Track invoices and payments",context:"Billing management"},source:{type:"component",framework:"react",componentKey:"InvoiceList"},targets:["react","markdown"],policy:{flags:["service.invoices.enabled"]}}),dx=v({meta:{key:"service-business-os.payment.list",version:"1.0.0",title:"Payment List",description:"List of payments received",domain:"services",owners:["@service-os"],tags:["services","payments","list"],stability:D.Experimental,goal:"Track received payments",context:"Payment reconciliation"},source:{type:"component",framework:"react",componentKey:"PaymentList"},targets:["react","markdown"],policy:{flags:["service.payments.enabled"]}});import{defineSchemaModel as Z,ScalarTypeEnum as x}from"@contractspec/lib.schema";var k=Z({name:"Quote",description:"Quote/proposal",fields:{id:{type:x.String_unsecure(),isOptional:!1},clientId:{type:x.String_unsecure(),isOptional:!1},title:{type:x.String_unsecure(),isOptional:!1},description:{type:x.String_unsecure(),isOptional:!0},amount:{type:x.Float_unsecure(),isOptional:!1},currency:{type:x.String_unsecure(),isOptional:!1},status:{type:x.String_unsecure(),isOptional:!1},validUntil:{type:x.DateTime(),isOptional:!0},createdAt:{type:x.DateTime(),isOptional:!1}}}),_=Z({name:"CreateQuoteInput",description:"Input for creating a quote",fields:{clientId:{type:x.String_unsecure(),isOptional:!1},title:{type:x.String_unsecure(),isOptional:!1},description:{type:x.String_unsecure(),isOptional:!0},amount:{type:x.Float_unsecure(),isOptional:!1},currency:{type:x.String_unsecure(),isOptional:!0},validUntil:{type:x.DateTime(),isOptional:!0},orgId:{type:x.String_unsecure(),isOptional:!1},ownerId:{type:x.String_unsecure(),isOptional:!1}}}),$=Z({name:"AcceptQuoteInput",description:"Input for accepting a quote",fields:{quoteId:{type:x.String_unsecure(),isOptional:!1},acceptedBy:{type:x.String_unsecure(),isOptional:!1},notes:{type:x.String_unsecure(),isOptional:!0}}});import{defineCommand as N}from"@contractspec/lib.contracts-spec";var O=["@examples.service-business-os"],E=N({meta:{key:"service.quote.create",version:"1.0.0",stability:"stable",owners:[...O],tags:["service-business-os","quote","create"],description:"Create a quote/proposal.",goal:"Quote clients.",context:"Quote creation."},io:{input:_,output:k},policy:{auth:"user"},acceptance:{scenarios:[{key:"create-quote-happy-path",given:["Client exists"],when:["User creates quote"],then:["Quote is created"]}],examples:[{key:"create-proposal",input:{clientId:"client-123",items:[{description:"Project A",price:5000}]},output:{id:"quote-123",status:"draft",total:5000}}]}}),S=N({meta:{key:"service.quote.accept",version:"1.0.0",stability:"stable",owners:[...O],tags:["service-business-os","quote","accept"],description:"Accept a quote.",goal:"Confirm quote.",context:"Quote acceptance."},io:{input:$,output:k},policy:{auth:"user"},acceptance:{scenarios:[{key:"accept-quote-happy-path",given:["Quote is open"],when:["Client accepts quote"],then:["Quote status becomes ACCEPTED"]}],examples:[{key:"client-accepts",input:{quoteId:"quote-123",signature:"John Doe"},output:{id:"quote-123",status:"accepted"}}]}});import{defineFeature as l}from"@contractspec/lib.contracts-spec/features";var nx=l({meta:{key:"service-business-os",title:"Service Business OS",description:"Quotes → jobs → invoices → payments for field services and agencies.",domain:"services",owners:["@service-os"],tags:["services","quotes","jobs","invoices","payments"],stability:"experimental",version:"1.0.0"},operations:[{key:"service.client.create",version:"1.0.0"},{key:"service.quote.create",version:"1.0.0"},{key:"service.quote.accept",version:"1.0.0"},{key:"service.job.schedule",version:"1.0.0"},{key:"service.job.complete",version:"1.0.0"},{key:"service.invoice.issue",version:"1.0.0"},{key:"service.payment.record",version:"1.0.0"},{key:"service.job.list",version:"1.0.0"}],events:[{key:"service.quote.sent",version:"1.0.0"},{key:"service.quote.accepted",version:"1.0.0"},{key:"service.job.scheduled",version:"1.0.0"},{key:"service.job.completed",version:"1.0.0"},{key:"service.invoice.issued",version:"1.0.0"},{key:"service.payment.received",version:"1.0.0"}],presentations:[{key:"service-business-os.dashboard",version:"1.0.0"},{key:"service-business-os.client.list",version:"1.0.0"},{key:"service-business-os.quote.list",version:"1.0.0"},{key:"service-business-os.quote.detail",version:"1.0.0"},{key:"service-business-os.job.board",version:"1.0.0"},{key:"service-business-os.invoice.list",version:"1.0.0"},{key:"service-business-os.payment.list",version:"1.0.0"}],presentationsTargets:[{key:"service-business-os.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.quote.list",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.invoice.list",version:"1.0.0",targets:["react","markdown"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"files",version:"1.0.0"}],provides:[{key:"quotes",version:"1.0.0"},{key:"jobs",version:"1.0.0"},{key:"invoices",version:"1.0.0"}]},telemetry:[{key:"service-business-os.telemetry",version:"1.0.0"}],jobs:[{key:"service-business-os.job.schedule-dispatch",version:"1.0.0"},{key:"service-business-os.job.invoice-reminder",version:"1.0.0"}],docs:["docs.examples.service-business-os","docs.examples.service-business-os.goal","docs.examples.service-business-os.usage","docs.examples.service-business-os.constraints"]});export{bx as ServiceDashboardPresentation,nx as ServiceBusinessFeature,K as ScheduleJobInputModel,T as ScheduleJobContract,Y as RecordPaymentInputModel,m as RecordPaymentContract,k as QuoteModel,fx as QuoteListPresentation,hx as QuoteDetailPresentation,X as PaymentModel,dx as PaymentListPresentation,P as ListJobsOutputModel,r as ListJobsOperation,I as ListJobsInputModel,Q as JobModel,tx as JobBoardPresentation,G as IssueInvoiceInputModel,d as IssueInvoiceContract,z as InvoiceModel,sx as InvoiceListPresentation,h as ExamplesServiceBusinessOsExample,_ as CreateQuoteInputModel,E as CreateQuoteContract,L as CreateClientInputModel,M as CreateClientContract,U as CompleteJobInputModel,y as CompleteJobContract,A as ClientModel,Mx as ClientListPresentation,$ as AcceptQuoteInputModel,S as AcceptQuoteContract};
@@ -1 +1 @@
1
- import{defineFeature as g}from"@contractspec/lib.contracts-spec";var j=g({meta:{key:"service-business-os",title:"Service Business OS",description:"Quotes → jobs → invoices → payments for field services and agencies.",domain:"services",owners:["@service-os"],tags:["services","quotes","jobs","invoices","payments"],stability:"experimental",version:"1.0.0"},operations:[{key:"service.client.create",version:"1.0.0"},{key:"service.quote.create",version:"1.0.0"},{key:"service.quote.accept",version:"1.0.0"},{key:"service.job.schedule",version:"1.0.0"},{key:"service.job.complete",version:"1.0.0"},{key:"service.invoice.issue",version:"1.0.0"},{key:"service.payment.record",version:"1.0.0"},{key:"service.job.list",version:"1.0.0"}],events:[{key:"service.quote.sent",version:"1.0.0"},{key:"service.quote.accepted",version:"1.0.0"},{key:"service.job.scheduled",version:"1.0.0"},{key:"service.job.completed",version:"1.0.0"},{key:"service.invoice.issued",version:"1.0.0"},{key:"service.payment.received",version:"1.0.0"}],presentations:[{key:"service-business-os.dashboard",version:"1.0.0"},{key:"service-business-os.client.list",version:"1.0.0"},{key:"service-business-os.quote.list",version:"1.0.0"},{key:"service-business-os.quote.detail",version:"1.0.0"},{key:"service-business-os.job.board",version:"1.0.0"},{key:"service-business-os.invoice.list",version:"1.0.0"},{key:"service-business-os.payment.list",version:"1.0.0"}],presentationsTargets:[{key:"service-business-os.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.quote.list",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.invoice.list",version:"1.0.0",targets:["react","markdown"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"files",version:"1.0.0"}],provides:[{key:"quotes",version:"1.0.0"},{key:"jobs",version:"1.0.0"},{key:"invoices",version:"1.0.0"}]},telemetry:[{key:"service-business-os.telemetry",version:"1.0.0"}],jobs:[{key:"service-business-os.job.schedule-dispatch",version:"1.0.0"},{key:"service-business-os.job.invoice-reminder",version:"1.0.0"}],docs:["docs.examples.service-business-os","docs.examples.service-business-os.goal","docs.examples.service-business-os.usage","docs.examples.service-business-os.constraints"]});export{j as ServiceBusinessFeature};
1
+ import{defineFeature as g}from"@contractspec/lib.contracts-spec/features";var j=g({meta:{key:"service-business-os",title:"Service Business OS",description:"Quotes → jobs → invoices → payments for field services and agencies.",domain:"services",owners:["@service-os"],tags:["services","quotes","jobs","invoices","payments"],stability:"experimental",version:"1.0.0"},operations:[{key:"service.client.create",version:"1.0.0"},{key:"service.quote.create",version:"1.0.0"},{key:"service.quote.accept",version:"1.0.0"},{key:"service.job.schedule",version:"1.0.0"},{key:"service.job.complete",version:"1.0.0"},{key:"service.invoice.issue",version:"1.0.0"},{key:"service.payment.record",version:"1.0.0"},{key:"service.job.list",version:"1.0.0"}],events:[{key:"service.quote.sent",version:"1.0.0"},{key:"service.quote.accepted",version:"1.0.0"},{key:"service.job.scheduled",version:"1.0.0"},{key:"service.job.completed",version:"1.0.0"},{key:"service.invoice.issued",version:"1.0.0"},{key:"service.payment.received",version:"1.0.0"}],presentations:[{key:"service-business-os.dashboard",version:"1.0.0"},{key:"service-business-os.client.list",version:"1.0.0"},{key:"service-business-os.quote.list",version:"1.0.0"},{key:"service-business-os.quote.detail",version:"1.0.0"},{key:"service-business-os.job.board",version:"1.0.0"},{key:"service-business-os.invoice.list",version:"1.0.0"},{key:"service-business-os.payment.list",version:"1.0.0"}],presentationsTargets:[{key:"service-business-os.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.quote.list",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.invoice.list",version:"1.0.0",targets:["react","markdown"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"files",version:"1.0.0"}],provides:[{key:"quotes",version:"1.0.0"},{key:"jobs",version:"1.0.0"},{key:"invoices",version:"1.0.0"}]},telemetry:[{key:"service-business-os.telemetry",version:"1.0.0"}],jobs:[{key:"service-business-os.job.schedule-dispatch",version:"1.0.0"},{key:"service-business-os.job.invoice-reminder",version:"1.0.0"}],docs:["docs.examples.service-business-os","docs.examples.service-business-os.goal","docs.examples.service-business-os.usage","docs.examples.service-business-os.constraints"]});export{j as ServiceBusinessFeature};
@@ -1,2 +1,2 @@
1
1
  // @bun
2
- import{defineFeature as g}from"@contractspec/lib.contracts-spec";var j=g({meta:{key:"service-business-os",title:"Service Business OS",description:"Quotes \u2192 jobs \u2192 invoices \u2192 payments for field services and agencies.",domain:"services",owners:["@service-os"],tags:["services","quotes","jobs","invoices","payments"],stability:"experimental",version:"1.0.0"},operations:[{key:"service.client.create",version:"1.0.0"},{key:"service.quote.create",version:"1.0.0"},{key:"service.quote.accept",version:"1.0.0"},{key:"service.job.schedule",version:"1.0.0"},{key:"service.job.complete",version:"1.0.0"},{key:"service.invoice.issue",version:"1.0.0"},{key:"service.payment.record",version:"1.0.0"},{key:"service.job.list",version:"1.0.0"}],events:[{key:"service.quote.sent",version:"1.0.0"},{key:"service.quote.accepted",version:"1.0.0"},{key:"service.job.scheduled",version:"1.0.0"},{key:"service.job.completed",version:"1.0.0"},{key:"service.invoice.issued",version:"1.0.0"},{key:"service.payment.received",version:"1.0.0"}],presentations:[{key:"service-business-os.dashboard",version:"1.0.0"},{key:"service-business-os.client.list",version:"1.0.0"},{key:"service-business-os.quote.list",version:"1.0.0"},{key:"service-business-os.quote.detail",version:"1.0.0"},{key:"service-business-os.job.board",version:"1.0.0"},{key:"service-business-os.invoice.list",version:"1.0.0"},{key:"service-business-os.payment.list",version:"1.0.0"}],presentationsTargets:[{key:"service-business-os.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.quote.list",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.invoice.list",version:"1.0.0",targets:["react","markdown"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"files",version:"1.0.0"}],provides:[{key:"quotes",version:"1.0.0"},{key:"jobs",version:"1.0.0"},{key:"invoices",version:"1.0.0"}]},telemetry:[{key:"service-business-os.telemetry",version:"1.0.0"}],jobs:[{key:"service-business-os.job.schedule-dispatch",version:"1.0.0"},{key:"service-business-os.job.invoice-reminder",version:"1.0.0"}],docs:["docs.examples.service-business-os","docs.examples.service-business-os.goal","docs.examples.service-business-os.usage","docs.examples.service-business-os.constraints"]});export{j as ServiceBusinessFeature};
2
+ import{defineFeature as g}from"@contractspec/lib.contracts-spec/features";var j=g({meta:{key:"service-business-os",title:"Service Business OS",description:"Quotes \u2192 jobs \u2192 invoices \u2192 payments for field services and agencies.",domain:"services",owners:["@service-os"],tags:["services","quotes","jobs","invoices","payments"],stability:"experimental",version:"1.0.0"},operations:[{key:"service.client.create",version:"1.0.0"},{key:"service.quote.create",version:"1.0.0"},{key:"service.quote.accept",version:"1.0.0"},{key:"service.job.schedule",version:"1.0.0"},{key:"service.job.complete",version:"1.0.0"},{key:"service.invoice.issue",version:"1.0.0"},{key:"service.payment.record",version:"1.0.0"},{key:"service.job.list",version:"1.0.0"}],events:[{key:"service.quote.sent",version:"1.0.0"},{key:"service.quote.accepted",version:"1.0.0"},{key:"service.job.scheduled",version:"1.0.0"},{key:"service.job.completed",version:"1.0.0"},{key:"service.invoice.issued",version:"1.0.0"},{key:"service.payment.received",version:"1.0.0"}],presentations:[{key:"service-business-os.dashboard",version:"1.0.0"},{key:"service-business-os.client.list",version:"1.0.0"},{key:"service-business-os.quote.list",version:"1.0.0"},{key:"service-business-os.quote.detail",version:"1.0.0"},{key:"service-business-os.job.board",version:"1.0.0"},{key:"service-business-os.invoice.list",version:"1.0.0"},{key:"service-business-os.payment.list",version:"1.0.0"}],presentationsTargets:[{key:"service-business-os.dashboard",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.quote.list",version:"1.0.0",targets:["react","markdown"]},{key:"service-business-os.invoice.list",version:"1.0.0",targets:["react","markdown"]}],capabilities:{requires:[{key:"identity",version:"1.0.0"},{key:"audit-trail",version:"1.0.0"},{key:"notifications",version:"1.0.0"},{key:"files",version:"1.0.0"}],provides:[{key:"quotes",version:"1.0.0"},{key:"jobs",version:"1.0.0"},{key:"invoices",version:"1.0.0"}]},telemetry:[{key:"service-business-os.telemetry",version:"1.0.0"}],jobs:[{key:"service-business-os.job.schedule-dispatch",version:"1.0.0"},{key:"service-business-os.job.invoice-reminder",version:"1.0.0"}],docs:["docs.examples.service-business-os","docs.examples.service-business-os.goal","docs.examples.service-business-os.usage","docs.examples.service-business-os.constraints"]});export{j as ServiceBusinessFeature};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contractspec/example.service-business-os",
3
- "version": "3.7.20",
3
+ "version": "3.7.21",
4
4
  "description": "Service Business OS example (clients, quotes, jobs, invoices) for ContractSpec",
5
5
  "types": "./dist/index.d.ts",
6
6
  "type": "module",
@@ -20,12 +20,12 @@
20
20
  },
21
21
  "dependencies": {
22
22
  "@contractspec/lib.schema": "3.7.14",
23
- "@contractspec/lib.contracts-spec": "5.4.0"
23
+ "@contractspec/lib.contracts-spec": "5.5.0"
24
24
  },
25
25
  "devDependencies": {
26
26
  "@contractspec/tool.typescript": "3.7.13",
27
27
  "typescript": "^5.9.3",
28
- "@contractspec/tool.bun": "3.7.14"
28
+ "@contractspec/tool.bun": "3.7.15"
29
29
  },
30
30
  "exports": {
31
31
  ".": {