|
| 1 | + |
| 2 | +\section{Mandatory sections} |
| 3 | + |
| 4 | +\begin{spectable}{Section}{Purpose} |
| 5 | + \spectablerow{[ucf-meta]}{Meta-information about file version, generator, timestamps} |
| 6 | + \spectablerow{[complainant-details]}{Citizen identity and contact details} |
| 7 | + \spectablerow{[complaint-details]}{Core complaint description and classification} |
| 8 | + \spectablerow{[location]}{Location of the issue (as coordinates or link)} |
| 9 | + \spectablerow{[[attachment-details]]}{List of zero or more attachments (image, video, etc.)} |
| 10 | + \spectablerow{[complaint-status]}{Complaint state and optional status notes} |
| 11 | +\end{spectable} |
| 12 | + |
| 13 | +\section{Mandatory sections descriptions} |
| 14 | + |
| 15 | +\subsection{[ucf-meta]} |
| 16 | + |
| 17 | +Metadata describing this UCF file. |
| 18 | + |
| 19 | +\begin{specsubtable}{Key}{Type}{Required}{Description} |
| 20 | + \specsubtablerow{version}{string}{yes}{UCF specification version (e.g., "0.2")} |
| 21 | + \specsubtablerow{generated-at}{datetime (RFC 3339)}{yes}{UTC or local datetime of file creation} |
| 22 | + \specsubtablerow{source-app}{string}{yes}{Name or identifier of the application that generated this file} |
| 23 | +\end{specsubtable} |
| 24 | + |
| 25 | +Example: |
| 26 | +\medskip |
| 27 | +\begin{lstlisting}[language=bash] |
| 28 | +[ucf-meta] |
| 29 | +version = "0.2" |
| 30 | +generated-at = "2025-10-22T17:30:00+05:30" |
| 31 | +source-app = "MyCitizenApp" |
| 32 | +\end{lstlisting} |
| 33 | + |
| 34 | +\subsection{[complainant-details]} |
| 35 | + |
| 36 | +Basic details about the complainant (sometimes auto-populated). |
| 37 | + |
| 38 | +\begin{specsubtable}{Key}{Type}{Required}{Description} |
| 39 | + \specsubtablerow{name}{string}{yes}{Full name of complainant} |
| 40 | + \specsubtablerow{contact}{string}{yes}{Primary contact number} |
| 41 | + \specsubtablerow{email}{string}{no}{Optional email address} |
| 42 | + \specsubtablerow{auth-id}{string}{no}{Unique identifier (ID from authentication system)} |
| 43 | +\end{specsubtable} |
| 44 | + |
| 45 | +Example: |
| 46 | +\medskip |
| 47 | +\begin{lstlisting}[language=bash] |
| 48 | +[complainant-details] |
| 49 | +name = "ABC Kumar" |
| 50 | +contact = "1234567890" |
| 51 | + |
| 52 | +auth-id = "citizen_02349" |
| 53 | +\end{lstlisting} |
| 54 | + |
| 55 | +\subsection{[complaint-details]} |
| 56 | + |
| 57 | +Core description of the issue and the department responsible. |
| 58 | + |
| 59 | +\begin{specsubtable}{Key}{Type}{Required}{Description} |
| 60 | + \specsubtablerow{description}{string}{yes}{Human-readable complaint text} |
| 61 | + \specsubtablerow{category}{string}{no}{Complaint theme (sanitation, traffic, etc.)} |
| 62 | + \specsubtablerow{department}{string}{yes}{Target department identifier} |
| 63 | + \specsubtablerow{priority}{string}{no}{One of low, normal, high} |
| 64 | + \specsubtablerow{submission-method}{string}{yes}{Originating platform: app, web, kiosk, helpline, etc.} |
| 65 | + \specsubtablerow{attachment}{boolean}{yes}{Whether this complaint has one or more attachments} |
| 66 | + \specsubtablerow{ticket-id}{string}{no}{assigned id by the generation system} |
| 67 | +\end{specsubtable} |
| 68 | + |
| 69 | +Example: |
| 70 | +\medskip |
| 71 | +\begin{lstlisting}[language=bash] |
| 72 | +[complaint-details] |
| 73 | +description = "Garbage not cleaned for 3 days" |
| 74 | +category = "sanitation" |
| 75 | +department = "bbmp" |
| 76 | +priority = "normal" |
| 77 | +submission-method = "app" |
| 78 | +attachment = true |
| 79 | +\end{lstlisting} |
| 80 | + |
| 81 | +\subsection{[location]} |
| 82 | + |
| 83 | +Defines the place related to the complaint. |
| 84 | + |
| 85 | +\begin{specsubtable}{Key}{Type}{Required}{Description} |
| 86 | + \specsubtablerow{method}{string}{yes}{How the location is represented: url or coordinates} |
| 87 | + \specsubtablerow{url}{string}{conditional}{Required if method = "url"} |
| 88 | + \specsubtablerow{latitude}{float}{conditional}{Required if method = "coordinates"} |
| 89 | + \specsubtablerow{longitude}{float}{conditional}{Required if method = "coordinates"} |
| 90 | +\end{specsubtable} |
| 91 | + |
| 92 | +Example: |
| 93 | +\medskip |
| 94 | +\begin{lstlisting}[language=bash] |
| 95 | +[location] |
| 96 | +method = "coordinates" |
| 97 | +latitude = 13.00753 |
| 98 | +longitude = 77.65592 |
| 99 | +\end{lstlisting} |
| 100 | + |
| 101 | +\subsection{[[attachment-details]]} |
| 102 | + |
| 103 | +An array of tables, each describing a single attachment. |
| 104 | +If no attachments exist, this section may be omitted. |
| 105 | + |
| 106 | +\begin{specsubtable}{Key}{Type}{Required}{Description} |
| 107 | + \specsubtablerow{url}{string}{yes}{Publicly accessible or signed media link} |
| 108 | + \specsubtablerow{file-type}{string}{yes}{MIME type (image/jpeg, video/mp4, etc.)} |
| 109 | + \specsubtablerow{description}{string}{no}{Short textual note about attachment} |
| 110 | + \specsubtablerow{hash}{string}{no}{MD5 or SHA256 hash for integrity verification} |
| 111 | +\end{specsubtable} |
| 112 | + |
| 113 | +Example: |
| 114 | +\medskip |
| 115 | +\begin{lstlisting}[language=bash] |
| 116 | +[[attachment-details]] |
| 117 | +url = "https://photos.app.goo.gl/4MsLGvJeGZoWUyL67" |
| 118 | +file-type = "image/jpeg" |
| 119 | +description = "Garbage pile photo" |
| 120 | +hash = "b1946ac92492d2347c6235b4d2611184" |
| 121 | + |
| 122 | +[[attachment-details]] |
| 123 | +url = "https://audio.example.org/complaint-note.mp3" |
| 124 | +file-type = "audio/mpeg" |
| 125 | +description = "Voice note describing complaint" |
| 126 | +hash = "ad0234829205b9033196ba818f7a872b" |
| 127 | +\end{lstlisting} |
| 128 | + |
| 129 | +\subsection{[complaint-status]} |
| 130 | + |
| 131 | +Describes current status of the complaint process. |
| 132 | + |
| 133 | +\begin{specsubtable}{Key}{Type}{Required}{Description} |
| 134 | + \specsubtablerow{status}{string}{yes}{One of: submitted, in-process, closed} |
| 135 | + \specsubtablerow{comment}{string}{no}{Optional remarks from operator or system} |
| 136 | + \specsubtablerow{last-updated}{datetime}{no}{Last modification timestamp} |
| 137 | + \specsubtablerow{tracker-link}{string}{no}{External link to track live progress} |
| 138 | +\end{specsubtable} |
| 139 | + |
| 140 | +Example: |
| 141 | +\medskip |
| 142 | +\begin{lstlisting}[language=bash] |
| 143 | +[complaint-status] |
| 144 | +status = "submitted" |
| 145 | +comments = "" |
| 146 | +last-updated = "2025-10-22T17:32:00+05:30" |
| 147 | +tracker-link = "" |
| 148 | +\end{lstlisting} |
| 149 | + |
| 150 | +\section{Optional Extensions} |
| 151 | + |
| 152 | +Departments or applications may define additional sections using custom tables, |
| 153 | +each new table should use either a prefix naming scheme ([custom.<name>]) or |
| 154 | +include a namespace hint to avoid collision. |
0 commit comments