[{"data":1,"prerenderedAt":881},["ShallowReactive",2],{"/docs/jobs/mechanicjob/reference/exports/server-advanced-billing-exports":3,"/docs/jobs/mechanicjob/reference/exports/server-advanced-billing-exports-surround":869,"/docs/jobs/mechanicjob/reference/exports/server-advanced-billing-exports-implemented-suggestions":880},{"id":4,"title":5,"body":6,"description":860,"extension":861,"head":862,"implementedSuggestions":862,"meta":863,"navigation":384,"path":864,"schemaOrg":862,"seo":865,"sitemap":866,"stem":867,"__hash__":868},"docs/1.docs/0.jobs/2.mechanicjob/4.reference/3.exports/4.server-advanced-billing-exports.md","Server: Advanced Billing exports",{"type":7,"value":8,"toc":855},"minimark",[9,17,20,25,28,80,91,96,249,254,528,535,539,679,682,686,839,851],[10,11,12],"p",{},[13,14,16],"a",{"href":15},"/docs/jobs/mechanicjob/reference/exports","All exports",[10,18,19],{},"This page documents supported public integration calls and usage examples. It does not expose or reproduce the resource's internal implementation.",[21,22,24],"h2",{"id":23},"server-exports","Server Exports",[10,26,27],{},"All Advanced Pricing and Billing exports return a result table:",[29,30,35],"pre",{"className":31,"code":32,"language":33,"meta":34,"style":34},"language-lua shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n    success = true,\n    data = {}\n}\n","lua","",[36,37,38,47,63,74],"code",{"__ignoreMap":34},[39,40,43],"span",{"class":41,"line":42},"line",1,[39,44,46],{"class":45},"sTEyZ","{\n",[39,48,50,53,57,60],{"class":41,"line":49},2,[39,51,52],{"class":45},"    success ",[39,54,56],{"class":55},"sMK4o","=",[39,58,59],{"class":55}," true",[39,61,62],{"class":45},",\n",[39,64,66,69,71],{"class":41,"line":65},3,[39,67,68],{"class":45},"    data ",[39,70,56],{"class":55},[39,72,73],{"class":45}," {}\n",[39,75,77],{"class":41,"line":76},4,[39,78,79],{"class":45},"}\n",[10,81,82,83,86,87,90],{},"Rejected requests return ",[36,84,85],{},"success = false"," and a stable ",[36,88,89],{},"error"," code. Player identity, mechanic job, grade, permissions, vehicle distance, configured limits, quote state, invoice ownership, and monetary values are always resolved or validated on the server.",[92,93,95],"h3",{"id":94},"advanced-billing-exports","Advanced Billing exports",[97,98,99,115],"table",{},[100,101,102],"thead",{},[103,104,105,109,112],"tr",{},[106,107,108],"th",{},"Export",[106,110,111],{},"Arguments",[106,113,114],{},"Purpose",[116,117,118,134,148,163,178,192,206,220,234],"tbody",{},[103,119,120,126,131],{},[121,122,123],"td",{},[36,124,125],{},"CreateInvoice",[121,127,128],{},[36,129,130],{},"source, payload",[121,132,133],{},"Creates a validated invoice for configured work, positions, or permitted manual lines",[103,135,136,141,145],{},[121,137,138],{},[36,139,140],{},"CreateEstimate",[121,142,143],{},[36,144,130],{},[121,146,147],{},"Creates a time-limited estimate using the same validation and price boundaries",[103,149,150,155,160],{},[121,151,152],{},[36,153,154],{},"GetInvoice",[121,156,157],{},[36,158,159],{},"source, invoiceId",[121,161,162],{},"Returns one invoice to its customer or an authorized workshop manager",[103,164,165,170,175],{},[121,166,167],{},[36,168,169],{},"GetPlayerInvoices",[121,171,172],{},[36,173,174],{},"source, limit?",[121,176,177],{},"Returns up to 100 invoices belonging to that player",[103,179,180,185,189],{},[121,181,182],{},[36,183,184],{},"PayInvoice",[121,186,187],{},[36,188,130],{},[121,190,191],{},"Pays the server-calculated balance or an allowed partial amount",[103,193,194,199,203],{},[121,195,196],{},[36,197,198],{},"RespondToEstimate",[121,200,201],{},[36,202,130],{},[121,204,205],{},"Accepts or declines an estimate owned by the player",[103,207,208,213,217],{},[121,209,210],{},[36,211,212],{},"SendInvoiceReminder",[121,214,215],{},[36,216,130],{},[121,218,219],{},"Sends a permission- and cooldown-checked overdue reminder",[103,221,222,227,231],{},[121,223,224],{},[36,225,226],{},"CancelInvoice",[121,228,229],{},[36,230,130],{},[121,232,233],{},"Cancels an unpaid document when the mechanic grade permits it",[103,235,236,241,246],{},[121,237,238],{},[36,239,240],{},"GetBillingAnalytics",[121,242,243],{},[36,244,245],{},"source, periodDays?",[121,247,248],{},"Returns the authorized workshop's accounting summary",[250,251,253],"h4",{"id":252},"creating-an-invoice-or-estimate","Creating an invoice or estimate",[29,255,258],{"className":31,"code":256,"filename":257,"language":33,"meta":34,"style":34},"local invoice = exports[\"sky_mechanicjob\"]:CreateInvoice(source, {\n    targetId = customer_source,\n    plate = \"ABC123\",\n    historyIds = { 481, 482 },\n    customPositionKeys = { \"diagnostics\" },\n    discountPercent = 5\n})\n\nlocal estimate = exports[\"sky_mechanicjob\"]:CreateEstimate(source, {\n    targetId = customer_source,\n    manualItems = {\n        {\n            label = \"Custom fabrication\",\n            category = \"bodywork\",\n            costType = \"labor\",\n            quantity = 2,\n            unitPrice = 750\n        }\n    }\n})\n","server.lua",[36,259,260,291,301,318,341,362,373,379,386,410,419,430,436,453,470,487,500,511,517,523],{"__ignoreMap":34},[39,261,262,265,268,270,273,276,280,282,285,288],{"class":41,"line":42},[39,263,264],{"class":55},"local",[39,266,267],{"class":45}," invoice ",[39,269,56],{"class":55},[39,271,272],{"class":45}," exports[",[39,274,275],{"class":55},"\"",[39,277,279],{"class":278},"sfazB","sky_mechanicjob",[39,281,275],{"class":55},[39,283,284],{"class":45},"]:",[39,286,125],{"class":287},"s2Zo4",[39,289,290],{"class":45},"(source, {\n",[39,292,293,296,298],{"class":41,"line":49},[39,294,295],{"class":45},"    targetId ",[39,297,56],{"class":55},[39,299,300],{"class":45}," customer_source,\n",[39,302,303,306,308,311,314,316],{"class":41,"line":65},[39,304,305],{"class":45},"    plate ",[39,307,56],{"class":55},[39,309,310],{"class":55}," \"",[39,312,313],{"class":278},"ABC123",[39,315,275],{"class":55},[39,317,62],{"class":45},[39,319,320,323,325,328,332,335,338],{"class":41,"line":76},[39,321,322],{"class":45},"    historyIds ",[39,324,56],{"class":55},[39,326,327],{"class":45}," { ",[39,329,331],{"class":330},"sbssI","481",[39,333,334],{"class":45},", ",[39,336,337],{"class":330},"482",[39,339,340],{"class":45}," },\n",[39,342,344,347,349,351,353,356,359],{"class":41,"line":343},5,[39,345,346],{"class":45},"    customPositionKeys ",[39,348,56],{"class":55},[39,350,327],{"class":45},[39,352,275],{"class":55},[39,354,355],{"class":278},"diagnostics",[39,357,358],{"class":55},"\" ",[39,360,361],{"class":45},"},\n",[39,363,365,368,370],{"class":41,"line":364},6,[39,366,367],{"class":45},"    discountPercent ",[39,369,56],{"class":55},[39,371,372],{"class":330}," 5\n",[39,374,376],{"class":41,"line":375},7,[39,377,378],{"class":45},"})\n",[39,380,382],{"class":41,"line":381},8,[39,383,385],{"emptyLinePlaceholder":384},true,"\n",[39,387,389,391,394,396,398,400,402,404,406,408],{"class":41,"line":388},9,[39,390,264],{"class":55},[39,392,393],{"class":45}," estimate ",[39,395,56],{"class":55},[39,397,272],{"class":45},[39,399,275],{"class":55},[39,401,279],{"class":278},[39,403,275],{"class":55},[39,405,284],{"class":45},[39,407,140],{"class":287},[39,409,290],{"class":45},[39,411,413,415,417],{"class":41,"line":412},10,[39,414,295],{"class":45},[39,416,56],{"class":55},[39,418,300],{"class":45},[39,420,422,425,427],{"class":41,"line":421},11,[39,423,424],{"class":45},"    manualItems ",[39,426,56],{"class":55},[39,428,429],{"class":45}," {\n",[39,431,433],{"class":41,"line":432},12,[39,434,435],{"class":45},"        {\n",[39,437,439,442,444,446,449,451],{"class":41,"line":438},13,[39,440,441],{"class":45},"            label ",[39,443,56],{"class":55},[39,445,310],{"class":55},[39,447,448],{"class":278},"Custom fabrication",[39,450,275],{"class":55},[39,452,62],{"class":45},[39,454,456,459,461,463,466,468],{"class":41,"line":455},14,[39,457,458],{"class":45},"            category ",[39,460,56],{"class":55},[39,462,310],{"class":55},[39,464,465],{"class":278},"bodywork",[39,467,275],{"class":55},[39,469,62],{"class":45},[39,471,473,476,478,480,483,485],{"class":41,"line":472},15,[39,474,475],{"class":45},"            costType ",[39,477,56],{"class":55},[39,479,310],{"class":55},[39,481,482],{"class":278},"labor",[39,484,275],{"class":55},[39,486,62],{"class":45},[39,488,490,493,495,498],{"class":41,"line":489},16,[39,491,492],{"class":45},"            quantity ",[39,494,56],{"class":55},[39,496,497],{"class":330}," 2",[39,499,62],{"class":45},[39,501,503,506,508],{"class":41,"line":502},17,[39,504,505],{"class":45},"            unitPrice ",[39,507,56],{"class":55},[39,509,510],{"class":330}," 750\n",[39,512,514],{"class":41,"line":513},18,[39,515,516],{"class":45},"        }\n",[39,518,520],{"class":41,"line":519},19,[39,521,522],{"class":45},"    }\n",[39,524,526],{"class":41,"line":525},20,[39,527,378],{"class":45},[10,529,530,531,534],{},"Manual positions, custom prices, discounts, document totals, and estimates must be enabled for the mechanic's grade. The customer must be online and within eight meters when ",[36,532,533],{},"targetId"," is used.",[250,536,538],{"id":537},"reading-and-paying-invoices","Reading and paying invoices",[29,540,542],{"className":31,"code":541,"filename":257,"language":33,"meta":34,"style":34},"local invoice = exports[\"sky_mechanicjob\"]:GetInvoice(source, invoice_id)\nlocal invoices = exports[\"sky_mechanicjob\"]:GetPlayerInvoices(source, 25)\n\nlocal payment = exports[\"sky_mechanicjob\"]:PayInvoice(\n    source,\n    {\n        invoiceId = invoice_id,\n        paymentMethod = \"card\",\n        amount = 500\n    }\n)\n",[36,543,544,567,597,601,625,630,635,645,661,671,675],{"__ignoreMap":34},[39,545,546,548,550,552,554,556,558,560,562,564],{"class":41,"line":42},[39,547,264],{"class":55},[39,549,267],{"class":45},[39,551,56],{"class":55},[39,553,272],{"class":45},[39,555,275],{"class":55},[39,557,279],{"class":278},[39,559,275],{"class":55},[39,561,284],{"class":45},[39,563,154],{"class":287},[39,565,566],{"class":45},"(source, invoice_id)\n",[39,568,569,571,574,576,578,580,582,584,586,588,591,594],{"class":41,"line":49},[39,570,264],{"class":55},[39,572,573],{"class":45}," invoices ",[39,575,56],{"class":55},[39,577,272],{"class":45},[39,579,275],{"class":55},[39,581,279],{"class":278},[39,583,275],{"class":55},[39,585,284],{"class":45},[39,587,169],{"class":287},[39,589,590],{"class":45},"(source, ",[39,592,593],{"class":330},"25",[39,595,596],{"class":45},")\n",[39,598,599],{"class":41,"line":65},[39,600,385],{"emptyLinePlaceholder":384},[39,602,603,605,608,610,612,614,616,618,620,622],{"class":41,"line":76},[39,604,264],{"class":55},[39,606,607],{"class":45}," payment ",[39,609,56],{"class":55},[39,611,272],{"class":45},[39,613,275],{"class":55},[39,615,279],{"class":278},[39,617,275],{"class":55},[39,619,284],{"class":45},[39,621,184],{"class":287},[39,623,624],{"class":45},"(\n",[39,626,627],{"class":41,"line":343},[39,628,629],{"class":45},"    source,\n",[39,631,632],{"class":41,"line":364},[39,633,634],{"class":45},"    {\n",[39,636,637,640,642],{"class":41,"line":375},[39,638,639],{"class":45},"        invoiceId ",[39,641,56],{"class":55},[39,643,644],{"class":45}," invoice_id,\n",[39,646,647,650,652,654,657,659],{"class":41,"line":381},[39,648,649],{"class":45},"        paymentMethod ",[39,651,56],{"class":55},[39,653,310],{"class":55},[39,655,656],{"class":278},"card",[39,658,275],{"class":55},[39,660,62],{"class":45},[39,662,663,666,668],{"class":41,"line":388},[39,664,665],{"class":45},"        amount ",[39,667,56],{"class":55},[39,669,670],{"class":330}," 500\n",[39,672,673],{"class":41,"line":412},[39,674,522],{"class":45},[39,676,677],{"class":41,"line":421},[39,678,596],{"class":45},[10,680,681],{},"The server loads the invoice owner and outstanding balance, enforces the deposit and minimum partial payment, removes the money, deposits workshop funds, records the payment, and updates the status. Supplying a larger amount cannot overpay the invoice.",[250,683,685],{"id":684},"estimate-and-management-actions","Estimate and management actions",[29,687,689],{"className":31,"code":688,"filename":257,"language":33,"meta":34,"style":34},"exports[\"sky_mechanicjob\"]:RespondToEstimate(customer_source, {\n    invoiceId = estimate_id,\n    accepted = true\n})\nexports[\"sky_mechanicjob\"]:SendInvoiceReminder(mechanic_source, {\n    invoiceId = invoice_id\n})\nexports[\"sky_mechanicjob\"]:CancelInvoice(mechanic_source, {\n    invoiceId = invoice_id,\n    reason = \"Created by mistake\"\n})\n\nlocal analytics = exports[\"sky_mechanicjob\"]:GetBillingAnalytics(mechanic_source, 30)\n",[36,690,691,709,719,729,733,750,759,763,779,787,802,806,810],{"__ignoreMap":34},[39,692,693,696,698,700,702,704,706],{"class":41,"line":42},[39,694,695],{"class":45},"exports[",[39,697,275],{"class":55},[39,699,279],{"class":278},[39,701,275],{"class":55},[39,703,284],{"class":45},[39,705,198],{"class":287},[39,707,708],{"class":45},"(customer_source, {\n",[39,710,711,714,716],{"class":41,"line":49},[39,712,713],{"class":45},"    invoiceId ",[39,715,56],{"class":55},[39,717,718],{"class":45}," estimate_id,\n",[39,720,721,724,726],{"class":41,"line":65},[39,722,723],{"class":45},"    accepted ",[39,725,56],{"class":55},[39,727,728],{"class":55}," true\n",[39,730,731],{"class":41,"line":76},[39,732,378],{"class":45},[39,734,735,737,739,741,743,745,747],{"class":41,"line":343},[39,736,695],{"class":45},[39,738,275],{"class":55},[39,740,279],{"class":278},[39,742,275],{"class":55},[39,744,284],{"class":45},[39,746,212],{"class":287},[39,748,749],{"class":45},"(mechanic_source, {\n",[39,751,752,754,756],{"class":41,"line":364},[39,753,713],{"class":45},[39,755,56],{"class":55},[39,757,758],{"class":45}," invoice_id\n",[39,760,761],{"class":41,"line":375},[39,762,378],{"class":45},[39,764,765,767,769,771,773,775,777],{"class":41,"line":381},[39,766,695],{"class":45},[39,768,275],{"class":55},[39,770,279],{"class":278},[39,772,275],{"class":55},[39,774,284],{"class":45},[39,776,226],{"class":287},[39,778,749],{"class":45},[39,780,781,783,785],{"class":41,"line":388},[39,782,713],{"class":45},[39,784,56],{"class":55},[39,786,644],{"class":45},[39,788,789,792,794,796,799],{"class":41,"line":412},[39,790,791],{"class":45},"    reason ",[39,793,56],{"class":55},[39,795,310],{"class":55},[39,797,798],{"class":278},"Created by mistake",[39,800,801],{"class":55},"\"\n",[39,803,804],{"class":41,"line":421},[39,805,378],{"class":45},[39,807,808],{"class":41,"line":432},[39,809,385],{"emptyLinePlaceholder":384},[39,811,812,814,817,819,821,823,825,827,829,831,834,837],{"class":41,"line":438},[39,813,264],{"class":55},[39,815,816],{"class":45}," analytics ",[39,818,56],{"class":55},[39,820,272],{"class":45},[39,822,275],{"class":55},[39,824,279],{"class":278},[39,826,275],{"class":55},[39,828,284],{"class":45},[39,830,240],{"class":287},[39,832,833],{"class":45},"(mechanic_source, ",[39,835,836],{"class":330},"30",[39,838,596],{"class":45},[840,841,844],"callout",{"color":842,"icon":843},"success","i-lucide-shield-check",[10,845,846,847,850],{},"These are server exports. Do not proxy them through an unvalidated ",[36,848,849],{},"RegisterNetEvent",". If a client UI needs an action, let the existing Mechanic callbacks perform the server-side validation.",[852,853,854],"style",{},"html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":34,"searchDepth":42,"depth":49,"links":856},[857],{"id":23,"depth":49,"text":24,"children":858},[859],{"id":94,"depth":65,"text":95},"Reference for Server: Advanced Billing exports in mechanicjob.","md",null,{},"/docs/jobs/mechanicjob/reference/exports/server-advanced-billing-exports",{"title":5,"description":860},{"loc":864},"1.docs/0.jobs/2.mechanicjob/4.reference/3.exports/4.server-advanced-billing-exports","Y_SvQKJ7byN1UK7-7rxTdcM_94F9mIGz1smql4OWRkk",[870,875],{"title":871,"path":872,"stem":873,"description":874,"children":-1},"Server: Advanced Pricing exports","/docs/jobs/mechanicjob/reference/exports/server-advanced-pricing-exports","1.docs/0.jobs/2.mechanicjob/4.reference/3.exports/3.server-advanced-pricing-exports","Reference for Server: Advanced Pricing exports in mechanicjob.",{"title":876,"path":877,"stem":878,"description":879,"children":-1},"Server: RepairVehicle(netId, reason?)","/docs/jobs/mechanicjob/reference/exports/server-repairvehicle","1.docs/0.jobs/2.mechanicjob/4.reference/3.exports/5.server-repairvehicle","Reference for Server: RepairVehicle(netId, reason?) in mechanicjob.",[],1791814214156]