@lssm/example.service-business-os 0.0.0-canary-20251215234153 → 0.0.0-canary-20251216023757

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.
@@ -0,0 +1 @@
1
+ import{ClientModel as e,CreateClientInputModel as t}from"./client.schema.js";import{defineCommand as n}from"@lssm/lib.contracts";const r=n({meta:{name:`service.client.create`,version:1,stability:`stable`,owners:[...[`@examples.service-business-os`]],tags:[`service-business-os`,`client`,`create`],description:`Create a new client.`,goal:`Onboard clients.`,context:`CRM.`},io:{input:t,output:e},policy:{auth:`user`}});export{r as CreateClientContract};
@@ -0,0 +1 @@
1
+ import{ScalarTypeEnum as e,defineSchemaModel as t}from"@lssm/lib.schema";const n=t({name:`Client`,description:`Client profile`,fields:{id:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},contactEmail:{type:e.String_unsecure(),isOptional:!0},phone:{type:e.String_unsecure(),isOptional:!0},orgId:{type:e.String_unsecure(),isOptional:!1},ownerId:{type:e.String_unsecure(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),r=t({name:`CreateClientInput`,description:`Input for creating a client`,fields:{name:{type:e.String_unsecure(),isOptional:!1},contactEmail:{type:e.String_unsecure(),isOptional:!0},phone:{type:e.String_unsecure(),isOptional:!0},orgId:{type:e.String_unsecure(),isOptional:!1},ownerId:{type:e.String_unsecure(),isOptional:!1},metadata:{type:e.JSON(),isOptional:!0}}});export{n as ClientModel,r as CreateClientInputModel};
@@ -0,0 +1 @@
1
+ import{ClientModel as e,CreateClientInputModel as t}from"./client.schema.js";import{CreateClientContract as n}from"./client.contracts.js";export{e as ClientModel,n as CreateClientContract,t as CreateClientInputModel};
@@ -1 +1 @@
1
- import{ScalarTypeEnum as e,defineSchemaModel as t}from"@lssm/lib.schema";import{defineCommand as n,defineQuery as r}from"@lssm/lib.contracts";const i=[`examples.service-business-os`],a=t({name:`Client`,description:`Client profile`,fields:{id:{type:e.String_unsecure(),isOptional:!1},name:{type:e.String_unsecure(),isOptional:!1},contactEmail:{type:e.String_unsecure(),isOptional:!0},phone:{type:e.String_unsecure(),isOptional:!0},orgId:{type:e.String_unsecure(),isOptional:!1},ownerId:{type:e.String_unsecure(),isOptional:!1},createdAt:{type:e.DateTime(),isOptional:!1}}}),o=t({name:`Quote`,description:`Quote/proposal`,fields:{id:{type:e.String_unsecure(),isOptional:!1},clientId:{type:e.String_unsecure(),isOptional:!1},title:{type:e.String_unsecure(),isOptional:!1},description:{type:e.String_unsecure(),isOptional:!0},amount:{type:e.Float_unsecure(),isOptional:!1},currency:{type:e.String_unsecure(),isOptional:!1},status:{type:e.String_unsecure(),isOptional:!1},validUntil:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),s=t({name:`Job`,description:`Scheduled job`,fields:{id:{type:e.String_unsecure(),isOptional:!1},quoteId:{type:e.String_unsecure(),isOptional:!1},clientId:{type:e.String_unsecure(),isOptional:!1},title:{type:e.String_unsecure(),isOptional:!1},status:{type:e.String_unsecure(),isOptional:!1},scheduledAt:{type:e.DateTime(),isOptional:!0},completedAt:{type:e.DateTime(),isOptional:!0},assignedTo:{type:e.String_unsecure(),isOptional:!0}}}),c=t({name:`Invoice`,description:`Invoice issued for a job`,fields:{id:{type:e.String_unsecure(),isOptional:!1},jobId:{type:e.String_unsecure(),isOptional:!1},invoiceNumber:{type:e.String_unsecure(),isOptional:!1},amount:{type:e.Float_unsecure(),isOptional:!1},currency:{type:e.String_unsecure(),isOptional:!1},status:{type:e.String_unsecure(),isOptional:!1},dueDate:{type:e.DateTime(),isOptional:!0},issuedAt:{type:e.DateTime(),isOptional:!0},paidAt:{type:e.DateTime(),isOptional:!0}}}),l=t({name:`Payment`,description:`Payment applied to invoice`,fields:{id:{type:e.String_unsecure(),isOptional:!1},invoiceId:{type:e.String_unsecure(),isOptional:!1},amount:{type:e.Float_unsecure(),isOptional:!1},currency:{type:e.String_unsecure(),isOptional:!1},method:{type:e.String_unsecure(),isOptional:!1},reference:{type:e.String_unsecure(),isOptional:!0},receivedAt:{type:e.DateTime(),isOptional:!1}}}),u=t({name:`CreateClientInput`,description:`Input for creating a client`,fields:{name:{type:e.String_unsecure(),isOptional:!1},contactEmail:{type:e.String_unsecure(),isOptional:!0},phone:{type:e.String_unsecure(),isOptional:!0},orgId:{type:e.String_unsecure(),isOptional:!1},ownerId:{type:e.String_unsecure(),isOptional:!1},metadata:{type:e.JSON(),isOptional:!0}}}),d=t({name:`CreateQuoteInput`,description:`Input for creating a quote`,fields:{clientId:{type:e.String_unsecure(),isOptional:!1},title:{type:e.String_unsecure(),isOptional:!1},description:{type:e.String_unsecure(),isOptional:!0},amount:{type:e.Float_unsecure(),isOptional:!1},currency:{type:e.String_unsecure(),isOptional:!0},validUntil:{type:e.DateTime(),isOptional:!0},orgId:{type:e.String_unsecure(),isOptional:!1},ownerId:{type:e.String_unsecure(),isOptional:!1}}}),f=t({name:`AcceptQuoteInput`,description:`Input for accepting a quote`,fields:{quoteId:{type:e.String_unsecure(),isOptional:!1},acceptedBy:{type:e.String_unsecure(),isOptional:!1},notes:{type:e.String_unsecure(),isOptional:!0}}}),p=t({name:`ScheduleJobInput`,description:`Input for scheduling a job`,fields:{quoteId:{type:e.String_unsecure(),isOptional:!1},scheduledAt:{type:e.DateTime(),isOptional:!1},assignedTo:{type:e.String_unsecure(),isOptional:!0},location:{type:e.JSON(),isOptional:!0},title:{type:e.String_unsecure(),isOptional:!0}}}),m=t({name:`CompleteJobInput`,description:`Input for completing a job`,fields:{jobId:{type:e.String_unsecure(),isOptional:!1},completedAt:{type:e.DateTime(),isOptional:!0},notes:{type:e.String_unsecure(),isOptional:!0}}}),h=t({name:`IssueInvoiceInput`,description:`Input for issuing an invoice`,fields:{jobId:{type:e.String_unsecure(),isOptional:!1},invoiceNumber:{type:e.String_unsecure(),isOptional:!1},amount:{type:e.Float_unsecure(),isOptional:!1},currency:{type:e.String_unsecure(),isOptional:!0},dueDate:{type:e.DateTime(),isOptional:!0},notes:{type:e.String_unsecure(),isOptional:!0}}}),g=t({name:`RecordPaymentInput`,description:`Input for recording a payment`,fields:{invoiceId:{type:e.String_unsecure(),isOptional:!1},amount:{type:e.Float_unsecure(),isOptional:!1},currency:{type:e.String_unsecure(),isOptional:!0},method:{type:e.String_unsecure(),isOptional:!1},reference:{type:e.String_unsecure(),isOptional:!0},receivedAt:{type:e.DateTime(),isOptional:!1}}}),_=t({name:`ListJobsInput`,description:`Filter for listing jobs`,fields:{orgId:{type:e.String_unsecure(),isOptional:!1},status:{type:e.String_unsecure(),isOptional:!0},assignedTo:{type:e.String_unsecure(),isOptional:!0},from:{type:e.DateTime(),isOptional:!0},to:{type:e.DateTime(),isOptional:!0}}}),v=n({meta:{name:`service.client.create`,version:1,stability:`stable`,owners:[...i],tags:[`service-os`,`client`,`create`],description:`Create a new client.`,goal:`Add a customer to the roster.`,context:`Used during onboarding or intake.`},io:{input:u,output:a},policy:{auth:`user`}}),y=n({meta:{name:`service.quote.create`,version:1,stability:`stable`,owners:[...i],tags:[`service-os`,`quote`,`create`],description:`Create a quote for a client.`,goal:`Propose work and pricing.`,context:`Sales/estimation.`},io:{input:d,output:o},policy:{auth:`user`}}),b=n({meta:{name:`service.quote.accept`,version:1,stability:`stable`,owners:[...i],tags:[`service-os`,`quote`,`accept`],description:`Accept a quote.`,goal:`Move quote into delivery pipeline.`,context:`Client approval.`},io:{input:f,output:o,errors:{QUOTE_NOT_FOUND:{when:`Quote not found`,description:`Quote not found`,http:404},INVALID_STATUS:{when:`The quote my await acceptance`,description:`Quote must be SENT to accept`,http:409}}},policy:{auth:`user`}}),x=n({meta:{name:`service.job.schedule`,version:1,stability:`stable`,owners:[...i],tags:[`service-os`,`job`,`schedule`],description:`Schedule a job after quote acceptance.`,goal:`Plan service execution.`,context:`Ops scheduling.`},io:{input:p,output:s},policy:{auth:`user`}}),S=n({meta:{name:`service.job.complete`,version:1,stability:`stable`,owners:[...i],tags:[`service-os`,`job`,`complete`],description:`Mark a job as completed.`,goal:`Signal readiness for invoicing.`,context:`Technician completion.`},io:{input:m,output:s,errors:{JOB_NOT_FOUND:{when:`Job not found`,description:`Job not found`,http:404},INVALID_STATUS:{when:`Job must be in progress`,description:`Job must be in progress`,http:409}}},policy:{auth:`user`}}),C=n({meta:{name:`service.invoice.issue`,version:1,stability:`stable`,owners:[...i],tags:[`service-os`,`invoice`,`issue`],description:`Issue an invoice for a job.`,goal:`Bill the client.`,context:`Post-completion billing.`},io:{input:h,output:c},policy:{auth:`user`}}),w=n({meta:{name:`service.payment.record`,version:1,stability:`stable`,owners:[...i],tags:[`service-os`,`payment`,`record`],description:`Record a payment for an invoice.`,goal:`Track AR and cash flow.`,context:`Finance ops.`},io:{input:g,output:l},policy:{auth:`user`}}),T=r({meta:{name:`service.job.list`,version:1,stability:`stable`,owners:[...i],tags:[`service-os`,`job`,`list`],description:`List jobs with filters.`,goal:`Operational schedule view.`,context:`Ops dashboard.`},io:{input:_,output:t({name:`ListJobsOutput`,description:`Jobs with total count`,fields:{jobs:{type:s,isArray:!0,isOptional:!1},total:{type:e.Int_unsecure(),isOptional:!1}}})},policy:{auth:`user`}});export{b as AcceptQuoteContract,a as ClientModel,S as CompleteJobContract,v as CreateClientContract,y as CreateQuoteContract,c as InvoiceModel,C as IssueInvoiceContract,s as JobModel,T as ListJobsContract,l as PaymentModel,o as QuoteModel,w as RecordPaymentContract,x as ScheduleJobContract};
1
+ import{ClientModel as e,CreateClientInputModel as t}from"../client/client.schema.js";import{CreateClientContract as n}from"../client/client.contracts.js";import"../client/index.js";import{AcceptQuoteInputModel as r,CreateQuoteInputModel as i,QuoteModel as a}from"../quote/quote.schema.js";import{AcceptQuoteContract as o,CreateQuoteContract as s}from"../quote/quote.contracts.js";import"../quote/index.js";import{CompleteJobInputModel as c,JobModel as l,ScheduleJobInputModel as u}from"../job/job.schema.js";import{CompleteJobContract as d,ScheduleJobContract as f}from"../job/job.contracts.js";import"../job/index.js";import{InvoiceModel as p,IssueInvoiceInputModel as m}from"../invoice/invoice.schema.js";import{IssueInvoiceContract as h}from"../invoice/invoice.contracts.js";import"../invoice/index.js";import{PaymentModel as g,RecordPaymentInputModel as _}from"../payment/payment.schema.js";import{RecordPaymentContract as v}from"../payment/payment.contracts.js";import"../payment/index.js";export{o as AcceptQuoteContract,r as AcceptQuoteInputModel,e as ClientModel,d as CompleteJobContract,c as CompleteJobInputModel,n as CreateClientContract,t as CreateClientInputModel,s as CreateQuoteContract,i as CreateQuoteInputModel,p as InvoiceModel,h as IssueInvoiceContract,m as IssueInvoiceInputModel,l as JobModel,g as PaymentModel,a as QuoteModel,v as RecordPaymentContract,_ as RecordPaymentInputModel,f as ScheduleJobContract,u as ScheduleJobInputModel};
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{InvoiceIssuedEvent as e,JobCompletedEvent as t,JobScheduledEvent as n,PaymentReceivedEvent as r,QuoteAcceptedEvent as i,QuoteSentEvent as a,ServiceBusinessEvents as o}from"./events.js";import s from"./example.js";import{ServiceBusinessFeature as c}from"./feature.js";import{ClientEntity as l,InvoiceEntity as u,InvoiceStatusEnum as d,JobEntity as f,JobStatusEnum as p,PaymentEntity as m,PaymentMethodEnum as h,QuoteEntity as g,QuoteStatusEnum as _,serviceBusinessEntities as v,serviceBusinessSchemaContribution as y}from"./entities/index.js";import{AcceptQuoteContract as b,ClientModel as x,CompleteJobContract as S,CreateClientContract as C,CreateQuoteContract as w,InvoiceModel as T,IssueInvoiceContract as E,JobModel as D,ListJobsContract as O,PaymentModel as k,QuoteModel as A,RecordPaymentContract as j,ScheduleJobContract as M}from"./contracts/index.js";import{ServiceBusinessPresentations as N}from"./presentations/index.js";import{registerServiceBusinessHandlers as P}from"./handlers/index.js";import"./docs/index.js";import{identityRbacSchemaContribution as F}from"@lssm/lib.identity-rbac";import{auditTrailSchemaContribution as I}from"@lssm/module.audit-trail";import{notificationsSchemaContribution as L}from"@lssm/module.notifications";import{filesSchemaContribution as R}from"@lssm/lib.files";import{jobsSchemaContribution as z}from"@lssm/lib.jobs";const B={modules:[F,I,L,R,z,y],provider:`postgresql`,outputPath:`./prisma/schema/generated.prisma`};export{b as AcceptQuoteContract,l as ClientEntity,x as ClientModel,S as CompleteJobContract,C as CreateClientContract,w as CreateQuoteContract,u as InvoiceEntity,e as InvoiceIssuedEvent,T as InvoiceModel,d as InvoiceStatusEnum,E as IssueInvoiceContract,t as JobCompletedEvent,f as JobEntity,D as JobModel,n as JobScheduledEvent,p as JobStatusEnum,O as ListJobsContract,m as PaymentEntity,h as PaymentMethodEnum,k as PaymentModel,r as PaymentReceivedEvent,i as QuoteAcceptedEvent,g as QuoteEntity,A as QuoteModel,a as QuoteSentEvent,_ as QuoteStatusEnum,j as RecordPaymentContract,M as ScheduleJobContract,o as ServiceBusinessEvents,c as ServiceBusinessFeature,N as ServiceBusinessPresentations,s as example,P as registerServiceBusinessHandlers,B as schemaComposition,v as serviceBusinessEntities,y as serviceBusinessSchemaContribution};
1
+ import{ClientModel as e,CreateClientInputModel as t}from"./client/client.schema.js";import{CreateClientContract as n}from"./client/client.contracts.js";import"./client/index.js";import{AcceptQuoteInputModel as r,CreateQuoteInputModel as i,QuoteModel as a}from"./quote/quote.schema.js";import{AcceptQuoteContract as o,CreateQuoteContract as s}from"./quote/quote.contracts.js";import"./quote/index.js";import{CompleteJobInputModel as c,JobModel as l,ScheduleJobInputModel as u}from"./job/job.schema.js";import{CompleteJobContract as d,ScheduleJobContract as f}from"./job/job.contracts.js";import"./job/index.js";import{InvoiceModel as p,IssueInvoiceInputModel as m}from"./invoice/invoice.schema.js";import{IssueInvoiceContract as h}from"./invoice/invoice.contracts.js";import"./invoice/index.js";import{PaymentModel as g,RecordPaymentInputModel as _}from"./payment/payment.schema.js";import{RecordPaymentContract as v}from"./payment/payment.contracts.js";import"./payment/index.js";export{o as AcceptQuoteContract,r as AcceptQuoteInputModel,e as ClientModel,d as CompleteJobContract,c as CompleteJobInputModel,n as CreateClientContract,t as CreateClientInputModel,s as CreateQuoteContract,i as CreateQuoteInputModel,p as InvoiceModel,h as IssueInvoiceContract,m as IssueInvoiceInputModel,l as JobModel,g as PaymentModel,a as QuoteModel,v as RecordPaymentContract,_ as RecordPaymentInputModel,f as ScheduleJobContract,u as ScheduleJobInputModel};
@@ -0,0 +1 @@
1
+ import{InvoiceModel as e,IssueInvoiceInputModel as t}from"./invoice.schema.js";import{IssueInvoiceContract as n}from"./invoice.contracts.js";export{e as InvoiceModel,n as IssueInvoiceContract,t as IssueInvoiceInputModel};
@@ -0,0 +1 @@
1
+ import{InvoiceModel as e,IssueInvoiceInputModel as t}from"./invoice.schema.js";import{defineCommand as n}from"@lssm/lib.contracts";const r=n({meta:{name:`service.invoice.issue`,version:1,stability:`stable`,owners:[...[`@examples.service-business-os`]],tags:[`service-business-os`,`invoice`,`issue`],description:`Issue an invoice for a job.`,goal:`Bill clients.`,context:`Billing.`},io:{input:t,output:e},policy:{auth:`user`}});export{r as IssueInvoiceContract};
@@ -0,0 +1 @@
1
+ import{ScalarTypeEnum as e,defineSchemaModel as t}from"@lssm/lib.schema";const n=t({name:`Invoice`,description:`Invoice issued for a job`,fields:{id:{type:e.String_unsecure(),isOptional:!1},jobId:{type:e.String_unsecure(),isOptional:!1},invoiceNumber:{type:e.String_unsecure(),isOptional:!1},amount:{type:e.Float_unsecure(),isOptional:!1},currency:{type:e.String_unsecure(),isOptional:!1},status:{type:e.String_unsecure(),isOptional:!1},dueDate:{type:e.DateTime(),isOptional:!0},issuedAt:{type:e.DateTime(),isOptional:!0},paidAt:{type:e.DateTime(),isOptional:!0}}}),r=t({name:`IssueInvoiceInput`,description:`Input for issuing an invoice`,fields:{jobId:{type:e.String_unsecure(),isOptional:!1},dueDate:{type:e.DateTime(),isOptional:!0},notes:{type:e.String_unsecure(),isOptional:!0},lineItems:{type:e.JSON(),isOptional:!0}}});export{n as InvoiceModel,r as IssueInvoiceInputModel};
@@ -0,0 +1 @@
1
+ import{CompleteJobInputModel as e,JobModel as t,ScheduleJobInputModel as n}from"./job.schema.js";import{CompleteJobContract as r,ScheduleJobContract as i}from"./job.contracts.js";export{r as CompleteJobContract,e as CompleteJobInputModel,t as JobModel,i as ScheduleJobContract,n as ScheduleJobInputModel};
@@ -0,0 +1 @@
1
+ import{CompleteJobInputModel as e,JobModel as t,ScheduleJobInputModel as n}from"./job.schema.js";import{defineCommand as r}from"@lssm/lib.contracts";const i=[`@examples.service-business-os`],a=r({meta:{name:`service.job.schedule`,version:1,stability:`stable`,owners:[...i],tags:[`service-business-os`,`job`,`schedule`],description:`Schedule a job.`,goal:`Schedule work.`,context:`Job scheduling.`},io:{input:n,output:t},policy:{auth:`user`}}),o=r({meta:{name:`service.job.complete`,version:1,stability:`stable`,owners:[...i],tags:[`service-business-os`,`job`,`complete`],description:`Mark a job as complete.`,goal:`Record job completion.`,context:`Job management.`},io:{input:e,output:t},policy:{auth:`user`}});export{o as CompleteJobContract,a as ScheduleJobContract};
@@ -0,0 +1 @@
1
+ import{ScalarTypeEnum as e,defineSchemaModel as t}from"@lssm/lib.schema";const n=t({name:`Job`,description:`Scheduled job`,fields:{id:{type:e.String_unsecure(),isOptional:!1},quoteId:{type:e.String_unsecure(),isOptional:!1},clientId:{type:e.String_unsecure(),isOptional:!1},title:{type:e.String_unsecure(),isOptional:!1},status:{type:e.String_unsecure(),isOptional:!1},scheduledAt:{type:e.DateTime(),isOptional:!0},completedAt:{type:e.DateTime(),isOptional:!0},assignedTo:{type:e.String_unsecure(),isOptional:!0}}}),r=t({name:`ScheduleJobInput`,description:`Input for scheduling a job`,fields:{quoteId:{type:e.String_unsecure(),isOptional:!1},scheduledAt:{type:e.DateTime(),isOptional:!1},assignedTo:{type:e.String_unsecure(),isOptional:!0},location:{type:e.JSON(),isOptional:!0},title:{type:e.String_unsecure(),isOptional:!0}}}),i=t({name:`CompleteJobInput`,description:`Input for completing a job`,fields:{jobId:{type:e.String_unsecure(),isOptional:!1},completedAt:{type:e.DateTime(),isOptional:!0},notes:{type:e.String_unsecure(),isOptional:!0}}});export{i as CompleteJobInputModel,n as JobModel,r as ScheduleJobInputModel};
@@ -0,0 +1 @@
1
+ import{PaymentModel as e,RecordPaymentInputModel as t}from"./payment.schema.js";import{RecordPaymentContract as n}from"./payment.contracts.js";export{e as PaymentModel,n as RecordPaymentContract,t as RecordPaymentInputModel};
@@ -0,0 +1 @@
1
+ import{PaymentModel as e,RecordPaymentInputModel as t}from"./payment.schema.js";import{defineCommand as n}from"@lssm/lib.contracts";const r=n({meta:{name:`service.payment.record`,version:1,stability:`stable`,owners:[...[`@examples.service-business-os`]],tags:[`service-business-os`,`payment`,`record`],description:`Record a payment.`,goal:`Track payments.`,context:`Billing.`},io:{input:t,output:e},policy:{auth:`user`}});export{r as RecordPaymentContract};
@@ -0,0 +1 @@
1
+ import{ScalarTypeEnum as e,defineSchemaModel as t}from"@lssm/lib.schema";const n=t({name:`Payment`,description:`Payment applied to invoice`,fields:{id:{type:e.String_unsecure(),isOptional:!1},invoiceId:{type:e.String_unsecure(),isOptional:!1},amount:{type:e.Float_unsecure(),isOptional:!1},currency:{type:e.String_unsecure(),isOptional:!1},method:{type:e.String_unsecure(),isOptional:!1},reference:{type:e.String_unsecure(),isOptional:!0},receivedAt:{type:e.DateTime(),isOptional:!1}}}),r=t({name:`RecordPaymentInput`,description:`Input for recording a payment`,fields:{invoiceId:{type:e.String_unsecure(),isOptional:!1},amount:{type:e.Float_unsecure(),isOptional:!1},method:{type:e.String_unsecure(),isOptional:!1},reference:{type:e.String_unsecure(),isOptional:!0},receivedAt:{type:e.DateTime(),isOptional:!0}}});export{n as PaymentModel,r as RecordPaymentInputModel};
@@ -0,0 +1 @@
1
+ import{AcceptQuoteInputModel as e,CreateQuoteInputModel as t,QuoteModel as n}from"./quote.schema.js";import{AcceptQuoteContract as r,CreateQuoteContract as i}from"./quote.contracts.js";export{r as AcceptQuoteContract,e as AcceptQuoteInputModel,i as CreateQuoteContract,t as CreateQuoteInputModel,n as QuoteModel};
@@ -0,0 +1 @@
1
+ import{AcceptQuoteInputModel as e,CreateQuoteInputModel as t,QuoteModel as n}from"./quote.schema.js";import{defineCommand as r}from"@lssm/lib.contracts";const i=[`@examples.service-business-os`],a=r({meta:{name:`service.quote.create`,version:1,stability:`stable`,owners:[...i],tags:[`service-business-os`,`quote`,`create`],description:`Create a quote/proposal.`,goal:`Quote clients.`,context:`Quote creation.`},io:{input:t,output:n},policy:{auth:`user`}}),o=r({meta:{name:`service.quote.accept`,version:1,stability:`stable`,owners:[...i],tags:[`service-business-os`,`quote`,`accept`],description:`Accept a quote.`,goal:`Confirm quote.`,context:`Quote acceptance.`},io:{input:e,output:n},policy:{auth:`user`}});export{o as AcceptQuoteContract,a as CreateQuoteContract};
@@ -0,0 +1 @@
1
+ import{ScalarTypeEnum as e,defineSchemaModel as t}from"@lssm/lib.schema";const n=t({name:`Quote`,description:`Quote/proposal`,fields:{id:{type:e.String_unsecure(),isOptional:!1},clientId:{type:e.String_unsecure(),isOptional:!1},title:{type:e.String_unsecure(),isOptional:!1},description:{type:e.String_unsecure(),isOptional:!0},amount:{type:e.Float_unsecure(),isOptional:!1},currency:{type:e.String_unsecure(),isOptional:!1},status:{type:e.String_unsecure(),isOptional:!1},validUntil:{type:e.DateTime(),isOptional:!0},createdAt:{type:e.DateTime(),isOptional:!1}}}),r=t({name:`CreateQuoteInput`,description:`Input for creating a quote`,fields:{clientId:{type:e.String_unsecure(),isOptional:!1},title:{type:e.String_unsecure(),isOptional:!1},description:{type:e.String_unsecure(),isOptional:!0},amount:{type:e.Float_unsecure(),isOptional:!1},currency:{type:e.String_unsecure(),isOptional:!0},validUntil:{type:e.DateTime(),isOptional:!0},orgId:{type:e.String_unsecure(),isOptional:!1},ownerId:{type:e.String_unsecure(),isOptional:!1}}}),i=t({name:`AcceptQuoteInput`,description:`Input for accepting a quote`,fields:{quoteId:{type:e.String_unsecure(),isOptional:!1},acceptedBy:{type:e.String_unsecure(),isOptional:!1},notes:{type:e.String_unsecure(),isOptional:!0}}});export{i as AcceptQuoteInputModel,r as CreateQuoteInputModel,n as QuoteModel};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lssm/example.service-business-os",
3
- "version": "0.0.0-canary-20251215234153",
3
+ "version": "0.0.0-canary-20251216023757",
4
4
  "description": "Service Business OS example (clients, quotes, jobs, invoices) for ContractSpec",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -34,6 +34,9 @@
34
34
  },
35
35
  "exports": {
36
36
  ".": "./src/index.ts",
37
+ "./client": "./src/client/index.ts",
38
+ "./client/client.contracts": "./src/client/client.contracts.ts",
39
+ "./client/client.schema": "./src/client/client.schema.ts",
37
40
  "./contracts": "./src/contracts/index.ts",
38
41
  "./docs": "./src/docs/index.ts",
39
42
  "./docs/service-business-os.docblock": "./src/docs/service-business-os.docblock.ts",
@@ -42,7 +45,19 @@
42
45
  "./example": "./src/example.ts",
43
46
  "./feature": "./src/feature.ts",
44
47
  "./handlers": "./src/handlers/index.ts",
48
+ "./invoice": "./src/invoice/index.ts",
49
+ "./invoice/invoice.contracts": "./src/invoice/invoice.contracts.ts",
50
+ "./invoice/invoice.schema": "./src/invoice/invoice.schema.ts",
51
+ "./job": "./src/job/index.ts",
52
+ "./job/job.contracts": "./src/job/job.contracts.ts",
53
+ "./job/job.schema": "./src/job/job.schema.ts",
54
+ "./payment": "./src/payment/index.ts",
55
+ "./payment/payment.contracts": "./src/payment/payment.contracts.ts",
56
+ "./payment/payment.schema": "./src/payment/payment.schema.ts",
45
57
  "./presentations": "./src/presentations/index.ts",
58
+ "./quote": "./src/quote/index.ts",
59
+ "./quote/quote.contracts": "./src/quote/quote.contracts.ts",
60
+ "./quote/quote.schema": "./src/quote/quote.schema.ts",
46
61
  "./*": "./*"
47
62
  },
48
63
  "module": "./dist/index.js",
@@ -54,6 +69,9 @@
54
69
  "access": "public",
55
70
  "exports": {
56
71
  ".": "./dist/index.js",
72
+ "./client": "./dist/client/index.js",
73
+ "./client/client.contracts": "./dist/client/client.contracts.js",
74
+ "./client/client.schema": "./dist/client/client.schema.js",
57
75
  "./contracts": "./dist/contracts/index.js",
58
76
  "./docs": "./dist/docs/index.js",
59
77
  "./docs/service-business-os.docblock": "./dist/docs/service-business-os.docblock.js",
@@ -62,7 +80,19 @@
62
80
  "./example": "./dist/example.js",
63
81
  "./feature": "./dist/feature.js",
64
82
  "./handlers": "./dist/handlers/index.js",
83
+ "./invoice": "./dist/invoice/index.js",
84
+ "./invoice/invoice.contracts": "./dist/invoice/invoice.contracts.js",
85
+ "./invoice/invoice.schema": "./dist/invoice/invoice.schema.js",
86
+ "./job": "./dist/job/index.js",
87
+ "./job/job.contracts": "./dist/job/job.contracts.js",
88
+ "./job/job.schema": "./dist/job/job.schema.js",
89
+ "./payment": "./dist/payment/index.js",
90
+ "./payment/payment.contracts": "./dist/payment/payment.contracts.js",
91
+ "./payment/payment.schema": "./dist/payment/payment.schema.js",
65
92
  "./presentations": "./dist/presentations/index.js",
93
+ "./quote": "./dist/quote/index.js",
94
+ "./quote/quote.contracts": "./dist/quote/quote.contracts.js",
95
+ "./quote/quote.schema": "./dist/quote/quote.schema.js",
66
96
  "./*": "./*"
67
97
  }
68
98
  }