docs(openspec): add reporting API contract documentation

Add comprehensive API documentation for the reporting endpoint:
- Request/response structure
- View type inference (did/is/will)
- Blank vs explicit zero semantics
- Status values and error responses

Related to enhanced-allocation change.
This commit is contained in:
2026-03-08 18:22:27 -04:00
parent 3324c4f156
commit b7bbfb45c0
27 changed files with 1632 additions and 35 deletions

View File

@@ -0,0 +1,28 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('allocations', function (Blueprint $table) {
$table->uuid('team_member_id')->nullable()->change();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('allocations', function (Blueprint $table) {
$table->uuid('team_member_id')->nullable(false)->change();
});
}
};

View File

@@ -0,0 +1,33 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
public function up(): void
{
Schema::create('project_month_plans', function (Blueprint $table) {
$table->uuid('id')->primary();
$table->uuid('project_id');
$table->date('month'); // First day of month
$table->decimal('planned_hours', 10, 2)->nullable(); // null = blank/unset
$table->timestamps();
// Unique constraint: one plan per project per month
$table->unique(['project_id', 'month']);
// Foreign key
$table->foreign('project_id')
->references('id')
->on('projects')
->onDelete('cascade');
});
}
public function down(): void
{
Schema::dropIfExists('project_month_plans');
}
};