json($data)->header('Cache-Control','no-store, private'); } private function only(Request $r,array $keys): void { abort_if(array_diff(array_keys($r->all()),$keys)!==[],422,'Campo protegido ou fora do âmbito.'); } public function index(Request $r,CatalogueAccounting $c) { return $this->response($c->listing($r->user()->id)); } public function propose(Request $r,CatalogueAccounting $c) { $this->only($r,['kind','data','valid_from','valid_until','reason','previous_id','replaces_id']); $data=$r->validate(['kind'=>'required|in:plan,account,category,service_link,service_override','data'=>'required|array','valid_from'=>'required|date_format:Y-m-d','valid_until'=>'nullable|date_format:Y-m-d|after_or_equal:valid_from','reason'=>'required|string|max:2000','previous_id'=>'nullable|integer|min:1','replaces_id'=>'nullable|integer|min:1']); return $this->response($c->propose($r->user()->id,$data,(string)$r->header('Idempotency-Key'))); } public function submit(Request $r,int $id,CatalogueAccounting $c) { $this->only($r,[]); return $this->response($c->submit($id,$r->user()->id,(string)$r->header('Idempotency-Key'))); } public function decide(Request $r,int $id,CatalogueAccounting $c) { $this->only($r,['decision','reason']); return $this->response($c->decide($id,$r->user()->id,$r->validate(['decision'=>'required|in:approved,refused','reason'=>'required|string|max:2000']),(string)$r->header('Idempotency-Key'))); } public function resolve(Request $r,int $service,CatalogueAccounting $c) { $this->only($r,['reference_date']); $r->validate(['reference_date'=>'nullable|date_format:Y-m-d']); return $this->response($c->resolve($service,$r->query('reference_date'),$r->user()->id)); } public function capture(Request $r,CatalogueAccounting $c) { $this->only($r,['area','record_id','record_version','service_id','reference_date','resolution_revision']); $data=$r->validate(['area'=>'required|in:service_drafts,billing_drafts','record_id'=>'required|integer|min:1','record_version'=>'required|integer|min:1','service_id'=>'required|integer|min:1','reference_date'=>'required|date_format:Y-m-d','resolution_revision'=>'required|string|regex:/^[a-f0-9]{64}$/D']); foreach(['record_id','record_version','service_id'] as $field)$data[$field]=(int)$data[$field]; return $this->response($c->capture($r->user()->id,$data,(string)$r->header('Idempotency-Key'))); } public function history(Request $r,string $area,int $record,CatalogueAccounting $c) { abort_unless(in_array($area,['service_drafts','billing_drafts'],true),404); return $this->response(['records'=>$c->history($r->user()->id,$area,$record)]); } }